Author: elecharny
Date: Fri Mar 15 20:43:48 2013
New Revision: 1457106

URL: http://svn.apache.org/r1457106
Log:
o Used the BTree.createHolder() instead of crating a new ReferenceHolder in 
Node.
o We can keep all the elements in memory of the bTree is not managed

Modified:
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java
    
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java

Modified: 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
URL: 
http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java?rev=1457106&r1=1457105&r2=1457106&view=diff
==============================================================================
--- 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java 
(original)
+++ 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java 
Fri Mar 15 20:43:48 2013
@@ -1464,24 +1464,25 @@ public class BTree<K, V>
      * @param value The value to store
      * @return The value holder
      */
-    /* no qualifier */ElementHolder<V, K, V> createHolder( V value )
+    /* no qualifier */ElementHolder createHolder( Object value )
     {
         if ( type == BTreeTypeEnum.MANAGED )
         {
             if ( value instanceof Page )
             {
-                return new ReferenceHolder<V, K, V>( this, value, -1L );
+                return new ReferenceHolder<Page<K, V>, K, V>( this, ( Page<K, 
V> ) value,
+                    ( ( AbstractPage<K, V> ) value ).getOffset() );
             }
             else
             {
                 // Atm, keep the values in memory
-                return new MemoryHolder<K, V>( this, value );
+                return new MemoryHolder<K, V>( this, ( V ) value );
 
             }
         }
         else
         {
-            return new MemoryHolder<K, V>( this, value );
+            return new MemoryHolder( this, value );
         }
     }
 

Modified: 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java
URL: 
http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java?rev=1457106&r1=1457105&r2=1457106&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java 
(original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java 
Fri Mar 15 20:43:48 2013
@@ -57,7 +57,7 @@ public class Node<K, V> extends Abstract
         super( btree, revision, nbElems );
 
         // Create the children array
-        children = ( ReferenceHolder<Page<K, V>, K, V>[] ) Array.newInstance( 
ReferenceHolder.class, nbElems + 1 );
+        children = ( ElementHolder<Page<K, V>, K, V>[] ) Array.newInstance( 
ElementHolder.class, nbElems + 1 );
     }
 
 
@@ -78,10 +78,19 @@ public class Node<K, V> extends Abstract
         super( btree, revision, 1 );
 
         // Create the children array, and store the left and right children
-        children = ( ReferenceHolder<Page<K, V>, K, V>[] ) Array.newInstance( 
ReferenceHolder.class,
-            btree.getPageSize() );
-        children[0] = new ReferenceHolder( btree, leftPage, ( ( AbstractPage ) 
leftPage ).getOffset() );
-        children[1] = new ReferenceHolder( btree, rightPage, ( ( AbstractPage 
) rightPage ).getOffset() );
+        if ( btree.isManaged() )
+        {
+            children = ( ReferenceHolder<Page<K, V>, K, V>[] ) 
Array.newInstance( ReferenceHolder.class,
+                btree.getPageSize() );
+        }
+        else
+        {
+            children = ( MemoryHolder[] ) Array.newInstance( 
MemoryHolder.class,
+                btree.getPageSize() );
+        }
+
+        children[0] = btree.createHolder( leftPage );
+        children[1] = btree.createHolder( rightPage );
 
         // Create the keys array and store the pivot into it
         // We get the type of array to create from the btree
@@ -164,13 +173,11 @@ public class Node<K, V> extends Abstract
 
         if ( found )
         {
-            newPage.children[index + 1] = new ReferenceHolder( btree, 
modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() );
+            newPage.children[index + 1] = btree.createHolder( modifiedPage );
         }
         else
         {
-            newPage.children[index] = new ReferenceHolder( btree, modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() );
+            newPage.children[index] = btree.createHolder( modifiedPage );
         }
 
         if ( pos < 0 )
@@ -255,8 +262,7 @@ public class Node<K, V> extends Abstract
 
             // Inject the modified page
             Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-            newNode.children[0] = new ReferenceHolder( btree, modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() );
+            newNode.children[0] = btree.createHolder( modifiedPage );
 
             // Copy the children
             System.arraycopy( children, 2, newNode.children, 1, nbElems - 1 );
