/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package com.github.geophile.erdo.map.diskmap; import com.github.geophile.erdo.AbstractRecord; import com.github.geophile.erdo.map.LazyRecord; import com.github.geophile.erdo.map.MapCursor; import com.github.geophile.erdo.map.diskmap.DiskPage; import java.io.IOException; class DiskPageCursor extends MapCursor { @Override public AbstractRecord next() throws IOException, InterruptedException { return neighbor(true); } @Override public LazyRecord previous() throws IOException, InterruptedException { return neighbor(false); } @Override public void close() { page = null; pageAccessBuffers = null; } DiskPageCursor(DiskPage page) { super(null, false); this.page = page; this.pageAccessBuffers = page.accessBuffers(); this.recordNumber = 0; } private AbstractRecord neighbor(boolean forward) { AbstractRecord neighbor = null; if (page != null && recordNumber >= 0 && recordNumber < page.nRecords()) { neighbor = page.readRecord(recordNumber, pageAccessBuffers); if (forward) { recordNumber++; } else { recordNumber--; } } return neighbor; } private DiskPage page; private DiskPage.AccessBuffers pageAccessBuffers; private int recordNumber; }