chore: replace IpCidrTrie with binary search

This commit is contained in:
Larvan2
2024-01-09 16:37:34 +08:00
parent ffcd672ebf
commit 425bc692ad
3 changed files with 206 additions and 6 deletions

View File

@@ -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{}