@@ -286,8 +292,7 @@ public class Node<K, V> extends Abstract
 
             // Inject the modified page
             Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-            newNode.children[index - 1] = new ReferenceHolder( btree, 
modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() ); // 6
+            newNode.children[index - 1] = btree.createHolder( modifiedPage ); 
// 6
         }
 
         // Create the result
@@ -326,7 +331,7 @@ public class Node<K, V> extends Abstract
         Node<K, V> newNode = new Node<K, V>( btree, revision, nbElems );
 
         // Sets the first children
-        newNode.children[0] = new ReferenceHolder( btree, siblingChild, 
sibling.getOffset() ); //1
+        newNode.children[0] = btree.createHolder( siblingChild ); //1
 
         int index = Math.abs( pos );
 
@@ -336,8 +341,7 @@ public class Node<K, V> extends Abstract
             System.arraycopy( keys, 1, newNode.keys, 1, nbElems - 1 );
 
             Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-            newNode.children[1] = new ReferenceHolder( btree, modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() );
+            newNode.children[1] = btree.createHolder( modifiedPage );
             System.arraycopy( children, 2, newNode.children, 2, nbElems - 1 );
         }
         else
@@ -368,8 +372,7 @@ public class Node<K, V> extends Abstract
 
             // Insert the modified page
             Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-            newNode.children[index] = new ReferenceHolder( btree, modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() ); // 7
+            newNode.children[index] = btree.createHolder( modifiedPage ); // 7
         }
 
         // Create the result
@@ -412,8 +415,7 @@ public class Node<K, V> extends Abstract
                 System.arraycopy( keys, 1, newNode.keys, half + 1, half - 1 );
 
                 Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-                newNode.children[half + 1] = new ReferenceHolder( btree, 
modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() );
+                newNode.children[half + 1] = btree.createHolder( modifiedPage 
);
                 System.arraycopy( children, 2, newNode.children, half + 2, 
half - 1 );
             }
             else
@@ -441,8 +443,7 @@ public class Node<K, V> extends Abstract
 
                 // Inject the new merged child
                 Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-                newNode.children[half + index] = new ReferenceHolder( btree, 
modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() ); //8
+                newNode.children[half + index] = btree.createHolder( 
modifiedPage ); //8
             }
         }
         else
@@ -455,8 +456,7 @@ public class Node<K, V> extends Abstract
 
                 // Insert the first child
                 Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-                newNode.children[0] = new ReferenceHolder( btree, modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() );
+                newNode.children[0] = btree.createHolder( modifiedPage );
 
                 // Copy the node children
                 System.arraycopy( children, 2, newNode.children, 1, half - 1 );
@@ -478,8 +478,7 @@ public class Node<K, V> extends Abstract
 
                 // Inject the modified children
                 Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-                newNode.children[index - 1] = new ReferenceHolder( btree, 
modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() ); // 7
+                newNode.children[index - 1] = btree.createHolder( modifiedPage 
); // 7
 
                 // Add the remaining node's key if needed
                 if ( index < half )
@@ -654,10 +653,8 @@ public class Node<K, V> extends Abstract
                 newPage.keys[pos + 1] = 
modifiedSibling.findLeftMost().getKey();
 
                 // Update the children
-                newPage.children[pos + 1] = new ReferenceHolder( btree, 
modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() );
-                newPage.children[pos + 2] = new ReferenceHolder( btree, 
modifiedSibling,
-                    ( ( AbstractPage ) modifiedSibling ).getOffset() );
+                newPage.children[pos + 1] = btree.createHolder( modifiedPage );
+                newPage.children[pos + 2] = btree.createHolder( 
modifiedSibling );
             }
             else
             {
@@ -665,10 +662,8 @@ public class Node<K, V> extends Abstract
                 newPage.keys[pos] = modifiedPage.findLeftMost().getKey();
 
                 // Update the children
-                newPage.children[pos] = new ReferenceHolder( btree, 
modifiedSibling,
-                    ( ( AbstractPage ) modifiedSibling ).getOffset() );
-                newPage.children[pos + 1] = new ReferenceHolder( btree, 
modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() );
+                newPage.children[pos] = btree.createHolder( modifiedSibling );
+                newPage.children[pos + 1] = btree.createHolder( modifiedPage );
             }
         }
         else
