/** * Serialize a Node's Value. We store the two offsets of the child page. */ private <K, V> int serializeNodeValue( PersistedNode<K, V> node, int pos, List<byte[]> serializedData ) throws IOException { // For a node, we just store the children's offsets Page<K, V> child = node.getReference( pos ); // The first offset byte[] buffer = LongSerializer.serialize( ( ( AbstractPage<K, V> ) child ).getOffset() ); serializedData.add( buffer ); int dataSize = buffer.length; // The last offset buffer = LongSerializer.serialize( ( ( AbstractPage<K, V> ) child ).getLastOffset() ); serializedData.add( buffer ); dataSize += buffer.length; return dataSize; }
/** * Create a new holder storing an offset and a SoftReference containing the element. * * @param page The element to store into a SoftReference */ public PersistedPageHolder( BTree<K, V> btree, Page<K, V> page ) { // DO NOT keep the reference to Page, it will be fetched from cache when needed super( btree, null ); cache = ( ( PersistedBTree<K, V> ) btree ).getCache(); recordManager = ( ( PersistedBTree<K, V> ) btree ).getRecordManager(); offset = ( ( AbstractPage<K, V> ) page ).getOffset(); lastOffset = ( ( AbstractPage<K, V> ) page ).getLastOffset(); ( ( AbstractPage<K, V> ) page ).setOffset( offset ); ( ( AbstractPage<K, V> ) page ).setLastOffset( lastOffset ); cache.put( offset, page ); }