/** * Creates a new Node which will contain only one key, with references to * a left and right page. This is a specific constructor used by the btree * when the root was full when we added a new value. * * @param btree the parent BTree * @param revision the Node revision * @param key The new key * @param leftPage The left page * @param rightPage The right page */ @SuppressWarnings("unchecked") PersistedNode( BTree<K, V> btree, long revision, K key, PageHolder<K, V> leftPage, PageHolder<K, V> rightPage ) { super( btree, revision, 1 ); // Create the children array, and store the left and right children children = ( PageHolder<K, V>[] ) Array.newInstance( PageHolder.class, btree.getPageSize() + 1 ); children[0] = leftPage; children[1] = rightPage; // Create the keys array and store the pivot into it keys = ( KeyHolder[] ) Array.newInstance( KeyHolder.class, btree.getPageSize() ); keys[0] = new PersistedKeyHolder<K>( btree.getKeySerializer(), key ); }
/** * Creates a new Node which will contain only one key, with references to * a left and right page. This is a specific constructor used by the btree * when the root was full when we added a new value. * * @param btree the parent BTree * @param revision the Node revision * @param key The new key * @param leftPage The left page * @param rightPage The right page */ @SuppressWarnings("unchecked") PersistedNode( BTree<K, V> btree, long revision, K key, Page<K, V> leftPage, Page<K, V> rightPage ) { super( btree, revision, 1 ); // Create the children array, and store the left and right children children = ( PersistedPageHolder<K, V>[] ) Array.newInstance( PersistedPageHolder.class, btree.getPageSize() + 1 ); children[0] = new PersistedPageHolder<K, V>( btree, leftPage ); children[1] = new PersistedPageHolder<K, V>( btree, rightPage ); // Create the keys array and store the pivot into it // We get the type of array to create from the btree // Yes, this is an hack... keys = ( KeyHolder<K>[] ) Array.newInstance( PersistedKeyHolder.class, btree.getPageSize() ); keys[0] = new PersistedKeyHolder<K>( btree.getKeySerializer(), key ); }
/** * Creates a new Node which will contain only one key, with references to * a left and right page. This is a specific constructor used by the btree * when the root was full when we added a new value. * * @param btree the parent BTree * @param revision the Node revision * @param key The new key * @param leftPage The left page * @param rightPage The right page */ @SuppressWarnings("unchecked") InMemoryNode( BTree<K, V> btree, long revision, K key, Page<K, V> leftPage, Page<K, V> rightPage ) { super( btree, revision, 1 ); // Create the children array, and store the left and right children children = ( PageHolder[] ) Array.newInstance( PageHolder.class, btree.getPageSize() + 1 ); children[0] = new PageHolder<K, V>( btree, leftPage ); children[1] = new PageHolder<K, V>( btree, rightPage ); // Create the keys array and store the pivot into it // We get the type of array to create from the btree // Yes, this is an hack... setKeys( ( KeyHolder<K>[] ) Array.newInstance( KeyHolder.class, btree.getPageSize() ) ); setKey( 0, new KeyHolder<K>( key ) ); }
int pageSize = btree.getPageSize(); int maxElements = ( pageSize + 1 ) * pageSize; if ( pageStack[level].size() > btree.getPageSize() ) node = createParentNode( btree, pageStack[level], btree.getPageSize() ); pageStack[level].clear(); level++; if ( leaf.getNbElems() < btree.getPageSize() / 2 )
PersistedLeaf<K, V> newLeaf = new PersistedLeaf<K, V>( btree, revision, btree.getPageSize() - 1 );
int middle = btree.getPageSize() >> 1; PersistedLeaf<K, V> leftLeaf = null; PersistedLeaf<K, V> rightLeaf = null;
private static <K, V> int computeNbElemsLeaf( BTree<K, V> btree, LevelInfo<K, V> levelInfo ) { int pageSize = btree.getPageSize(); int remaining = levelInfo.getNbElems() - levelInfo.getNbAddedElems(); if ( remaining < pageSize ) { return remaining; } else if ( remaining == pageSize ) { return pageSize; } else if ( remaining > levelInfo.getNbElems() - levelInfo.getNbElemsLimit() ) { return pageSize; } else { return remaining - pageSize / 2; } }
InMemoryLeaf<K, V> newLeaf = new InMemoryLeaf<K, V>( btree, revision, btree.getPageSize() - 1 );
/** * Compute the number of nodes necessary to store all the elements. */ /* No qualifier */int computeNbElemsNode( BTree<K, V> btree, LevelInfo<K, V> levelInfo ) { int pageSize = btree.getPageSize(); int remaining = levelInfo.getNbElems() - levelInfo.getNbAddedElems(); if ( remaining < pageSize + 1 ) { return remaining; } else if ( remaining == pageSize + 1 ) { return pageSize + 1; } else if ( remaining > levelInfo.getNbElems() - levelInfo.getNbElemsLimit() ) { return pageSize + 1; } else { return remaining - pageSize / 2; } }
int middle = btree.getPageSize() >> 1; PersistedLeaf<K, V> leftLeaf = null; PersistedLeaf<K, V> rightLeaf = null;
int middle = btree.getPageSize() >> 1; InMemoryLeaf<K, V> leftLeaf = null; InMemoryLeaf<K, V> rightLeaf = null;
Page<K, V> rightPage, int pos ) throws IOException int middle = btree.getPageSize() >> 1;
if ( nbElems < btree.getPageSize() )
if ( nbElems < btree.getPageSize() )
if ( nbElems == btree.getPageSize() )
if ( nbElems == btree.getPageSize() )
position = store( position, btree.getPageSize(), btreeHeaderPageIos );
configuration.setPageSize( btree.getPageSize() ); configuration.setKeySerializer( btree.getKeySerializer() ); configuration.setValueSerializer( btree.getValueSerializer() );
if ( page.getNbElems() == btree.getPageSize() )
int pageSize = btree.getPageSize(); int incrementNode = 0;