Blame vendor/github.com/gobwas/glob/match/row.go

Packit 63bb0d
package match
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"fmt"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
type Row struct {
Packit 63bb0d
	Matchers    Matchers
Packit 63bb0d
	RunesLength int
Packit 63bb0d
	Segments    []int
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func NewRow(len int, m ...Matcher) Row {
Packit 63bb0d
	return Row{
Packit 63bb0d
		Matchers:    Matchers(m),
Packit 63bb0d
		RunesLength: len,
Packit 63bb0d
		Segments:    []int{len},
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (self Row) matchAll(s string) bool {
Packit 63bb0d
	var idx int
Packit 63bb0d
	for _, m := range self.Matchers {
Packit 63bb0d
		length := m.Len()
Packit 63bb0d
Packit 63bb0d
		var next, i int
Packit 63bb0d
		for next = range s[idx:] {
Packit 63bb0d
			i++
Packit 63bb0d
			if i == length {
Packit 63bb0d
				break
Packit 63bb0d
			}
Packit 63bb0d
		}
Packit 63bb0d
Packit 63bb0d
		if i < length || !m.Match(s[idx:idx+next+1]) {
Packit 63bb0d
			return false
Packit 63bb0d
		}
Packit 63bb0d
Packit 63bb0d
		idx += next + 1
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return true
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (self Row) lenOk(s string) bool {
Packit 63bb0d
	var i int
Packit 63bb0d
	for range s {
Packit 63bb0d
		i++
Packit 63bb0d
		if i > self.RunesLength {
Packit 63bb0d
			return false
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
	return self.RunesLength == i
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (self Row) Match(s string) bool {
Packit 63bb0d
	return self.lenOk(s) && self.matchAll(s)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (self Row) Len() (l int) {
Packit 63bb0d
	return self.RunesLength
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (self Row) Index(s string) (int, []int) {
Packit 63bb0d
	for i := range s {
Packit 63bb0d
		if len(s[i:]) < self.RunesLength {
Packit 63bb0d
			break
Packit 63bb0d
		}
Packit 63bb0d
		if self.matchAll(s[i:]) {
Packit 63bb0d
			return i, self.Segments
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
	return -1, nil
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (self Row) String() string {
Packit 63bb0d
	return fmt.Sprintf("<row_%d:[%s]>", self.RunesLength, self.Matchers)
Packit 63bb0d
}