org.axiondb.util
Class IntBTree

java.lang.Object
  extended by org.axiondb.util.IntBTree

public class IntBTree
extends Object

A B-Tree for integers, based on the implementation described in "Introduction to Algorithms" by Cormen, Leiserson and Rivest (CLR).

Version:
$Revision: 1.9 $ $Date: 2004/09/09 23:47:45 $

Constructor Summary
protected IntBTree(org.axiondb.util.BTreeMetaData meta)
          Create a new, non-root node.
protected IntBTree(org.axiondb.util.BTreeMetaData meta, int fileId)
          Create a non-root node by reading it from disk.
  IntBTree(File idxDir, String idxName, int minimizationFactor)
          Create or load a new root node.
 
Method Summary
protected  void addFileId(int fileId)
          Add a reference to the given file id.
protected  void addFileId(int index, int fileid)
          Store a reference to the given file id at the specifed index.
protected  void addFileIds(org.apache.commons.collections.primitives.IntList fileIds)
          Add the given specified file ids.
protected  void addKeyValuePair(int key, int value, boolean setDirty)
           
 void clearData()
          Clear my keys, values, and file ids.
protected  IntBTree createNode(org.axiondb.util.BTreeMetaData meta)
          Create a new node.
 void delete(int key)
          Delete an arbitrary instance of the specified key, which when you think about it, isn't terribly useful.
 Integer get(int key)
          Find some occurance of the given key.
 org.apache.commons.collections.primitives.IntListIterator getAll(int key)
          Obtain an iterator over all values associated with the given key.
 org.apache.commons.collections.primitives.IntListIterator getAllExcludingNull()
          Obtain an iterator over all values excluding null key values
 org.apache.commons.collections.primitives.IntListIterator getAllFrom(int key)
          Obtain an iterator over all values greater than or equal to the given key.
 org.apache.commons.collections.primitives.IntListIterator getAllTo(int key)
          Obtain an iterator over all values strictly less than the given key.
protected  org.axiondb.util.BTreeMetaData getBTreeMetaData()
           
protected  org.apache.commons.collections.primitives.IntList getChildIds()
           
protected  int getFileId()
           
protected  int getFileIdForIndex(int index)
          Get the file id for the specified index.
protected  int getKey(int index)
          Obtain the key stored at the specified index.
protected  int getKeyCapacity()
          Return the maximum number of keys I can contain (2* minimizationFactor-1).
protected  int getMinimizationFactor()
           
protected  int getValue(int index)
           
protected  org.apache.commons.collections.primitives.IntList getValues()
           
 IntListIteratorChain inorderIterator()
           
 void insert(int key, int value)
          Insert the given key/value pair.
protected  boolean isFull()
           
protected  boolean isLeaf()
          Returns true iff I don't contain any child nodes.
protected  boolean isRoot()
          Returns true iff I am the root node.
protected  IntBTree loadNode(org.axiondb.util.BTreeMetaData meta, int fileId)
          Read the node with the specified fileId from disk.
protected  void read()
          Reads in the node.
 void replaceId(int key, int oldRowId, int newRowId)
          Replace any occurance of oldRowId associated with the given key with newRowId.
 void save()
          Deprecated. See save(File)
 void save(File dataDirectory)
          Saves the tree.
 void saveAfterTruncate()
           
protected  void saveCounterIfRoot()
           
protected  void setChildIds(org.apache.commons.collections.primitives.IntList childIds)
           
protected  void setFileId(int fileId)
           
protected  void setValue(int index, int val)
           
protected  void setValues(org.apache.commons.collections.primitives.IntList vals)
           
 int size()
          Returns the number of keys I currently contain.
protected  String space(int n)
          Return a String comprised of 2*n spaces.
 String toString()
          Obtain a String representation of this node, suitable for debugging.
 void truncate()
           
 org.apache.commons.collections.primitives.IntListIterator valueIterator()
           
 org.apache.commons.collections.primitives.IntListIterator valueIteratorGreaterThan(int fromkey)
           
 org.apache.commons.collections.primitives.IntListIterator valueIteratorGreaterThanOrEqualTo(int fromkey)
           
protected  void write()
          Writes the node file out.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

IntBTree

public IntBTree(File idxDir,
                String idxName,
                int minimizationFactor)
         throws IOException,
                ClassNotFoundException
Create or load a new root node.

Throws:
IOException
ClassNotFoundException

IntBTree

protected IntBTree(org.axiondb.util.BTreeMetaData meta)
            throws IOException,
                   ClassNotFoundException
Create a new, non-root node.

Throws:
IOException
ClassNotFoundException

IntBTree

protected IntBTree(org.axiondb.util.BTreeMetaData meta,
                   int fileId)
            throws IOException,
                   ClassNotFoundException
Create a non-root node by reading it from disk.

Throws:
IOException
ClassNotFoundException
Method Detail

valueIterator

public org.apache.commons.collections.primitives.IntListIterator valueIterator()
                                                                        throws IOException
Throws:
IOException

valueIteratorGreaterThanOrEqualTo

public org.apache.commons.collections.primitives.IntListIterator valueIteratorGreaterThanOrEqualTo(int fromkey)
                                                                                            throws IOException,
                                                                                                   ClassNotFoundException
Throws:
IOException
ClassNotFoundException

valueIteratorGreaterThan

public org.apache.commons.collections.primitives.IntListIterator valueIteratorGreaterThan(int fromkey)
                                                                                   throws IOException,
                                                                                          ClassNotFoundException
Throws:
IOException
ClassNotFoundException

size

public final int size()
Returns the number of keys I currently contain. Note that by construction, this will be at least minimizationFactor-1 and at most 2*minimizationFactor-1 for all nodes except the root (which may have fewer than minimizationFactor -1 keys).


