/** * GeDBIT.index.VPInternalNode 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; /** * @author Rui Mao, Willard */ public class VPInternalNode extends InternalNode { private static final long serialVersionUID = 2951629361525110954L; private double[][] lowerRange; private double[][] upperRange; public int GHTDegree = 0; public VPInternalNode() { super(); } /** * @param pivots * @param lowerRange * lower range from each child (row) to each pivot (column) * @param upperRange * upper range from each child (row) to each pivot (column) * @param size * @param childAddress */ public VPInternalNode(IndexObject[] pivots, double[][] lowerRange, double[][] upperRange, int size, long[] childAddress) { this(pivots, lowerRange, upperRange, size, childAddress, 0); } public VPInternalNode(IndexObject[] pivots, double[][] lowerRange, double[][] upperRange, int size, long[] childAddress, int degree) { super(pivots, size, childAddress); if (lowerRange == null || upperRange == null) throw new IllegalArgumentException( "lowerRange and upperRange distance arrays cannot be null"); this.lowerRange = lowerRange; this.upperRange = upperRange; this.GHTDegree = degree; } /** * Returns the predicate, the ranges from the child to each piovt, of a * child node. * * @param childIndex * @return a 2-d array of the lower ranges (first row) and the upper ranges * (second row) of the child to each pivot. */ public double[][] getChildPredicate(int childIndex) { double[][] result = new double[2][]; result[0] = lowerRange[childIndex]; result[1] = upperRange[childIndex]; return result; } /* * (non-Javadoc) * * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput) */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); out.writeInt(lowerRange.length); for (int i = 0; i < lowerRange.length; i++) { out.writeInt(lowerRange[i].length); for (int j = 0; j < lowerRange[i].length; j++) { out.writeDouble(lowerRange[i][j]); } } out.writeInt(upperRange.length); for (int i = 0; i < upperRange.length; i++) { out.writeInt(upperRange[i].length); for (int j = 0; j < upperRange[i].length; j++) { out.writeDouble(upperRange[i][j]); } } out.writeInt(GHTDegree); } /* * (non-Javadoc) * * @see java.io.Externalizable#readExternal(java.io.ObjectInput) */ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); lowerRange = new double[in.readInt()][]; for (int i = 0; i < lowerRange.length; i++) { lowerRange[i] = new double[in.readInt()]; for (int j = 0; j < lowerRange[i].length; j++) { lowerRange[i][j] = in.readDouble(); } } upperRange = new double[in.readInt()][]; for (int i = 0; i < upperRange.length; i++) { upperRange[i] = new double[in.readInt()]; for (int j = 0; j < upperRange[i].length; j++) { upperRange[i][j] = in.readDouble(); } } this.GHTDegree = in.readInt(); } public double[][] getLowerRange() { return lowerRange; } public void setLowerRange(double[][] lowerRange) { this.lowerRange = lowerRange; } public double[][] getUpperRange() { return upperRange; } public void setUpperRange(double[][] upperRange) { this.upperRange = upperRange; } }