|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.mdr.persistence.btreeimpl.btreeindex; import org.netbeans.mdr.persistence.*; import java.util.*; import java.io.*; /** * Iterator over a BtreeCollection, which is the set of values contained in * a SinglevaluedBtree. * * @author Dana Bergen * @version 1.0 */ public class BtreeIterator extends Object implements Iterator { protected Btree btree; protected SearchResult current; protected BtreePageSource pageSource; protected int modCount; BtreeIterator(Btree btree) { try { this.btree = btree; pageSource = btree.pageSource; btree.beginRead(); modCount = btree.modCount; current = btree.getFirst(); if (current.entryNum >= 0) { current.entryNum--; } } catch (StorageException e) { throw new RuntimeStorageException(e); } finally { btree.endRead(); } } /** * Tests whether there are any more elements to return * * @return true if a call to next() would succeed */ public boolean hasNext() { try { btree.beginRead(); checkModCount(); if (!BtreePage.hasNext(null, current)) { pageSource.unpinPage(current.page); current.page = null; return false; } else { return true; } } catch (StorageException e) { throw new RuntimeStorageException(e); } finally { btree.endRead(); } } /** * Gets the next value in the btree. If this is on a different page * from the previous value, the old page will be unpinned. * If there are no more records, the last page will be unpinned. * * @return The next value in the btree * * @exception NoSuchElementException If there was any error or if * there are no more records */ public Object next() throws NoSuchElementException { BtreePage oldPage; if (current.page == null) { throw new NoSuchElementException(); } try { btree.beginRead(); checkModCount(); oldPage = current.page; BtreePage.getNext(null, current); if (current.page != oldPage) { pageSource.unpinPage(oldPage); } if (current.matched) { return getCurrentItem(); } else { throw new NoSuchElementException(); } } catch (StorageException e) { throw new RuntimeStorageException(e); } finally { btree.endRead(); } } /** * Returns the data value at the current position */ Object getCurrentItem() throws StorageException { return btree.dataInfo.fromBuffer( current.page.getData(current.entryNum)); } void checkModCount() { if (btree.modCount > modCount) { throw new ConcurrentModificationException("Index " + btree.getName() + " has been modified since iterator was created."); } } /* * Unpin the last page. */ protected void finalize() { if (current.page != null) { pageSource.unpinPage(current.page); current.page = null; } } /** * This is not supported. * * @exception UnsupportedOperationException Always thrown. */ public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.