/*
* Copyright 2004-2018 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.index;
import org.h2.engine.
Session;
import org.h2.message.
DbException;
import org.h2.result.
Row;
import org.h2.result.
SearchRow;
import org.h2.value.
Value;
import org.h2.value.
ValueLong;
/**
* The cursor implementation for the range index.
*/
class
RangeCursor implements
Cursor {
private final
Session session;
private boolean
beforeFirst;
private long
current;
private
Row currentRow;
private final long
start,
end,
step;
RangeCursor(
Session session, long
start, long
end) {
this(
session,
start,
end, 1);
}
RangeCursor(
Session session, long
start, long
end, long
step) {
this.
session =
session;
this.
start =
start;
this.
end =
end;
this.
step =
step;
beforeFirst = true;
}
@
Override
public
Row get() {
return
currentRow;
}
@
Override
public
SearchRow getSearchRow() {
return
currentRow;
}
@
Override
public boolean
next() {
if (
beforeFirst) {
beforeFirst = false;
current =
start;
} else {
current +=
step;
}
currentRow =
session.
createRow(new
Value[]{
ValueLong.
get(
current)}, 1);
return
step > 0 ?
current <=
end :
current >=
end;
}
@
Override
public boolean
previous() {
throw
DbException.
throwInternalError(
toString());
}
}