strmatcher

package
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2021 License: MPL-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TrieEdge bool = true
	FailEdge bool = false
)
View Source
const PrimeRK = 16777619

PrimeRK is the prime base used in Rabin-Karp algorithm.

Variables

This section is empty.

Functions

func RollingHash

func RollingHash(s string) uint32

calculate the rolling murmurHash of given string

Types

type ACAutomaton

type ACAutomaton struct {
	// contains filtered or unexported fields
}

func NewACAutomaton

func NewACAutomaton() *ACAutomaton

func (*ACAutomaton) Add

func (ac *ACAutomaton) Add(domain string, t Type)

func (*ACAutomaton) Build

func (ac *ACAutomaton) Build()

func (*ACAutomaton) Match

func (ac *ACAutomaton) Match(s string) bool

type DomainMatcherGroup

type DomainMatcherGroup struct {
	// contains filtered or unexported fields
}

DomainMatcherGroup is a IndexMatcher for a large set of Domain matchers. Visible for testing only.

func (*DomainMatcherGroup) Add

func (g *DomainMatcherGroup) Add(domain string, value uint32)

func (*DomainMatcherGroup) Match

func (g *DomainMatcherGroup) Match(domain string) []uint32

type Edge

type Edge struct {
	// contains filtered or unexported fields
}

type FullMatcherGroup

type FullMatcherGroup struct {
	// contains filtered or unexported fields
}

func (*FullMatcherGroup) Add

func (g *FullMatcherGroup) Add(domain string, value uint32)

func (*FullMatcherGroup) Match

func (g *FullMatcherGroup) Match(str string) []uint32

type IndexMatcher

type IndexMatcher interface {
	// Match returns the index of a matcher that matches the input. It returns empty array if no such matcher exists.
	Match(input string) []uint32
}

IndexMatcher is the interface for matching with a group of matchers.

type MatchType

type MatchType struct {
	// contains filtered or unexported fields
}

type Matcher

type Matcher interface {
	// Match returns true if the given string matches a predefined pattern.
	Match(string) bool
	String() string
}

Matcher is the interface to determine a string matches a pattern.

type MatcherGroup

type MatcherGroup struct {
	// contains filtered or unexported fields
}

MatcherGroup is an implementation of IndexMatcher. Empty initialization works.

func (*MatcherGroup) Add

func (g *MatcherGroup) Add(m Matcher) uint32

Add adds a new Matcher into the MatcherGroup, and returns its index. The index will never be 0.

func (*MatcherGroup) Match

func (g *MatcherGroup) Match(pattern string) []uint32

Match implements IndexMatcher.Match.

func (*MatcherGroup) Size

func (g *MatcherGroup) Size() uint32

Size returns the number of matchers in the MatcherGroup.

type MphMatcherGroup

type MphMatcherGroup struct {
	// contains filtered or unexported fields
}

A MphMatcherGroup is divided into three parts: 1. `full` and `domain` patterns are matched by Rabin-Karp algorithm and minimal perfect hash table; 2. `substr` patterns are matched by ac automaton; 3. `regex` patterns are matched with the regex library.

func NewMphMatcherGroup

func NewMphMatcherGroup() *MphMatcherGroup

func (*MphMatcherGroup) AddFullOrDomainPattern

func (g *MphMatcherGroup) AddFullOrDomainPattern(pattern string, t Type)

func (*MphMatcherGroup) AddPattern

func (g *MphMatcherGroup) AddPattern(pattern string, t Type) (uint32, error)

AddPattern adds a pattern to MphMatcherGroup

func (*MphMatcherGroup) Build

func (g *MphMatcherGroup) Build()

Build builds a minimal perfect hash table and ac automaton from insert rules

func (*MphMatcherGroup) Lookup

func (g *MphMatcherGroup) Lookup(h uint32, s string) bool

Lookup searches for s in t and returns its index and whether it was found.

func (*MphMatcherGroup) Match

func (g *MphMatcherGroup) Match(pattern string) []uint32

Match implements IndexMatcher.Match.

type Type

type Type byte

Type is the type of the matcher.

const (
	// Full is the type of matcher that the input string must exactly equal to the pattern.
	Full Type = iota
	// Substr is the type of matcher that the input string must contain the pattern as a sub-string.
	Substr
	// Domain is the type of matcher that the input string must be a sub-domain or itself of the pattern.
	Domain
	// Regex is the type of matcher that the input string must matches the regular-expression pattern.
	Regex
)

func (Type) New

func (t Type) New(pattern string) (Matcher, error)

New creates a new Matcher based on the given pattern.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL