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

Packit Service 4d2de5
package match
Packit Service 4d2de5
Packit Service 4d2de5
// todo common table of rune's length
Packit Service 4d2de5
Packit Service 4d2de5
import (
Packit Service 4d2de5
	"fmt"
Packit Service 4d2de5
	"strings"
Packit Service 4d2de5
)
Packit Service 4d2de5
Packit Service 4d2de5
const lenOne = 1
Packit Service 4d2de5
const lenZero = 0
Packit Service 4d2de5
const lenNo = -1
Packit Service 4d2de5
Packit Service 4d2de5
type Matcher interface {
Packit Service 4d2de5
	Match(string) bool
Packit Service 4d2de5
	Index(string) (int, []int)
Packit Service 4d2de5
	Len() int
Packit Service 4d2de5
	String() string
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type Matchers []Matcher
Packit Service 4d2de5
Packit Service 4d2de5
func (m Matchers) String() string {
Packit Service 4d2de5
	var s []string
Packit Service 4d2de5
	for _, matcher := range m {
Packit Service 4d2de5
		s = append(s, fmt.Sprint(matcher))
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	return fmt.Sprintf("%s", strings.Join(s, ","))
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// appendMerge merges and sorts given already SORTED and UNIQUE segments.
Packit Service 4d2de5
func appendMerge(target, sub []int) []int {
Packit Service 4d2de5
	lt, ls := len(target), len(sub)
Packit Service 4d2de5
	out := make([]int, 0, lt+ls)
Packit Service 4d2de5
Packit Service 4d2de5
	for x, y := 0, 0; x < lt || y < ls; {
Packit Service 4d2de5
		if x >= lt {
Packit Service 4d2de5
			out = append(out, sub[y:]...)
Packit Service 4d2de5
			break
Packit Service 4d2de5
		}
Packit Service 4d2de5
Packit Service 4d2de5
		if y >= ls {
Packit Service 4d2de5
			out = append(out, target[x:]...)
Packit Service 4d2de5
			break
Packit Service 4d2de5
		}
Packit Service 4d2de5
Packit Service 4d2de5
		xValue := target[x]
Packit Service 4d2de5
		yValue := sub[y]
Packit Service 4d2de5
Packit Service 4d2de5
		switch {
Packit Service 4d2de5
Packit Service 4d2de5
		case xValue == yValue:
Packit Service 4d2de5
			out = append(out, xValue)
Packit Service 4d2de5
			x++
Packit Service 4d2de5
			y++
Packit Service 4d2de5
Packit Service 4d2de5
		case xValue < yValue:
Packit Service 4d2de5
			out = append(out, xValue)
Packit Service 4d2de5
			x++
Packit Service 4d2de5
Packit Service 4d2de5
		case yValue < xValue:
Packit Service 4d2de5
			out = append(out, yValue)
Packit Service 4d2de5
			y++
Packit Service 4d2de5
Packit Service 4d2de5
		}
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	target = append(target[:0], out...)
Packit Service 4d2de5
Packit Service 4d2de5
	return target
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func reverseSegments(input []int) {
Packit Service 4d2de5
	l := len(input)
Packit Service 4d2de5
	m := l / 2
Packit Service 4d2de5
Packit Service 4d2de5
	for i := 0; i < m; i++ {
Packit Service 4d2de5
		input[i], input[l-i-1] = input[l-i-1], input[i]
Packit Service 4d2de5
	}
Packit Service 4d2de5
}