func (fs *frameSet) index(buf *siegreader.Buffer, rev bool, quit chan struct{}) chan fsmatch { ret := make(chan fsmatch) go func() { var i int for { select { case <-quit: close(ret) return default: } if i >= len(fs.set) { close(ret) return } f := fs.set[i] var match bool var matches []int if rev { slc, err := buf.EofSlice(0, frames.TotalLength(f)) if err != nil { close(ret) return } match, matches = f.MatchR(slc) } else { slc, err := buf.Slice(0, frames.TotalLength(f)) if err != nil { close(ret) return } match, matches = f.Match(slc) } if match { var min int if !rev { min, _ = f.Length() } for _, off := range matches { ret <- fsmatch{i, int64(off - min), min} } } i++ } close(ret) }() return ret }
func (t *testNode) length() int { return frames.TotalLength(t.Frame) }