@@ -29,80 +29,15 @@ public abstract class DocIdSetIterator {
29
29
30
30
/** An empty {@code DocIdSetIterator} instance */
31
31
public static DocIdSetIterator empty () {
32
- return new DocIdSetIterator () {
33
- boolean exhausted = false ;
34
-
35
- @ Override
36
- public int advance (int target ) {
37
- assert !exhausted ;
38
- assert target >= 0 ;
39
- exhausted = true ;
40
- return NO_MORE_DOCS ;
41
- }
42
-
43
- @ Override
44
- public int docID () {
45
- return exhausted ? NO_MORE_DOCS : -1 ;
46
- }
47
-
48
- @ Override
49
- public int nextDoc () {
50
- assert !exhausted ;
51
- exhausted = true ;
52
- return NO_MORE_DOCS ;
53
- }
54
-
55
- @ Override
56
- public long cost () {
57
- return 0 ;
58
- }
59
- };
32
+ return new RangeDocIdSetIterator (0 , 0 );
60
33
}
61
34
62
35
/** A {@link DocIdSetIterator} that matches all documents up to {@code maxDoc - 1}. */
63
36
public static DocIdSetIterator all (int maxDoc ) {
64
- return new DocIdSetIterator () {
65
- int doc = -1 ;
66
-
67
- @ Override
68
- public int docID () {
69
- return doc ;
70
- }
71
-
72
- @ Override
73
- public int nextDoc () {
74
- return advance (doc + 1 );
75
- }
76
-
77
- @ Override
78
- public int advance (int target ) {
79
- doc = target ;
80
- if (doc >= maxDoc ) {
81
- doc = NO_MORE_DOCS ;
82
- }
83
- return doc ;
84
- }
85
-
86
- @ Override
87
- public long cost () {
88
- return maxDoc ;
89
- }
90
-
91
- @ Override
92
- public void intoBitSet (int upTo , FixedBitSet bitSet , int offset ) {
93
- assert offset <= doc ;
94
- upTo = Math .min (upTo , maxDoc );
95
- if (upTo > doc ) {
96
- bitSet .set (doc - offset , upTo - offset );
97
- advance (upTo );
98
- }
99
- }
100
-
101
- @ Override
102
- public int docIDRunEnd () throws IOException {
103
- return maxDoc ;
104
- }
105
- };
37
+ if (maxDoc < 0 ) {
38
+ throw new IllegalArgumentException ("maxDoc must be >= 0, but got maxDoc=" + maxDoc );
39
+ }
40
+ return new RangeDocIdSetIterator (0 , maxDoc );
106
41
}
107
42
108
43
/**
@@ -117,51 +52,62 @@ public static DocIdSetIterator range(int minDoc, int maxDoc) {
117
52
if (minDoc < 0 ) {
118
53
throw new IllegalArgumentException ("minDoc must be >= 0 but got minDoc=" + minDoc );
119
54
}
120
- return new DocIdSetIterator () {
121
- private int doc = - 1 ;
55
+ return new RangeDocIdSetIterator ( minDoc , maxDoc );
56
+ }
122
57
123
- @ Override
124
- public int docID () {
125
- return doc ;
126
- }
58
+ private static class RangeDocIdSetIterator extends DocIdSetIterator {
127
59
128
- @ Override
129
- public int nextDoc () {
130
- return advance (doc + 1 );
131
- }
60
+ private final int minDoc , maxDoc ;
61
+ private int doc = -1 ;
132
62
133
- @ Override
134
- public int advance (int target ) {
135
- if (target < minDoc ) {
136
- doc = minDoc ;
137
- } else if (target >= maxDoc ) {
138
- doc = NO_MORE_DOCS ;
139
- } else {
140
- doc = target ;
141
- }
142
- return doc ;
143
- }
63
+ RangeDocIdSetIterator (int minDoc , int maxDoc ) {
64
+ // advance relies on minDoc <= maxDoc for correctness
65
+ assert minDoc <= maxDoc ;
66
+ this .minDoc = minDoc ;
67
+ this .maxDoc = maxDoc ;
68
+ }
144
69
145
- @ Override
146
- public long cost () {
147
- return maxDoc - minDoc ;
148
- }
70
+ @ Override
71
+ public int docID () {
72
+ return doc ;
73
+ }
149
74
150
- @ Override
151
- public void intoBitSet (int upTo , FixedBitSet bitSet , int offset ) {
152
- assert offset <= doc ;
153
- upTo = Math .min (upTo , maxDoc );
154
- if (upTo > doc ) {
155
- bitSet .set (doc - offset , upTo - offset );
156
- advance (upTo );
157
- }
75
+ @ Override
76
+ public int nextDoc () {
77
+ return advance (doc + 1 );
78
+ }
79
+
80
+ @ Override
81
+ public int advance (int target ) {
82
+ if (target >= maxDoc ) {
83
+ doc = NO_MORE_DOCS ;
84
+ } else if (target < minDoc ) {
85
+ doc = minDoc ;
86
+ } else {
87
+ doc = target ;
158
88
}
89
+ return doc ;
90
+ }
159
91
160
- @ Override
161
- public int docIDRunEnd () throws IOException {
162
- return maxDoc ;
92
+ @ Override
93
+ public long cost () {
94
+ return maxDoc - minDoc ;
95
+ }
96
+
97
+ @ Override
98
+ public void intoBitSet (int upTo , FixedBitSet bitSet , int offset ) {
99
+ assert offset <= doc ;
100
+ upTo = Math .min (upTo , maxDoc );
101
+ if (upTo > doc ) {
102
+ bitSet .set (doc - offset , upTo - offset );
103
+ advance (upTo );
163
104
}
164
- };
105
+ }
106
+
107
+ @ Override
108
+ public int docIDRunEnd () throws IOException {
109
+ return maxDoc ;
110
+ }
165
111
}
166
112
167
113
/**
0 commit comments