@@ -109,6 +109,18 @@ public enum KeyRangeType {
109109 * be 6 and 8. With a passed key of 3, the returned keys would be 4, 6 and 8.
110110 */
111111 FORWARD_GREATER_THAN (true , true , false ),
112+ /**
113+ * Start on the first key and iterate forward until a key the passed key has
114+ * been reached (but do not return that key).
115+ *
116+ * <p>
117+ * The "stop" value is required. The "start" value is ignored.
118+ *
119+ * <p>
120+ * In our example and with a passed search key of 5, the returned keys would
121+ * be 2 and 4. With a passed key of 8, the returned keys would be 2, 4 and 6.
122+ */
123+ FORWARD_LESS_THAN (true , false , true ),
112124 /**
113125 * Start on the last key and iterate backward until no keys remain.
114126 *
@@ -168,7 +180,19 @@ public enum KeyRangeType {
168180 * In our example and with a passed search key of 6, the returned keys would
169181 * be 4 and 2. With a passed key of 7, the returned keys would be 6, 4 and 2.
170182 */
171- BACKWARD_GREATER_THAN (false , true , false );
183+ BACKWARD_GREATER_THAN (false , true , false ),
184+ /**
185+ * Start on the last key and iterate backward until the last key greater than
186+ * the passed "stop" key is reached. Do not return the "stop" key.
187+ *
188+ * <p>
189+ * The "stop" value is required. The "start" value is ignored.
190+ *
191+ * <p>
192+ * In our example and with a passed search key of 5, the returned keys would
193+ * be 8 and 6. With a passed key of 2, the returned keys would be 8, 6 and 4
194+ */
195+ BACKWARD_LESS_THAN (false , false , true );
172196
173197 private final boolean directionForward ;
174198 private final boolean startKeyRequired ;
@@ -230,6 +254,8 @@ CursorOp initialOp() {
230254 return GET_START_KEY ;
231255 case FORWARD_GREATER_THAN :
232256 return GET_START_KEY ;
257+ case FORWARD_LESS_THAN :
258+ return FIRST ;
233259 case BACKWARD_ALL :
234260 return LAST ;
235261 case BACKWARD_AT_LEAST :
@@ -240,6 +266,8 @@ CursorOp initialOp() {
240266 return GET_START_KEY ;
241267 case BACKWARD_GREATER_THAN :
242268 return GET_START_KEY ;
269+ case BACKWARD_LESS_THAN :
270+ return LAST ;
243271 default :
244272 throw new IllegalStateException ("Invalid type" );
245273 }
@@ -274,6 +302,8 @@ <T, C extends Comparator<T>> IteratorOp iteratorOp(final T start, final T stop,
274302 return c .compare (buffer , stop ) > 0 ? TERMINATE : RELEASE ;
275303 case FORWARD_GREATER_THAN :
276304 return c .compare (buffer , start ) == 0 ? CALL_NEXT_OP : RELEASE ;
305+ case FORWARD_LESS_THAN :
306+ return c .compare (buffer , stop ) >= 0 ? TERMINATE : RELEASE ;
277307 case BACKWARD_ALL :
278308 return RELEASE ;
279309 case BACKWARD_AT_LEAST :
@@ -287,6 +317,8 @@ <T, C extends Comparator<T>> IteratorOp iteratorOp(final T start, final T stop,
287317 return c .compare (buffer , stop ) >= 0 ? RELEASE : TERMINATE ;
288318 case BACKWARD_GREATER_THAN :
289319 return c .compare (buffer , start ) >= 0 ? CALL_NEXT_OP : RELEASE ;
320+ case BACKWARD_LESS_THAN :
321+ return c .compare (buffer , stop ) > 0 ? RELEASE : TERMINATE ;
290322 default :
291323 throw new IllegalStateException ("Invalid type" );
292324 }
0 commit comments