E
- the type of Entry used in the indexpublic abstract class AbstractNode<E extends Entry> extends AbstractPage implements Node<E>
Modifier and Type | Field and Description |
---|---|
protected E[] |
entries
The entries (children) of this node.
|
protected boolean |
isLeaf
Indicates whether this node is a leaf node.
|
protected int |
numEntries
The number of entries in this node.
|
Constructor and Description |
---|
AbstractNode()
Empty constructor for Externalizable interface.
|
AbstractNode(int capacity,
boolean isLeaf,
Class<? super E> eclass)
Creates a new Node with the specified parameters.
|
Modifier and Type | Method and Description |
---|---|
int |
addDirectoryEntry(E entry)
Adds a new directory entry to this node's children and returns the index of
the entry in this node's children array.
|
private int |
addEntry(E entry)
Adds the specified entry to the entries array and increases the numEntries
counter.
|
int |
addLeafEntry(E entry)
Adds a new leaf entry to this node's children and returns the index of the
entry in this node's children array.
|
Enumeration<IndexTreePath<E>> |
children(IndexTreePath<E> parentPath)
Returns an enumeration of the children paths of this node.
|
void |
deleteAllEntries()
Deletes all entries in this node.
|
boolean |
deleteEntry(int index)
Deletes the entry at the specified index and shifts all entries after the
index to left.
|
boolean |
equals(Object o)
Returns
true if this == o has the value
true or o is not null and o is of the same class as this
instance and super.equals(o) returns true and
both nodes are of the same type (leaf node or directory node) and have
contain the same entries, false otherwise. |
int |
getCapacity()
Returns the capacity of this node (i.e. the length of the entries arrays).
|
List<E> |
getEntries()
Returns a list of the entries.
|
E |
getEntry(int index)
Returns the entry at the specified index.
|
int |
getNumEntries()
Returns the number of entries of this node.
|
boolean |
isLeaf()
Returns true if this node is a leaf node, false otherwise.
|
void |
readExternal(ObjectInput in)
Reads the id of this node, the numEntries and the entries array from the
specified stream.
|
void |
splitTo(AbstractNode<E> newNode,
List<E> sorting,
int splitPoint)
Redistribute entries according to the given sorting.
|
void |
splitTo(AbstractNode<E> newNode,
List<E> assignmentsToFirst,
List<E> assignmentsToSecond)
Splits the entries of this node into a new node using the given assignments
|
String |
toString()
Returns a string representation of this node.
|
void |
writeExternal(ObjectOutput out)
Calls the super method and writes the id of this node, the numEntries and
the entries array to the specified stream.
|
getPageID, hashCode, isDirty, setDirty, setPageID
protected int numEntries
protected boolean isLeaf
public AbstractNode()
public AbstractNode(int capacity, boolean isLeaf, Class<? super E> eclass)
capacity
- the capacity (maximum number of entries plus 1 for
overflow) of this nodeisLeaf
- indicates whether this node is a leaf nodeeclass
- Entry class, to initialize array storagepublic final Enumeration<IndexTreePath<E>> children(IndexTreePath<E> parentPath)
Node
public final int getNumEntries()
Node
getNumEntries
in interface Node<E extends Entry>
public final boolean isLeaf()
Node
public final E getEntry(int index)
Node
public void writeExternal(ObjectOutput out) throws IOException
writeExternal
in interface Externalizable
writeExternal
in class AbstractPage
out
- the stream to write the object toIOException
- Includes any I/O exceptions that may occurpublic void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
readExternal
in interface Externalizable
readExternal
in class AbstractPage
in
- the stream to read data from in order to restore the objectIOException
- if I/O errors occurClassNotFoundException
- If the class for an object being restored
cannot be found.public boolean equals(Object o)
true
if this == o
has the value
true
or o is not null and o is of the same class as this
instance and super.equals(o)
returns true
and
both nodes are of the same type (leaf node or directory node) and have
contain the same entries, false
otherwise.equals
in class AbstractPage
o
- the object to be testedAbstractPage.equals(Object)
public final String toString()
toString
in class AbstractPage
public final int addLeafEntry(E entry)
addLeafEntry
in interface Node<E extends Entry>
entry
- the leaf entry to be addedUnsupportedOperationException
- if entry is not a leaf entry or this
node is not a leaf nodepublic final int addDirectoryEntry(E entry)
addDirectoryEntry
in interface Node<E extends Entry>
entry
- the directory entry to be addedUnsupportedOperationException
- if entry is not a directory entry or
this node is not a directory nodepublic boolean deleteEntry(int index)
index
- the index at which the entry is to be deletedpublic final void deleteAllEntries()
public final int getCapacity()
public final List<E> getEntries()
private int addEntry(E entry)
entry
- the entry to be addedpublic final void splitTo(AbstractNode<E> newNode, List<E> sorting, int splitPoint)
newNode
- Node to split tosorting
- Sorting to usesplitPoint
- Split pointpublic final void splitTo(AbstractNode<E> newNode, List<E> assignmentsToFirst, List<E> assignmentsToSecond)
newNode
- Node to split toassignmentsToFirst
- the assignment to this nodeassignmentsToSecond
- the assignment to the new node