...

Source file src/github.com/gobwas/glob/match/any_of.go

Documentation: github.com/gobwas/glob/match

     1  package match
     2  
     3  import "fmt"
     4  
     5  type AnyOf struct {
     6  	Matchers Matchers
     7  }
     8  
     9  func NewAnyOf(m ...Matcher) AnyOf {
    10  	return AnyOf{Matchers(m)}
    11  }
    12  
    13  func (self *AnyOf) Add(m Matcher) error {
    14  	self.Matchers = append(self.Matchers, m)
    15  	return nil
    16  }
    17  
    18  func (self AnyOf) Match(s string) bool {
    19  	for _, m := range self.Matchers {
    20  		if m.Match(s) {
    21  			return true
    22  		}
    23  	}
    24  
    25  	return false
    26  }
    27  
    28  func (self AnyOf) Index(s string) (int, []int) {
    29  	index := -1
    30  
    31  	segments := acquireSegments(len(s))
    32  	for _, m := range self.Matchers {
    33  		idx, seg := m.Index(s)
    34  		if idx == -1 {
    35  			continue
    36  		}
    37  
    38  		if index == -1 || idx < index {
    39  			index = idx
    40  			segments = append(segments[:0], seg...)
    41  			continue
    42  		}
    43  
    44  		if idx > index {
    45  			continue
    46  		}
    47  
    48  		// here idx == index
    49  		segments = appendMerge(segments, seg)
    50  	}
    51  
    52  	if index == -1 {
    53  		releaseSegments(segments)
    54  		return -1, nil
    55  	}
    56  
    57  	return index, segments
    58  }
    59  
    60  func (self AnyOf) Len() (l int) {
    61  	l = -1
    62  	for _, m := range self.Matchers {
    63  		ml := m.Len()
    64  		switch {
    65  		case l == -1:
    66  			l = ml
    67  			continue
    68  
    69  		case ml == -1:
    70  			return -1
    71  
    72  		case l != ml:
    73  			return -1
    74  		}
    75  	}
    76  
    77  	return
    78  }
    79  
    80  func (self AnyOf) String() string {
    81  	return fmt.Sprintf("<any_of:[%s]>", self.Matchers)
    82  }
    83  

View as plain text