2021-10-31 06:01:13 -04:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2022-09-16 02:40:03 -04:00
|
|
|
func NewFullMatcherGroup() *FullMatcherGroup {
|
|
|
|
return &FullMatcherGroup{
|
|
|
|
matchers: make(map[string][]uint32),
|
2021-10-31 06:01:13 -04:00
|
|
|
}
|
2022-09-16 02:40:03 -04:00
|
|
|
}
|
2021-10-31 06:01:13 -04:00
|
|
|
|
2022-09-16 02:40:03 -04:00
|
|
|
// AddFullMatcher implements MatcherGroupForFull.AddFullMatcher.
|
|
|
|
func (g *FullMatcherGroup) AddFullMatcher(matcher FullMatcher, value uint32) {
|
2021-10-31 06:01:13 -04:00
|
|
|
domain := matcher.Pattern()
|
|
|
|
g.matchers[domain] = append(g.matchers[domain], value)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Match implements MatcherGroup.Match.
|
|
|
|
func (g *FullMatcherGroup) Match(input string) []uint32 {
|
|
|
|
return g.matchers[input]
|
|
|
|
}
|
|
|
|
|
|
|
|
// MatchAny implements MatcherGroup.Any.
|
|
|
|
func (g *FullMatcherGroup) MatchAny(input string) bool {
|
2022-09-16 02:40:03 -04:00
|
|
|
_, found := g.matchers[input]
|
|
|
|
return found
|
2021-10-31 06:01:13 -04:00
|
|
|
}
|