mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-11-16 17:38:45 -05:00
d4da365c5f
* Reorganize strmatcher's package structure * Rename types in strmatcher package according to their file names * Stablize strmatcher's Matcher interface * Implement []matcherEntry as SimpleMatcherGroup * Implement mph algorithm extracted from MphIndexMatcher as MphMatcherGroup * Implement AddMatcher/AddFullMatcher/AddDomainMatcher/AddSubstrMatcher for each MatcherGroup * Stablize strmatcher's MatcherGroup interface * Stablize strmatcher's IndexMatcher interface * Update strmatcher's benchmark * Compatibility fix for app/router's DomainMatcher condition * Fix code quality issue * Fix basic matcher issues * Update priority specification for Substr matcher
31 lines
800 B
Go
31 lines
800 B
Go
package strmatcher
|
|
|
|
// FullMatcherGroup is an implementation of MatcherGroup.
|
|
// It uses a hash table to facilitate exact match lookup.
|
|
type FullMatcherGroup struct {
|
|
matchers map[string][]uint32
|
|
}
|
|
|
|
// AddFullMatcher implements MatcherGroupForFull.AddFullMatcher.
|
|
func (g *FullMatcherGroup) AddFullMatcher(matcher FullMatcher, value uint32) {
|
|
if g.matchers == nil {
|
|
g.matchers = make(map[string][]uint32)
|
|
}
|
|
|
|
domain := matcher.Pattern()
|
|
g.matchers[domain] = append(g.matchers[domain], value)
|
|
}
|
|
|
|
// Match implements MatcherGroup.Match.
|
|
func (g *FullMatcherGroup) Match(input string) []uint32 {
|
|
if g.matchers == nil {
|
|
return nil
|
|
}
|
|
return g.matchers[input]
|
|
}
|
|
|
|
// MatchAny implements MatcherGroup.Any.
|
|
func (g *FullMatcherGroup) MatchAny(input string) bool {
|
|
return len(g.Match(input)) > 0
|
|
}
|