public int internalNodeSearch(DeweyID deweyId) { // page: pagestate,nextpage,freeoffset // ps,isroot,isleaf,number of keys in this // page,freeoff,nextp(leftmost),deweyId,nextp,deweyId,nextp(rightmost) int pagePointer = -1; // null int length; byte[] curId; DeweyID curDId = null; DeweyID result = null; InternalBuffer.position(Settings.dataStartPos); // 3+4+4 ps+isL+isR+freeOff+numOf // if(IsRoot() & IsLeaf()& freeOffset==Settings.dataStartPos) if (numOfKeys > 0) { for (int i = 0; i < numOfKeys; i++) { pagePointer = InternalBuffer.getInt(); // next page adrs length = InternalBuffer.getInt(); curId = new byte[length]; InternalBuffer.get(curId, 0, length); curDId = new DeweyID(); curDId.setDeweyId(curId); result = curDId; if (!(curDId.notGreaterThan(deweyId))) { break; } } if (curDId.notGreaterThan(deweyId)) // baraye akharin curID(rightMost) { pagePointer = InternalBuffer.getInt(); // the last (right most)pointer } } return pagePointer; // page i ro bar migardune k result max un hast. // ki<k<ki+1 }