package ds.bplus.bptree; import java.io.IOException; import java.io.RandomAccessFile; @SuppressWarnings("unused") class TreeLookupOverflowNode extends TreeNode { private long next; // next pointer /** * Constructor which takes into the node type as well as the * page index * * @param pageIndex the page index in the file */ TreeLookupOverflowNode(long pageIndex, long nextPointer) { super(TreeNodeType.TREE_LOOKUP_OVERFLOW, pageIndex); this.next = nextPointer; } /** * Write a lookup page overflow to the page index; the node should * have the following structure: * <p> * -- node type -- (2 bytes) * -- next pointer -- (8 bytes) * -- current capacity -- (4 bytes) * <p> * -- page indexes (in place of keys) (8 bytes) * * @param r an *already* open pointer which points to our B+ Tree file * @param conf B+ Tree configuration * @param bPerf instance of performance counter class * @throws IOException is thrown when an I/O operation fails */ @Override public void writeNode(RandomAccessFile r, BPlusConfiguration conf, BPlusTreePerformanceCounter bPerf) throws IOException { // account for the header page as well r.seek(getPageIndex()); // write the node type r.writeShort(getPageType()); // write the next pointer r.writeLong(next); // write current capacity r.writeInt(getCurrentCapacity()); // now write the index values for (int i = 0; i < getCurrentCapacity(); i++) { r.writeLong(getKeyAt(i)); } } /** * Get the next pointer of the node * * @return the next pointer value */ long getNextPointer() { return next; } /** * Set the next pointer of the node * * @param nextPointer the new next pointer */ public void setNextPointer(long nextPointer) { this.next = nextPointer; } @Override public void printNode() { System.out.println("\nPrinting node of type: " + getNodeType().toString() + " with index: " + getPageIndex()); System.out.println("Current node capacity is: " + getCurrentCapacity()); System.out.println("\nPrinting tuples: \n"); for (Long key : keyArray) { System.out.print(key); } System.out.println("\n"); } }