@@ -679,10 +674,8 @@ public class Node<K, V> extends Abstract
                 newPage.keys[pos] = modifiedSibling.findLeftMost().getKey();
 
                 // Update the children
-                newPage.children[pos] = new ReferenceHolder( btree, 
modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() );
-                newPage.children[pos + 1] = new ReferenceHolder( btree, 
modifiedSibling,
-                    ( ( AbstractPage ) modifiedSibling ).getOffset() );
+                newPage.children[pos] = btree.createHolder( modifiedPage );
+                newPage.children[pos + 1] = btree.createHolder( 
modifiedSibling );
             }
             else
             {
@@ -690,10 +683,8 @@ public class Node<K, V> extends Abstract
                 newPage.keys[pos - 1] = modifiedPage.findLeftMost().getKey();
 
                 // Update the children
-                newPage.children[pos - 1] = new ReferenceHolder( btree, 
modifiedSibling,
-                    ( ( AbstractPage ) modifiedSibling ).getOffset() );
-                newPage.children[pos] = new ReferenceHolder( btree, 
modifiedPage,
-                    ( ( AbstractPage ) modifiedPage ).getOffset() );
+                newPage.children[pos - 1] = btree.createHolder( 
modifiedSibling );
+                newPage.children[pos] = btree.createHolder( modifiedPage );
             }
         }
 
@@ -725,8 +716,7 @@ public class Node<K, V> extends Abstract
             // Copy the keys and the children
             System.arraycopy( keys, 1, newNode.keys, 0, newNode.nbElems );
             Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-            newNode.children[0] = new ReferenceHolder( btree, modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() );
+            newNode.children[0] = btree.createHolder( modifiedPage );
             System.arraycopy( children, 2, newNode.children, 1, nbElems - 1 );
         }
         else
@@ -748,8 +738,7 @@ public class Node<K, V> extends Abstract
             System.arraycopy( children, 0, newNode.children, 0, index + 1 );
 
             Page<K, V> modifiedPage = mergedResult.getModifiedPage();
