mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-02-26 16:57:08 +00:00
chore: replace IpCidrTrie with binary search
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"github.com/metacubex/mihomo/component/trie"
|
||||
"github.com/metacubex/mihomo/component/cidr"
|
||||
C "github.com/metacubex/mihomo/constant"
|
||||
"github.com/metacubex/mihomo/log"
|
||||
)
|
||||
@@ -9,7 +9,8 @@ import (
|
||||
type ipcidrStrategy struct {
|
||||
count int
|
||||
shouldResolveIP bool
|
||||
trie *trie.IpCidrTrie
|
||||
cidrSet *cidr.IpCidrSet
|
||||
//trie *trie.IpCidrTrie
|
||||
}
|
||||
|
||||
func (i *ipcidrStrategy) ShouldFindProcess() bool {
|
||||
@@ -17,7 +18,8 @@ func (i *ipcidrStrategy) ShouldFindProcess() bool {
|
||||
}
|
||||
|
||||
func (i *ipcidrStrategy) Match(metadata *C.Metadata) bool {
|
||||
return i.trie != nil && i.trie.IsContain(metadata.DstIP.AsSlice())
|
||||
// return i.trie != nil && i.trie.IsContain(metadata.DstIP.AsSlice())
|
||||
return i.cidrSet != nil && i.cidrSet.IsContain(metadata.DstIP.AsSlice())
|
||||
}
|
||||
|
||||
func (i *ipcidrStrategy) Count() int {
|
||||
@@ -29,13 +31,15 @@ func (i *ipcidrStrategy) ShouldResolveIP() bool {
|
||||
}
|
||||
|
||||
func (i *ipcidrStrategy) Reset() {
|
||||
i.trie = trie.NewIpCidrTrie()
|
||||
// i.trie = trie.NewIpCidrTrie()
|
||||
i.cidrSet = cidr.NewIpCidrSet()
|
||||
i.count = 0
|
||||
i.shouldResolveIP = false
|
||||
}
|
||||
|
||||
func (i *ipcidrStrategy) Insert(rule string) {
|
||||
err := i.trie.AddIpCidrForString(rule)
|
||||
//err := i.trie.AddIpCidrForString(rule)
|
||||
err := i.cidrSet.AddIpCidrForString(rule)
|
||||
if err != nil {
|
||||
log.Warnln("invalid Ipcidr:[%s]", rule)
|
||||
} else {
|
||||
@@ -44,7 +48,9 @@ func (i *ipcidrStrategy) Insert(rule string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (i *ipcidrStrategy) FinishInsert() {}
|
||||
func (i *ipcidrStrategy) FinishInsert() {
|
||||
i.cidrSet.Merge()
|
||||
}
|
||||
|
||||
func NewIPCidrStrategy() *ipcidrStrategy {
|
||||
return &ipcidrStrategy{}
|
||||
|
||||
Reference in New Issue
Block a user