/** * {@inheritDoc} * @throws IOException * @throws EndOfFileExceededException */ public Page<K, V> getValue() { Page<K, V> page = ( Page<K, V> ) cache.get( offset ); if ( page == null ) { // We have to fetch the element from disk, using the offset now page = fetchElement(); ( ( AbstractPage<K, V> ) page ).setOffset( offset ); ( ( AbstractPage<K, V> ) page ).setLastOffset( lastOffset ); cache.put( offset, page ); } return page; }
/** * 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, long offset, long lastOffset ) { // 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(); this.offset = offset; this.lastOffset = lastOffset; if ( page != null ) { ( ( AbstractPage<K, V> ) page ).setOffset( offset ); ( ( AbstractPage<K, V> ) page ).setLastOffset( lastOffset ); } cache.put( offset, page ); }
/** * 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 ); }
( ( AbstractPage<K, V> ) rootPage ).setOffset( rootPageOffset );
( ( AbstractPage<K, V> ) page ).setOffset( pageIos[0].getOffset() ); if ( pageIos.length > 1 )