toString

public final String toString()
Obtain a String representation of this node, suitable for debugging.

Overrides:
toString in class Object

get

public final Integer get(int key)
                  throws IOException,
                         ClassNotFoundException
Find some occurance of the given key.

Throws:
IOException
ClassNotFoundException

getAll

public final org.apache.commons.collections.primitives.IntListIterator getAll(int key)
                                                                       throws IOException,
                                                                              ClassNotFoundException
Obtain an iterator over all values associated with the given key.

Throws:
IOException
ClassNotFoundException

getAllExcludingNull

public final org.apache.commons.collections.primitives.IntListIterator getAllExcludingNull()
                                                                                    throws IOException,
                                                                                           ClassNotFoundException
Obtain an iterator over all values excluding null key values

Throws:
IOException
ClassNotFoundException

getAllFrom

public final org.apache.commons.collections.primitives.IntListIterator getAllFrom(int key)
                                                                           throws IOException,
                                                                                  ClassNotFoundException
Obtain an iterator over all values greater than or equal to the given key.

Throws:
IOException
ClassNotFoundException

getAllTo

public final org.apache.commons.collections.primitives.IntListIterator getAllTo(int key)
                                                                         throws IOException,
                                                                                ClassNotFoundException
Obtain an iterator over all values strictly less than the given key.

Throws:
IOException
ClassNotFoundException

insert

public final void insert(int key,
                         int value)
                  throws IOException,
                         ClassNotFoundException
Insert the given key/value pair.

Throws:
IOException
ClassNotFoundException

replaceId

public final void replaceId(int key,
                            int oldRowId,
                            int newRowId)
                     throws ClassNotFoundException,
                            IOException
Replace any occurance of oldRowId associated with the given key with newRowId. It is assumed oldId occurs at most once in the tree.

Throws:
ClassNotFoundException
IOException

delete

public final void delete(int key)
                  throws IOException,
                         ClassNotFoundException
Delete an arbitrary instance of the specified key, which when you think about it, isn't terribly useful.

Throws:
IOException
ClassNotFoundException

save

public final void save()
                throws IOException,
                       ClassNotFoundException
Deprecated. See save(File)

Save this tree and all of its children.

Throws:
IOException
ClassNotFoundException

truncate

public void truncate()

loadNode

protected IntBTree loadNode(org.axiondb.util.BTreeMetaData meta,
                            int fileId)
                     throws IOException,
                            ClassNotFoundException
Read the node with the specified fileId from disk.

Throws:
IOException
ClassNotFoundException

createNode

protected IntBTree createNode(org.axiondb.util.BTreeMetaData meta)
                       throws IOException,
                              ClassNotFoundException
Create a new node.

Throws:
IOException
ClassNotFoundException

write

protected void write()
              throws IOException
Writes the node file out. This is differentiated from save in that it doesn't save the entire tree or the counter file.

Throws:
IOException

read

protected void read()
             throws IOException,
                    ClassNotFoundException
Reads in the node. This doesn't read in the entire subtree, which happens incrementally as files are needed.

Throws:
IOException
ClassNotFoundException

getKey

protected final int getKey(int index)
Obtain the key stored at the specified index.


clearData

public final void clearData()
Clear my keys, values, and file ids. Flags me as dirty.


addKeyValuePair

protected final void addKeyValuePair(int key,
                                     int value,
                                     boolean setDirty)

inorderIterator

public IntListIteratorChain inorderIterator()
                                     throws IOException,
                                            ClassNotFoundException
Throws:
IOException
ClassNotFoundException

save

public void save(File dataDirectory)
          throws IOException,
                 ClassNotFoundException
Saves the tree. It saves the counter file and write()s any dirty nodes.

Throws:
IOException
ClassNotFoundException

saveAfterTruncate

public void saveAfterTruncate()
                       throws IOException,
                              ClassNotFoundException
Throws:
IOException
ClassNotFoundException

getValues

protected final org.apache.commons.collections.primitives.IntList getValues()

setValues

protected final void setValues(org.apache.commons.collections.primitives.IntList vals)

getValue

protected final int getValue(int index)

setValue

protected final void setValue(int index,
                              int val)

getMinimizationFactor

protected final int getMinimizationFactor()

getKeyCapacity

protected final int getKeyCapacity()
Return the maximum number of keys I can contain (2* minimizationFactor-1).


isFull

protected final boolean isFull()

getFileId

protected final int getFileId()

setFileId

protected final void setFileId(int fileId)

getChildIds

protected final org.apache.commons.collections.primitives.IntList getChildIds()

setChildIds

protected final void setChildIds(org.apache.commons.collections.primitives.IntList childIds)

isRoot

protected final boolean isRoot()
Returns true iff I am the root node.


isLeaf

protected final boolean isLeaf()
Returns true iff I don't contain any child nodes.


getBTreeMetaData

protected final org.axiondb.util.BTreeMetaData getBTreeMetaData()

saveCounterIfRoot

protected final void saveCounterIfRoot()
                                throws IOException
Throws:
IOException

space

protected final String space(int n)
Return a String comprised of 2*n spaces.


addFileId

protected final void addFileId(int index,
                               int fileid)
Store a reference to the given file id at the specifed index. Flags me as dirty.


getFileIdForIndex

protected final int getFileIdForIndex(int index)
Get the file id for the specified index.


addFileId

protected final void addFileId(int fileId)
Add a reference to the given file id. Flags me as dirty.


addFileIds

protected final void addFileIds(org.apache.commons.collections.primitives.IntList fileIds)
Add the given specified file ids. Flags me as dirty.