|
|
@ -17,6 +17,7 @@ |
|
|
|
package bloombits |
|
|
|
package bloombits |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
|
|
|
|
"bytes" |
|
|
|
"errors" |
|
|
|
"errors" |
|
|
|
"math" |
|
|
|
"math" |
|
|
|
"sort" |
|
|
|
"sort" |
|
|
@ -171,15 +172,6 @@ func (m *Matcher) Start(begin, end uint64, results chan uint64) (*MatcherSession |
|
|
|
} |
|
|
|
} |
|
|
|
// Iterate over all the blocks in the section and return the matching ones
|
|
|
|
// Iterate over all the blocks in the section and return the matching ones
|
|
|
|
for i := first; i <= last; i++ { |
|
|
|
for i := first; i <= last; i++ { |
|
|
|
// If the bitset is nil, we're a special match-all cornercase
|
|
|
|
|
|
|
|
if res.bitset == nil { |
|
|
|
|
|
|
|
select { |
|
|
|
|
|
|
|
case <-session.quit: |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
case results <- i: |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Skip the entire byte if no matches are found inside
|
|
|
|
// Skip the entire byte if no matches are found inside
|
|
|
|
next := res.bitset[(i-sectionStart)/8] |
|
|
|
next := res.bitset[(i-sectionStart)/8] |
|
|
|
if next == 0 { |
|
|
|
if next == 0 { |
|
|
@ -221,7 +213,7 @@ func (m *Matcher) run(begin, end uint64, buffer int, session *MatcherSession) ch |
|
|
|
select { |
|
|
|
select { |
|
|
|
case <-session.quit: |
|
|
|
case <-session.quit: |
|
|
|
return |
|
|
|
return |
|
|
|
case source <- &partialMatches{i, nil}: |
|
|
|
case source <- &partialMatches{i, bytes.Repeat([]byte{0xff}, int(m.sectionSize/8))}: |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}() |
|
|
|
}() |
|
|
|