| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package strmatcher
- // Type is the type of the matcher.
- type Type byte
- const (
- // Full is the type of matcher that the input string must exactly equal to the pattern.
- Full Type = 0
- // Domain is the type of matcher that the input string must be a sub-domain or itself of the pattern.
- Domain Type = 1
- // Substr is the type of matcher that the input string must contain the pattern as a sub-string.
- Substr Type = 2
- // Regex is the type of matcher that the input string must matches the regular-expression pattern.
- Regex Type = 3
- )
- // Matcher is the interface to determine a string matches a pattern.
- // - This is a basic matcher to represent a certain kind of match semantic(full, substr, domain or regex).
- type Matcher interface {
- // Type returns the matcher's type.
- Type() Type
- // Pattern returns the matcher's raw string representation.
- Pattern() string
- // String returns a string representation of the matcher containing its type and pattern.
- String() string
- // Match returns true if the given string matches a predefined pattern.
- // * This method is seldom used for performance reason
- // and is generally taken over by their corresponding MatcherGroup.
- Match(input string) bool
- }
- // MatcherGroup is an advanced type of matcher to accept a bunch of basic Matchers (of certain type, not all matcher types).
- // For example:
- // - FullMatcherGroup accepts FullMatcher and uses a hash table to facilitate lookup.
- // - DomainMatcherGroup accepts DomainMatcher and uses a trie to optimize both memory consumption and lookup speed.
- type MatcherGroup interface {
- // Match returns all matched matchers with their corresponding values.
- Match(input string) []uint32
- // MatchAny returns true as soon as one matching matcher is found.
- MatchAny(input string) bool
- }
- // IndexMatcher is a general type of matcher thats accepts all kinds of basic matchers.
- // It should:
- // - Accept all Matcher types with no exception.
- // - Optimize string matching with a combination of MatcherGroups.
- // - Obey certain priority order specification when returning matched Matchers.
- type IndexMatcher interface {
- // Size returns number of matchers added to IndexMatcher.
- Size() uint32
- // Add adds a new Matcher to IndexMatcher, and returns its index. The index will never be 0.
- Add(matcher Matcher) uint32
- // Build builds the IndexMatcher to be ready for matching.
- Build() error
- // Match returns the indices of all matchers that matches the input.
- // * Empty array is returned if no such matcher exists.
- // * The order of returned matchers should follow priority specification.
- // Priority specification:
- // 1. Priority between matcher types: full > domain > substr > regex.
- // 2. Priority of same-priority matchers matching at same position: the early added takes precedence.
- // 3. Priority of domain matchers matching at different levels: the further matched domain takes precedence.
- // 4. Priority of substr matchers matching at different positions: the further matched substr takes precedence.
- Match(input string) []uint32
- // MatchAny returns true as soon as one matching matcher is found.
- MatchAny(input string) bool
- }
|