-            newNode.children[index + 1] = new ReferenceHolder( btree, 
modifiedPage,
-                ( ( AbstractPage ) modifiedPage ).getOffset() );
+            newNode.children[index + 1] = btree.createHolder( modifiedPage );
 
             if ( index < nbElems - 2 )
             {
@@ -812,7 +801,7 @@ public class Node<K, V> extends Abstract
     public void setValue( int pos, ElementHolder<Page<K, V>, K, V> value )
     {
         Page<K, V> page = value.getValue( btree );
-        children[pos] = new ReferenceHolder( btree, page, ( ( AbstractPage<K, 
V> ) page ).getOffset() );
+        children[pos] = btree.createHolder( page );
     }
 
 
@@ -880,8 +869,7 @@ public class Node<K, V> extends Abstract
         // Last, we update the children table of the newly created page
         // to point on the modified child
         Page<K, V> modifiedPage = result.getModifiedPage();
-        ( ( Node<K, V> ) newPage ).children[pos] = new ReferenceHolder( btree, 
modifiedPage,
-            ( ( AbstractPage ) modifiedPage ).getOffset() );
+        ( ( Node<K, V> ) newPage ).children[pos] = btree.createHolder( 
modifiedPage );
 
         // We can return the result, where we update the modifiedPage,
         // to avoid the creation of a new object
@@ -911,8 +899,8 @@ public class Node<K, V> extends Abstract
         if ( nbElems == 0 )
         {
             newNode.keys[0] = key;
-            newNode.children[0] = new ReferenceHolder( btree, leftPage, ( ( 
AbstractPage ) leftPage ).getOffset() );
-            newNode.children[1] = new ReferenceHolder( btree, rightPage, ( ( 
AbstractPage ) rightPage ).getOffset() );
+            newNode.children[0] = btree.createHolder( leftPage );
+            newNode.children[1] = btree.createHolder( rightPage );
         }
         else
         {
@@ -922,9 +910,8 @@ public class Node<K, V> extends Abstract
 
             // Add the new key and children
             newNode.keys[pos] = key;
-            newNode.children[pos] = new ReferenceHolder( btree, leftPage, ( ( 
AbstractPage ) leftPage ).getOffset() );
-            newNode.children[pos + 1] = new ReferenceHolder( btree, rightPage,
-                ( ( AbstractPage ) rightPage ).getOffset() );
+            newNode.children[pos] = btree.createHolder( leftPage );
+            newNode.children[pos + 1] = btree.createHolder( rightPage );
 
             // And copy the remaining keys and children
             System.arraycopy( keys, pos, newNode.keys, pos + 1, keys.length - 
pos );
@@ -973,9 +960,8 @@ public class Node<K, V> extends Abstract
 
             // Add the new element
             newLeftPage.keys[pos] = pivot;
-            newLeftPage.children[pos] = new ReferenceHolder( btree, leftPage, 
( ( AbstractPage ) leftPage ).getOffset() );
-            newLeftPage.children[pos + 1] = new ReferenceHolder( btree, 
rightPage,
-                ( ( AbstractPage ) rightPage ).getOffset() );;
+            newLeftPage.children[pos] = btree.createHolder( leftPage );
+            newLeftPage.children[pos + 1] = btree.createHolder( rightPage );
 
             // And copy the remaining elements minus the new pivot
             System.arraycopy( keys, pos, newLeftPage.keys, pos + 1, middle - 
pos - 1 );
@@ -997,14 +983,12 @@ public class Node<K, V> extends Abstract
             // Copy the keys and the children up to the insertion position 
(here, middle)
             System.arraycopy( keys, 0, newLeftPage.keys, 0, middle );
             System.arraycopy( children, 0, newLeftPage.children, 0, middle );
-            newLeftPage.children[middle] = new ReferenceHolder( btree, 
leftPage,
-                ( ( AbstractPage ) leftPage ).getOffset() );
+            newLeftPage.children[middle] = btree.createHolder( leftPage );
 
             // And process the right page now
             System.arraycopy( keys, middle, newRightPage.keys, 0, middle );
             System.arraycopy( children, middle + 1, newRightPage.children, 1, 
middle );
-            newRightPage.children[0] = new ReferenceHolder( btree, rightPage,
-                ( ( AbstractPage ) rightPage ).getOffset() );;
+            newRightPage.children[0] = btree.createHolder( rightPage );
 
             // Create the result
             InsertResult<K, V> result = new SplitResult<K, V>( pivot, 
newLeftPage, newRightPage );
@@ -1023,10 +1007,8 @@ public class Node<K, V> extends Abstract
 
             // Add the new element
             newRightPage.keys[pos - middle - 1] = pivot;
-            newRightPage.children[pos - middle - 1] = new ReferenceHolder( 
btree, leftPage,
-                ( ( AbstractPage ) leftPage ).getOffset() );
-            newRightPage.children[pos - middle] = new ReferenceHolder( btree, 
rightPage,
-                ( ( AbstractPage ) rightPage ).getOffset() );
+            newRightPage.children[pos - middle - 1] = btree.createHolder( 
leftPage );
+            newRightPage.children[pos - middle] = btree.createHolder( 
rightPage );
 
             // And copy the remaining elements minus the new pivot
             System.arraycopy( keys, pos, newRightPage.keys, pos - middle, 
nbElems - pos );

Modified: 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java
URL: 
http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java?rev=1457106&r1=1457105&r2=1457106&view=diff
==============================================================================
--- 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java
 (original)
+++ 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java
 Fri Mar 15 20:43:48 2013
@@ -1032,8 +1032,7 @@ public class InMemoryBTreeTest
             node.keys[pos - 1] = leftmost.getKey();
         }
 
-        node.children[pos] = new ReferenceHolder<Page<Integer, String>, 
Integer, String>( btree, page,
-            ( ( AbstractPage<Integer, String> ) page ).getOffset() );
+        node.children[pos] = btree.createHolder( page );
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to