| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package strmatcher
- // LinearIndexMatcher is an implementation of IndexMatcher.
- // Empty initialization works.
- type LinearIndexMatcher struct {
- count uint32
- fullMatcher FullMatcherGroup
- domainMatcher DomainMatcherGroup
- substrMatcher SubstrMatcherGroup
- otherMatchers SimpleMatcherGroup
- }
- func NewLinearIndexMatcher() *LinearIndexMatcher {
- return new(LinearIndexMatcher)
- }
- // Add implements IndexMatcher.Add.
- func (g *LinearIndexMatcher) Add(matcher Matcher) uint32 {
- g.count++
- index := g.count
- switch matcher := matcher.(type) {
- case FullMatcher:
- g.fullMatcher.AddFullMatcher(matcher, index)
- case DomainMatcher:
- g.domainMatcher.AddDomainMatcher(matcher, index)
- case SubstrMatcher:
- g.substrMatcher.AddSubstrMatcher(matcher, index)
- default:
- g.otherMatchers.AddMatcher(matcher, index)
- }
- return index
- }
- // Build implements IndexMatcher.Build.
- func (*LinearIndexMatcher) Build() error {
- return nil
- }
- // Match implements IndexMatcher.Match.
- func (g *LinearIndexMatcher) Match(input string) []uint32 {
- result := []uint32{}
- result = append(result, g.fullMatcher.Match(input)...)
- result = append(result, g.domainMatcher.Match(input)...)
- result = append(result, g.substrMatcher.Match(input)...)
- result = append(result, g.otherMatchers.Match(input)...)
- return result
- }
- // MatchAny implements IndexMatcher.MatchAny.
- func (g *LinearIndexMatcher) MatchAny(input string) bool {
- return len(g.Match(input)) > 0
- }
- // Size implements IndexMatcher.Size.
- func (g *LinearIndexMatcher) Size() uint32 {
- return g.count
- }
|