/** * GeDBIT.index.IndexNode 2006.05.12 * * Copyright Information: * * Change Log: * 2006.05.12: Modified from jdb v1.0, by Rui Mao */ package GeDBIT.index; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import GeDBIT.type.IndexObject; /** * An index node is a node of a database index tree. This interface is the base * class for all different index structures, such as radius-base(RBT), general * hyper-plane (GHT) and vantage point (VP). * * @author Rui Mao, Neha Singh, Willard * @version 2006.05.12 */ abstract class IndexNode implements Externalizable { private IndexObject[] pivots; private int size; public IndexNode() { } public IndexNode(IndexObject[] pivots, int size) { if (pivots == null) throw new IllegalArgumentException("vps cannot be null"); this.pivots = pivots; if (size < 0) throw new IllegalArgumentException("size cannot be less than '0'"); this.size = size; } /** * @return the number of pivots. */ int numPivots() { return pivots.length; } /** * @return the number of data points in the subtree with the current node as * the root. */ int size() { return size; } /** * Return a reference to a pivot * * @param pivotIndex * index of the pivot to be return * @return the key value of the pivot */ IndexObject getPivot(int pivotIndex) { return pivots[pivotIndex]; } public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(pivots.length); for (int i = 0; i < pivots.length; i++) { out.writeObject(pivots[i]); } out.writeInt(size); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { pivots = new IndexObject[in.readInt()]; for (int i = 0; i < pivots.length; i++) { pivots[i] = (IndexObject) in.readObject(); } size = in.readInt(); } }