/**
* GeDBIT.index.InternalNode 2006.05.12
*
* Copyright Information:
*
* Change Log:
* 2006.05.12: created, by Rui Mao, Willard
*/
package GeDBIT.index;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import GeDBIT.type.IndexObject;
/**
* The interface for all internal nodes.
*
* @author Rui Mao, Willard
* @version 2006.05.12
*/
public abstract class InternalNode extends IndexNode {
protected long[] childAddresses;
public InternalNode() {
super();
}
protected InternalNode(IndexObject[] pivots, int size, long[] childAddresses) {
super(pivots, size);
if (childAddresses == null)
throw new IllegalArgumentException(
"InternalNode childAddresses cannot be null");
this.childAddresses = childAddresses;
}
/**
* @return the number of children.
*/
int numChildren() {
return childAddresses.length;
}
/**
* Return the address of a child
*
* @param childIndex
* index of the child to be return
* @return the address of the desired child node in the node file.
**/
long getChildAddress(int childIndex) {
return childAddresses[childIndex];
}
public void setChildAddress(int index, long childAddress) {
childAddresses[index] = childAddress;
}
public void writeExternal(ObjectOutput out) throws IOException {
super.writeExternal(out);
out.writeInt(childAddresses.length);
for (int i = 0; i < childAddresses.length; i++) {
out.writeLong(childAddresses[i]);
}
}
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
super.readExternal(in);
childAddresses = new long[in.readInt()];
for (int i = 0; i < childAddresses.length; i++) {
childAddresses[i] = in.readLong();
}
}
}