/* This file is part of the db4o object database http://www.db4o.com Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com db4o is free software; you can redistribute it and/or modify it under the terms of version 3 of the GNU General Public License as published by the Free Software Foundation. db4o is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ package com.db4o.internal.btree; import com.db4o.foundation.*; public abstract class AbstractBTreeRangeIterator implements Iterator4 { private final BTreeRangeSingle _range; private BTreePointer _cursor; private BTreePointer _current; public AbstractBTreeRangeIterator(BTreeRangeSingle range) { _range = range; BTreePointer first = range.first(); if(first != null){ // we clone here, because we are calling unsafeNext() on BTreePointer // _cursor is our private copy, we modify it and never pass it out. _cursor = first.shallowClone(); } } public boolean moveNext() { if (reachedEnd()) { _current = null; return false; } if(_current == null){ _current = _cursor.shallowClone(); } else { _cursor.copyTo(_current); } _cursor = _cursor.unsafeFastNext(); return true; } public void reset() { _cursor = _range.first(); } protected BTreePointer currentPointer() { if (null == _current) { throw new IllegalStateException(); } return _current; } private final boolean reachedEnd() { if(_cursor == null){ return true; } if(_range.end() == null){ return false; } return _range.end().equals(_cursor); } }