-
Notifications
You must be signed in to change notification settings - Fork 1
/
memorydocitr.go
63 lines (59 loc) · 1.18 KB
/
memorydocitr.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package scoredb
import (
"math"
)
type MemoryDocItr struct {
score float32
docId int64
min, max float32
scores []float32
docs []int64
index int
}
func NewMemoryDocItr(scores []float32, docs []int64) *MemoryDocItr {
return &MemoryDocItr{
score: 0.0,
docId: -1,
min: float32(math.Inf(-1)),
max: float32(math.Inf(1)),
scores: scores,
docs: docs,
index: -1,
}
}
func (op *MemoryDocItr) Cur() (int64, float32) {
return op.docId, op.score
}
func (op *MemoryDocItr) GetBounds() (min, max float32) { return op.min, op.max }
func (op *MemoryDocItr) SetBounds(min, max float32) bool {
if min > op.max || max < op.min {
return false
}
if min > op.min {
op.min = min
}
if max < op.max {
op.max = max
}
return true
}
func (op *MemoryDocItr) Name() string { return "MemoryDocItr" }
func (op *MemoryDocItr) Close() {}
func (op *MemoryDocItr) Next(minId int64) bool {
for {
op.index += 1
index := op.index
if index >= len(op.docs) {
return false
}
docId := op.docs[index]
if docId >= minId {
score := op.scores[index]
if score >= op.min && score <= op.max {
op.score = score
op.docId = op.docs[index]
return true
}
}
}
}