You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2013/09/30 08:32:28 UTC

svn commit: r1527458 [1/14] - in /directory/mavibot/trunk/mavibot: img/ src/main/java/org/apache/directory/mavibot/btree/ src/main/java/org/apache/directory/mavibot/btree/managed/ src/main/java/org/apache/directory/mavibot/btree/memory/ src/main/java/o...

Author: elecharny
Date: Mon Sep 30 06:32:25 2013
New Revision: 1527458

URL: http://svn.apache.org/r1527458
Log:
Split the BTree packages into 2 different packages :
- one for in-memory btrees
- one for managed btree

Added:
    directory/mavibot/trunk/mavibot/img/ElementHolder.graphml
    directory/mavibot/trunk/mavibot/img/ElementHolder.png   (with props)
    directory/mavibot/trunk/mavibot/img/MavibotValue.graphml
    directory/mavibot/trunk/mavibot/img/MavibotValue.png   (with props)
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractBorrowedFromSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractDeleteResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractPage.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BTree.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BTreeBuilder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BTreeConfiguration.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BTreeFactory.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BorrowedFromLeftResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BorrowedFromRightResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BorrowedFromSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/BulkDataSorter.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/CacheHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/CursorImpl.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/DeleteResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/DuplicateKeyVal.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/ElementHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/InsertResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/InternalUtil.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/Leaf.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/MemoryHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/MergedWithSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/ModifyResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/MultipleMemoryHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/Node.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/NotPresentResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/Page.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/PageIO.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/ParentPos.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/RecordManager.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/ReferenceHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/RemoveResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/RevisionName.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/RevisionNameComparator.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/RevisionNameSerializer.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/SplitResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/Transaction.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/AbstractBorrowedFromSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/AbstractDeleteResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/AbstractPage.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/AbstractResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BTree.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BTreeBuilder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BTreeConfiguration.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BTreeFactory.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BTreeTypeEnum.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BorrowedFromLeftResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BorrowedFromRightResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BorrowedFromSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/BulkDataSorter.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/CursorImpl.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/DeleteResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/DuplicateKeyVal.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/ElementHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/InsertResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/InternalUtil.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/Leaf.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/MemoryHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/MergedWithSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/ModifyResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/MultipleMemoryHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/Node.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/NotPresentResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/Page.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/ParentPos.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/RemoveResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/SplitResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/memory/Transaction.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/managed/
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/managed/ReadTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/managed/RecordManagerFreePageTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/managed/RecordManagerPrivateMethodTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/managed/RecordManagerTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/managed/RecordManagerWithDuplicatesTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/managed/StoreTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/BTreeBuilderTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/BTreeConfigurationTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/BTreeDuplicateKeyTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/BTreeFlushTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/BulkDataSorterTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/InMemoryBTreeTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/InMemoryBTreeTestOps.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/LeafTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/memory/MultiThreadedBtreeTest.java
Removed:
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/AbstractBorrowedFromSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/AbstractDeleteResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/AbstractPage.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/AbstractResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTree.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeBuilder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeConfiguration.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeFactory.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BorrowedFromLeftResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BorrowedFromRightResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BorrowedFromSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/CacheHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/DeleteResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/DuplicateKeyVal.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/ElementHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/InsertResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/InternalUtil.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Leaf.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/MemoryHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/MergedWithSiblingResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/ModifyResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/MultipleMemoryHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Node.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/NotPresentResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Page.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/PageIO.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/ParentPos.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/ReferenceHolder.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/RemoveResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/SplitResult.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Transaction.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/util/BulkDataSorter.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeBuilderTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeConfigurationTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeDuplicateKeyTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeFlushTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/InMemoryBTreeTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/InMemoryBTreeTestOps.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/LeafTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/MultiThreadedBtreeTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/ReadTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerFreePageTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerPrivateMethodTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerWithDuplicatesTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/StoreTest.java
    directory/mavibot/trunk/mavibot/src/test/java/org/apache/directory/mavibot/btree/util/
Modified:
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Cursor.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Result.java
    directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Tuple.java

Added: directory/mavibot/trunk/mavibot/img/ElementHolder.graphml
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/img/ElementHolder.graphml?rev=1527458&view=auto
==============================================================================
--- directory/mavibot/trunk/mavibot/img/ElementHolder.graphml (added)
+++ directory/mavibot/trunk/mavibot/img/ElementHolder.graphml Mon Sep 30 06:32:25 2013
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yFiles for Java 2.11-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="BevelNode2">
+          <y:Geometry height="30.0" width="164.0" x="132.5" y="100.0"/>
+          <y:Fill color="#FFFF99" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="77.1484375" x="43.42578125" y="5.93359375">Element&lt;T&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:StyleProperties>
+            <y:Property class="java.lang.Boolean" name="ModernNodeShadow" value="true"/>
+          </y:StyleProperties>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="164.0" x="296.0" y="176.5"/>
+          <y:Fill color="#CCFFCC" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="125.7578125" x="19.12109375" y="5.93359375">AbstractElement&lt;T&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="426.0" y="253.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="132.701171875" x="52.1494140625" y="-1.1328125">SingleElement&lt;V&gt; -&gt;
+AbstractElement&lt;V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="426.0" y="313.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="178.896484375" x="29.0517578125" y="-1.1328125">BtreeValue&lt;V&gt; -&gt; 
+AbstractValue&lt;BTree&lt;V, V&gt;&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="426.0" y="373.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="170.248046875" x="33.3759765625" y="-1.1328125">LeafValue&lt;V&gt; -&gt; 
+AbstractValue&lt;Leaf&lt;V, V&gt;&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="426.0" y="433.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="176.599609375" x="30.2001953125" y="-1.1328125">NodeValue&lt;V&gt; -&gt; 
+AbstractValue&lt;Node&lt;V, V&gt;&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <edge id="e0" source="n3" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="378.0" y="328.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n2" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="378.0" y="268.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n1" target="n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="214.5" y="191.5"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="transparent_circle"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n4" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="378.0" y="388.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n5" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="378.0" y="448.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources/>
+  </data>
+</graphml>

Added: directory/mavibot/trunk/mavibot/img/ElementHolder.png
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/img/ElementHolder.png?rev=1527458&view=auto
==============================================================================
Binary file - no diff available.

Propchange: directory/mavibot/trunk/mavibot/img/ElementHolder.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/mavibot/trunk/mavibot/img/MavibotValue.graphml
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/img/MavibotValue.graphml?rev=1527458&view=auto
==============================================================================
--- directory/mavibot/trunk/mavibot/img/MavibotValue.graphml (added)
+++ directory/mavibot/trunk/mavibot/img/MavibotValue.graphml Mon Sep 30 06:32:25 2013
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yFiles for Java 2.11-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="BevelNode2">
+          <y:Geometry height="30.0" width="164.0" x="158.0" y="125.0"/>
+          <y:Fill color="#FFFF99" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="145.73828125" x="9.130859375" y="5.93359375">ElementHolder&lt;E, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:StyleProperties>
+            <y:Property class="java.lang.Boolean" name="ModernNodeShadow" value="true"/>
+          </y:StyleProperties>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="164.0" x="321.5" y="201.5"/>
+          <y:Fill color="#CCFFCC" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="134.46484375" x="14.767578125" y="5.93359375">CacheHolder&lt;E, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="164.0" x="321.5" y="518.0"/>
+          <y:Fill color="#CCFFCC" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="146.03125" x="8.984375" y="5.93359375">MemoryHolder&lt;E, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="278.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="232.861328125" x="2.0693359375" y="-1.1328125">NodeCacheHolder&lt;K, V&gt; -&gt;
+CacheHolder&lt;NodeValue&lt;K, V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="338.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="226.509765625" x="5.2451171875" y="-1.1328125">LeafCacheHolder&gt;K, V&gt; -&gt;
+CacheHolder&lt;LeafValue&lt;K, V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="398.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="221.974609375" x="7.5126953125" y="-1.1328125">ValueCacheHolder&lt;K, V&gt; -&gt;
+CacheHolder&lt;SingleValue&lt;V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="578.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="244.427734375" x="-3.7138671875" y="-1.1328125">NodeMemoryHolder&lt;K, V&gt; -&gt;
+MemoryHolder&lt;NodeValue&lt;K, V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n7">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="638.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="238.076171875" x="-0.5380859375" y="-1.1328125">LeafMemoryHolder&lt;K, V&gt; -&gt;
+MemoryHolder&lt;LeafValue&lt;K, V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n8">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="698.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="233.541015625" x="1.7294921875" y="-1.1328125">ValueMemoryHolder&lt;K, V&gt; -&gt;
+MemoryHolder&lt;SingleValue&lt;V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n9">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="458.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="219.73046875" x="8.634765625" y="-1.1328125">MultipleValueCacheHolder&lt;K, V&gt; -&gt;
+CacheHolder&lt;BTreeValue&lt;V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <node id="n10">
+      <data key="d5"/>
+      <data key="d6">
+        <y:GenericNode configuration="ShinyPlateNodeWithShadow">
+          <y:Geometry height="30.0" width="237.0" x="451.5" y="758.0"/>
+          <y:Fill color="#CCFFFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="231.296875" x="2.8515625" y="-1.1328125">MultipleValueMemoryHolder&lt;K, V&gt; -&gt;
+MemoryHolder&lt;BTreeValue&lt;V&gt;, K, V&gt;<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+        </y:GenericNode>
+      </data>
+    </node>
+    <edge id="e0" source="n6" target="n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="593.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n7" target="n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="653.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n8" target="n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="713.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n10" target="n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="773.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n9" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="473.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n5" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="413.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n4" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="353.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e7" source="n3" target="n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="293.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e8" source="n2" target="n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="240.0" y="533.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="transparent_circle"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e9" source="n1" target="n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="240.0" y="216.5"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="transparent_circle"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources/>
+  </data>
+</graphml>

Added: directory/mavibot/trunk/mavibot/img/MavibotValue.png
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/img/MavibotValue.png?rev=1527458&view=auto
==============================================================================
Binary file - no diff available.

Propchange: directory/mavibot/trunk/mavibot/img/MavibotValue.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java?rev=1527458&r1=1527457&r2=1527458&view=diff
==============================================================================
--- directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java (original)
+++ directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java Mon Sep 30 06:32:25 2013
@@ -49,7 +49,7 @@ import java.util.concurrent.atomic.Atomi
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-/* No qualifier*/class BTreeHeader
+public class BTreeHeader
 {
     /** The current revision */
     private AtomicLong revision = new AtomicLong( 0L );
@@ -123,7 +123,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @param versions the versions to set
      */
-    /* No qualifier*/void setVersions( long[] versions )
+    public void setVersions( long[] versions )
     {
         this.versions = versions;
     }
@@ -132,7 +132,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @return the btreeOffset
      */
-    /* No qualifier*/long getBTreeOffset()
+    public long getBTreeOffset()
     {
         return btreeOffset;
     }
@@ -141,7 +141,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @param btreeOffset the btreeOffset to set
      */
-    /* No qualifier*/void setBTreeOffset( long btreeOffset )
+    public void setBTreeOffset( long btreeOffset )
     {
         this.btreeOffset = btreeOffset;
     }
@@ -150,7 +150,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @return the rootPageOffset
      */
-    /* No qualifier*/long getRootPageOffset()
+    public long getRootPageOffset()
     {
         return rootPageOffset;
     }
@@ -159,7 +159,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @param rootPageOffset the rootPageOffset to set
      */
-    /* No qualifier*/void setRootPageOffset( long rootPageOffset )
+    public void setRootPageOffset( long rootPageOffset )
     {
         this.rootPageOffset = rootPageOffset;
     }
@@ -177,7 +177,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @param revision the revision to set
      */
-    /* No qualifier*/void setRevision( long revision )
+    public void setRevision( long revision )
     {
         this.revision.set( revision );
     }
@@ -188,7 +188,7 @@ import java.util.concurrent.atomic.Atomi
      * 
      * @return the new revision
      */
-    /* No qualifier*/long incrementRevision()
+    public long incrementRevision()
     {
         return revision.incrementAndGet();
     }
@@ -206,7 +206,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * Increment the number of elements
      */
-    /* No qualifier*/void incrementNbElems()
+    public void incrementNbElems()
     {
         nbElems.incrementAndGet();
     }
@@ -215,7 +215,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * Decrement the number of elements
      */
-    /* No qualifier*/void decrementNbElems()
+    public void decrementNbElems()
     {
         nbElems.decrementAndGet();
     }
@@ -233,7 +233,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @return the nextBTreeOffset
      */
-    /* No qualifier*/long getNextBTreeOffset()
+    public long getNextBTreeOffset()
     {
         return nextBTreeOffset;
     }
@@ -242,7 +242,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @param nextBtreeOffset the nextBtreeOffset to set
      */
-    /* No qualifier*/void setNextBTreeOffset( long nextBTreeOffset )
+    public void setNextBTreeOffset( long nextBTreeOffset )
     {
         this.nextBTreeOffset = nextBTreeOffset;
     }
@@ -269,7 +269,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @return the keySerializerFQCN
      */
-    /* No qualifier*/String getKeySerializerFQCN()
+    public String getKeySerializerFQCN()
     {
         return keySerializerFQCN;
     }
@@ -278,7 +278,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @param keySerializerFQCN the keySerializerFQCN to set
      */
-    /* No qualifier*/void setKeySerializerFQCN( String keySerializerFQCN )
+    public void setKeySerializerFQCN( String keySerializerFQCN )
     {
         this.keySerializerFQCN = keySerializerFQCN;
     }
@@ -287,7 +287,7 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @return the valueSerializerFQCN
      */
-    /* No qualifier*/String getValueSerializerFQCN()
+    public String getValueSerializerFQCN()
     {
         return valueSerializerFQCN;
     }
@@ -296,19 +296,19 @@ import java.util.concurrent.atomic.Atomi
     /**
      * @param valueSerializerFQCN the valueSerializerFQCN to set
      */
-    /* No qualifier*/void setValueSerializerFQCN( String valueSerializerFQCN )
+    public void setValueSerializerFQCN( String valueSerializerFQCN )
     {
         this.valueSerializerFQCN = valueSerializerFQCN;
     }
 
 
-    /* No qualifier*/boolean isAllowDuplicates()
+    public boolean isAllowDuplicates()
     {
         return ( allowDuplicates == 1 );
     }
 
 
-    /* No qualifier*/void setAllowDuplicates( boolean allowDuplicates )
+    public void setAllowDuplicates( boolean allowDuplicates )
     {
         this.allowDuplicates = ( allowDuplicates ? 1 : 0 );
     }

Modified: directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Cursor.java
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Cursor.java?rev=1527458&r1=1527457&r2=1527458&view=diff
==============================================================================
--- directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Cursor.java (original)
+++ directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Cursor.java Mon Sep 30 06:32:25 2013
@@ -20,13 +20,7 @@
 package org.apache.directory.mavibot.btree;
 
 
-import static org.apache.directory.mavibot.btree.InternalUtil.changeNextDupsContainer;
-import static org.apache.directory.mavibot.btree.InternalUtil.changePrevDupsContainer;
-import static org.apache.directory.mavibot.btree.InternalUtil.setDupsContainer;
-
 import java.io.IOException;
-import java.util.LinkedList;
-import java.util.NoSuchElementException;
 
 import org.apache.directory.mavibot.btree.exception.EndOfFileExceededException;
 
@@ -42,45 +36,8 @@ import org.apache.directory.mavibot.btre
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class Cursor<K, V>
+public interface Cursor<K, V>
 {
-    /** The transaction used for this cursor */
-    private Transaction<K, V> transaction;
-
-    /** The Tuple used to return the results */
-    private Tuple<K, V> tuple = new Tuple<K, V>();
-
-    /** The stack of pages from the root down to the leaf */
-    private LinkedList<ParentPos<K, V>> stack;
-
-    /** The BTree we are walking */
-    private BTree<K, V> btree;
-
-    private boolean allowDuplicates;
-
-    /** a copy of the stack given at the time of initializing the cursor. This is used for moving the cursor to start position */
-    private LinkedList<ParentPos<K, V>> _initialStack;
-
-
-    /**
-     * Creates a new instance of Cursor, starting on a page at a given position.
-     * 
-     * @param transaction The transaction this operation is protected by
-     * @param stack The stack of parent's from root to this page
-     */
-    /* No qualifier */Cursor( BTree<K, V> btree, Transaction<K, V> transaction, LinkedList<ParentPos<K, V>> stack )
-    {
-        this.transaction = transaction;
-        this.stack = stack;
-        this.btree = btree;
-        this.allowDuplicates = btree.isAllowDuplicates();
-
-        _initialStack = new LinkedList<ParentPos<K, V>>();
-
-        cloneStack( stack, _initialStack );
-    }
-
-
     /**
      * Find the next key/value
      * 
@@ -88,190 +45,7 @@ public class Cursor<K, V>
      * @throws IOException 
      * @throws EndOfFileExceededException 
      */
-    public Tuple<K, V> next() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> parentPos = stack.getFirst();
-
-        if ( parentPos.page == null )
-        {
-            // This is the end : no more value
-            throw new NoSuchElementException( "No more tuples present" );
-        }
-
-        if ( parentPos.pos == parentPos.page.getNbElems() )
-        {
-            // End of the leaf. We have to go back into the stack up to the
-            // parent, and down to the leaf
-            parentPos = findNextParentPos();
-
-            // we also need to check for the type of page cause
-            // findNextParentPos will never return a null ParentPos
-            if ( parentPos.page == null || ( parentPos.page instanceof Node ) )
-            {
-                // This is the end : no more value
-                throw new NoSuchElementException( "No more tuples present" );
-            }
-        }
-
-        // can happen if next() is called after prev()
-        if ( parentPos.pos < 0 )
-        {
-            parentPos.pos = 0;
-        }
-
-        Leaf<K, V> leaf = ( Leaf<K, V> ) ( parentPos.page );
-        tuple.setKey( leaf.keys[parentPos.pos] );
-
-        if ( allowDuplicates )
-        {
-            MultipleMemoryHolder<K,V> mvHolder = ( MultipleMemoryHolder<K,V> ) leaf.values[parentPos.pos];
-            
-            if( mvHolder.isSingleValue() )
-            {
-                tuple.setValue( mvHolder.getValue( btree ) );
-                parentPos.pos++;
-            }
-            else
-            {
-                setDupsContainer( parentPos, btree );
-                
-                // can happen if next() is called after prev()
-                if ( parentPos.dupPos < 0 )
-                {
-                    parentPos.dupPos = 0;
-                }
-                
-                tuple.setValue( parentPos.dupsContainer.rootPage.getKey( parentPos.dupPos ) );
-                parentPos.dupPos++;
-                
-                if ( parentPos.dupsContainer.getNbElems() == parentPos.dupPos )
-                {
-                    parentPos.pos++;
-                    changeNextDupsContainer( parentPos, btree );
-                }
-            }
-        }
-        else
-        {
-            tuple.setValue( leaf.values[parentPos.pos].getValue( btree ) );
-            parentPos.pos++;
-        }
-
-        return tuple;
-    }
-
-
-    /**
-     * Find the leaf containing the following elements.
-     * 
-     * @return the new ParentPos instance, or null if we have no following leaf
-     * @throws IOException 
-     * @throws EndOfFileExceededException 
-     */
-    private ParentPos<K, V> findNextParentPos() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> lastParentPos = null;
-
-        while ( true )
-        {
-            // We first go up the tree, until we reach a page whose current position
-            // is not the last one
-            ParentPos<K, V> parentPos = stack.peek();
-
-            if ( parentPos == null )
-            {
-                stack.push( lastParentPos );
-                return lastParentPos;
-            }
-
-            if ( parentPos.pos == parentPos.page.getNbElems() )
-            {
-                lastParentPos = stack.pop();
-                continue;
-            }
-            else
-            {
-                // Then we go down the tree until we find a leaf which position is not the last one.
-                int newPos = ++parentPos.pos;
-                ParentPos<K, V> newParentPos = parentPos;
-
-                while ( newParentPos.page instanceof Node )
-                {
-                    Node<K, V> node = ( Node<K, V> ) newParentPos.page;
-
-                    newParentPos = new ParentPos<K, V>( node.children[newPos].getValue( btree ), 0 );
-
-                    stack.push( newParentPos );
-
-                    newPos = 0;
-                }
-
-                if ( allowDuplicates )
-                {
-                    changeNextDupsContainer( newParentPos, btree );
-                }
-
-                return newParentPos;
-            }
-        }
-    }
-
-
-    /**
-     * Find the leaf containing the previous elements.
-     * 
-     * @return the new ParentPos instance, or null if we have no previous leaf
-     * @throws IOException 
-     * @throws EndOfFileExceededException 
-     */
-    private ParentPos<K, V> findPreviousParentPos() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> lastParentPos = null;
-
-        while ( true )
-        {
-            // We first go up the tree, until we reach a page which current position
-            // is not the first one
-            ParentPos<K, V> parentPos = stack.peek();
-
-            if ( parentPos == null )
-            {
-                stack.push( lastParentPos );
-                return lastParentPos;
-            }
-
-            if ( parentPos.pos == 0 )
-            {
-                lastParentPos = stack.pop();
-                continue;
-            }
-            else
-            {
-                // Then we go down the tree until we find a leaf which position is not the first one.
-                int newPos = --parentPos.pos;
-                ParentPos<K, V> newParentPos = parentPos;
-
-                while ( newParentPos.page instanceof Node )
-                {
-                    Node<K, V> node = ( Node<K, V> ) newParentPos.page;
-
-                    newParentPos = new ParentPos<K, V>( node.children[newPos].getValue( btree ), node.children[newPos]
-                        .getValue( btree ).getNbElems() );
-
-                    stack.push( newParentPos );
-
-                    newPos = node.getNbElems();
-                }
-
-                if ( allowDuplicates )
-                {
-                    changePrevDupsContainer( newParentPos, btree );
-                }
-
-                return newParentPos;
-            }
-        }
-    }
+    Tuple<K, V> next() throws EndOfFileExceededException, IOException;
 
 
     /**
@@ -281,115 +55,7 @@ public class Cursor<K, V>
      * @throws IOException 
      * @throws EndOfFileExceededException 
      */
-    public Tuple<K, V> prev() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> parentPos = stack.peek();
-
-        if ( parentPos.page == null )
-        {
-            // This is the end : no more value
-            throw new NoSuchElementException( "No more tuples present" );
-        }
-
-        if ( parentPos.pos == 0 && parentPos.dupPos == 0 )
-        {
-            // End of the leaf. We have to go back into the stack up to the
-            // parent, and down to the leaf
-            parentPos = findPreviousParentPos();
-
-            // we also need to check for the type of page cause
-            // findPrevParentPos will never return a null ParentPos
-            if ( parentPos.page == null || ( parentPos.page instanceof Node ) )
-            {
-                // This is the end : no more value
-                throw new NoSuchElementException( "No more tuples present" );
-            }
-        }
-
-        Leaf<K, V> leaf = ( Leaf<K, V> ) ( parentPos.page );
-
-        if ( allowDuplicates )
-        {
-            boolean posDecremented = false;
-            
-            // can happen if prev() was called after next()
-            if ( parentPos.pos == parentPos.page.getNbElems() )
-            {
-                parentPos.pos--;
-                posDecremented = true;
-            }
-
-            MultipleMemoryHolder<K,V> mvHolder = ( MultipleMemoryHolder<K,V> ) leaf.values[parentPos.pos];
-
-            boolean prevHasSubtree = false;
-            // if the current key has only one value then advance to previous position
-            if( mvHolder.isSingleValue() )
-            {
-                if( !posDecremented )
-                {
-                    parentPos.pos--;
-                    mvHolder = ( MultipleMemoryHolder<K,V> ) leaf.values[parentPos.pos];
-                    posDecremented = true;
-                }
-                
-                if( mvHolder.isSingleValue() )
-                {
-                    tuple.setKey( leaf.keys[parentPos.pos] );
-                    tuple.setValue( mvHolder.getValue( btree ) );
-                }
-                else
-                {
-                    prevHasSubtree = true;
-                }
-            }
-            else
-            {
-                prevHasSubtree = true;
-            }
-            
-            if( prevHasSubtree )
-            {
-                setDupsContainer( parentPos, btree );
-                
-                if ( parentPos.dupPos == parentPos.dupsContainer.getNbElems() )
-                {
-                    parentPos.dupPos--;
-                }
-                else if ( parentPos.dupPos == 0 )
-                {
-                    changePrevDupsContainer( parentPos, btree );
-                    parentPos.pos--;
-                    
-                    if( parentPos.dupsContainer != null )
-                    {
-                        parentPos.dupPos--;
-                    }
-                }
-                else
-                {
-                    parentPos.dupPos--;
-                }
-                
-                tuple.setKey( leaf.keys[parentPos.pos] );
-                if( parentPos.dupsContainer != null )
-                {
-                    tuple.setValue( parentPos.dupsContainer.rootPage.getKey( parentPos.dupPos ) );
-                }
-                else
-                {
-                    tuple.setValue( leaf.values[parentPos.pos].getValue( btree ) );
-                }
-            }
-        }
-        else
-        {
-            parentPos.pos--;
-            tuple.setKey( leaf.keys[parentPos.pos] );
-            tuple.setValue( leaf.values[parentPos.pos].getValue( btree ) );
-        }
-
-        return tuple;
-    }
+    Tuple<K, V> prev() throws EndOfFileExceededException, IOException;
 
 
     /**
@@ -398,37 +64,7 @@ public class Cursor<K, V>
      * @throws IOException 
      * @throws EndOfFileExceededException 
      */
-    public boolean hasNext() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> parentPos = stack.peek();
-
-        if ( parentPos.page == null )
-        {
-            return false;
-        }
-
-        for ( ParentPos<K, V> p : stack )
-        {
-            if ( allowDuplicates && ( p.page instanceof Leaf ) )
-            {
-                if( ( p.dupsContainer == null ) && ( p.pos != p.page.getNbElems() ) )
-                {
-                    return true;
-                }
-                else if ( ( p.dupsContainer != null ) && ( p.dupPos != p.dupsContainer.getNbElems() )
-                            && ( p.pos != p.page.getNbElems() ) )
-                {
-                    return true;
-                }
-            }
-            else if ( p.pos != p.page.getNbElems() )
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
+    boolean hasNext() throws EndOfFileExceededException, IOException;
 
 
     /**
@@ -437,64 +73,25 @@ public class Cursor<K, V>
      * @throws IOException 
      * @throws EndOfFileExceededException 
      */
-    public boolean hasPrev() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> parentPos = stack.peek();
-
-        if ( parentPos.page == null )
-        {
-            return false;
-        }
-
-        for ( ParentPos<K, V> p : stack )
-        {
-            if ( allowDuplicates && ( p.page instanceof Leaf ) )
-            {
-                if( ( p.dupsContainer == null ) && ( p.pos != 0 ) )
-                {
-                    return true;
-                }
-                else if ( ( p.dupsContainer != null ) && 
-                        ( ( p.dupPos != 0 ) || ( p.pos != 0 ) ) )
-                {
-                    return true;
-                }
-            }
-            else if ( p.pos != 0 )
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
+    boolean hasPrev() throws EndOfFileExceededException, IOException;
 
 
     /**
      * Closes the cursor, thus releases the associated transaction
      */
-    public void close()
-    {
-        transaction.close();
-    }
+    void close();
 
 
     /**
      * @return The revision this cursor is based on
      */
-    public long getRevision()
-    {
-        return transaction.getRevision();
-    }
+    long getRevision();
 
 
     /**
      * @return The creation date for this cursor
      */
-    public long getCreationDate()
-    {
-        return transaction.getCreationDate();
-    }
+    long getCreationDate();
 
 
     /**
@@ -514,41 +111,7 @@ public class Cursor<K, V>
      * @throws EndOfFileExceededException
      * @throws IOException
      */
-    public void moveToNextNonDuplicateKey() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> parentPos = stack.getFirst();
-
-        if ( parentPos.page == null )
-        {
-            return;
-        }
-
-        if ( parentPos.pos == ( parentPos.page.getNbElems() - 1 ) )
-        {
-            // End of the leaf. We have to go back into the stack up to the
-            // parent, and down to the leaf
-            // increment the position cause findNextParentPos checks "parentPos.pos == parentPos.page.getNbElems()"
-            parentPos.pos++;
-            ParentPos<K, V> nextPos = findNextParentPos();
-
-            // if the returned value is a Node OR if it is same as the parentPos
-            // that means cursor is already at the last position
-            // call afterLast() to restore the stack with the path to the right most element
-            if ( ( nextPos.page instanceof Node ) || ( nextPos == parentPos ) )
-            {
-                afterLast();
-            }
-            else
-            {
-                parentPos = nextPos;
-            }
-        }
-        else
-        {
-            parentPos.pos++;
-            changeNextDupsContainer( parentPos, btree );
-        }
-    }
+    void moveToNextNonDuplicateKey() throws EndOfFileExceededException, IOException;
 
 
     /**
@@ -567,35 +130,7 @@ public class Cursor<K, V>
      * @throws EndOfFileExceededException
      * @throws IOException
      */
-    public void moveToPrevNonDuplicateKey() throws EndOfFileExceededException, IOException
-    {
-        ParentPos<K, V> parentPos = stack.peek();
-
-        if ( parentPos.page == null )
-        {
-            // This is the end : no more value
-            return;
-        }
-
-        if ( parentPos.pos == 0 )
-        {
-            // End of the leaf. We have to go back into the stack up to the
-            // parent, and down to the leaf
-            parentPos = findPreviousParentPos();
-
-            // if the returned value is a Node that means cursor is already at the first position
-            // call beforeFirst() to restore the stack to the initial state
-            if ( parentPos.page instanceof Node )
-            {
-                beforeFirst();
-            }
-        }
-        else
-        {
-            changePrevDupsContainer( parentPos, btree );
-            parentPos.pos--;
-        }
-    }
+    void moveToPrevNonDuplicateKey() throws EndOfFileExceededException, IOException;
 
 
     /**
@@ -607,10 +142,7 @@ public class Cursor<K, V>
      *  If the cursor was created using browseFrom(K), then calling beforeFirst() will reset the position
      *  to the just before the position where K is present.
      */
-    public void beforeFirst() throws IOException
-    {
-        cloneStack( _initialStack, stack );
-    }
+    void beforeFirst() throws IOException;
 
 
     /**
@@ -618,31 +150,5 @@ public class Cursor<K, V>
      * 
      * @throws IOException
      */
-    public void afterLast() throws IOException
-    {
-        stack.clear();
-        stack = BTreeFactory.getPathToRightMostLeaf( btree );
-    }
-
-
-    /**
-     * clones the original stack of ParentPos objects
-     * 
-     * @param original the original stack
-     * @param clone the stack where the cloned ParentPos objects to be copied
-     */
-    private void cloneStack( LinkedList<ParentPos<K, V>> original, LinkedList<ParentPos<K, V>> clone )
-    {
-        clone.clear();
-
-        // preserve the first position
-        for ( ParentPos<K, V> o : original )
-        {
-            ParentPos<K, V> tmp = new ParentPos<K, V>( o.page, o.pos );
-            tmp.dupPos = o.dupPos;
-            tmp.dupsContainer = o.dupsContainer;
-            clone.add( tmp );
-        }
-    }
-
+    public void afterLast() throws IOException;
 }

Modified: directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Result.java
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Result.java?rev=1527458&r1=1527457&r2=1527458&view=diff
==============================================================================
--- directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Result.java (original)
+++ directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Result.java Mon Sep 30 06:32:25 2013
@@ -31,17 +31,17 @@ import java.util.List;
 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-/* No qualifier */interface Result<K, V>
+public interface Result<P>
 {
     /**
      * @return the copiedPage
      */
-    /* No qualifier */List<Page<K, V>> getCopiedPages();
+    /* No qualifier */List<P> getCopiedPages();
 
 
     /**
      * Add a new copied page
      * @param copiedPage the added page
      */
-    /* No qualifier */void addCopiedPage( Page<K, V> copiedPage );
+    /* No qualifier */void addCopiedPage( P copiedPage );
 }

Modified: directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Tuple.java
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Tuple.java?rev=1527458&r1=1527457&r2=1527458&view=diff
==============================================================================
--- directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Tuple.java (original)
+++ directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/Tuple.java Mon Sep 30 06:32:25 2013
@@ -70,7 +70,7 @@ public class Tuple<K, V>
     /**
      * @param key the key to set
      */
-    /* No qualifier*/void setKey( K key )
+    public void setKey( K key )
     {
         this.key = key;
     }
@@ -88,7 +88,7 @@ public class Tuple<K, V>
     /**
      * @param value the value to set
      */
-    /* No qualifier*/void setValue( V value )
+    public void setValue( V value )
     {
         this.value = value;
     }

Added: directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractBorrowedFromSiblingResult.java
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractBorrowedFromSiblingResult.java?rev=1527458&view=auto
==============================================================================
--- directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractBorrowedFromSiblingResult.java (added)
+++ directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractBorrowedFromSiblingResult.java Mon Sep 30 06:32:25 2013
@@ -0,0 +1,129 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.mavibot.btree.managed;
+
+
+import java.util.List;
+
+import org.apache.directory.mavibot.btree.Tuple;
+
+
+/**
+ * The result of a delete operation, when the child has not been merged, and when
+ * we have borrowed an element from the left sibling. It contains the
+ * reference to the modified page, and the removed element.
+ * 
+ * @param <K> The type for the Key
+ * @param <V> The type for the stored value
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+/* No qualifier */abstract class AbstractBorrowedFromSiblingResult<K, V> extends AbstractDeleteResult<K, V> implements
+    BorrowedFromSiblingResult<K, V>
+{
+    /** The modified sibling reference */
+    private Page<K, V> modifiedSibling;
+
+    /** Tells if the sibling is the left or right one */
+    protected SiblingPosition position;
+
+    /** The two possible position for the sibling */
+    protected enum SiblingPosition
+    {
+        LEFT,
+        RIGHT
+    }
+
+
+    /**
+     * The default constructor for RemoveResult.
+     * 
+     * @param modifiedPage The modified page
+     * @param modifiedSibling The modified sibling
+     * @param removedElement The removed element (can be null if the key wasn't present in the tree)
+     */
+    /* No qualifier */AbstractBorrowedFromSiblingResult( Page<K, V> modifiedPage, Page<K, V> modifiedSibling,
+        Tuple<K, V> removedElement, SiblingPosition position )
+    {
+        super( modifiedPage, removedElement );
+        this.modifiedSibling = modifiedSibling;
+        this.position = position;
+    }
+
+
+    /**
+     * A constructor for RemoveResult with a list of copied pages.
+     * 
+     * @param copiedPages the list of copied pages
+     * @param modifiedPage The modified page
+     * @param modifiedSibling The modified sibling
+     * @param removedElement The removed element (can be null if the key wasn't present in the tree)
+     */
+    /* No qualifier */AbstractBorrowedFromSiblingResult( List<Page<K, V>> copiedPages, Page<K, V> modifiedPage,
+        Page<K, V> modifiedSibling,
+        Tuple<K, V> removedElement, SiblingPosition position )
+    {
+        super( copiedPages, modifiedPage, removedElement );
+        this.modifiedSibling = modifiedSibling;
+        this.position = position;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public Page<K, V> getModifiedSibling()
+    {
+        return modifiedSibling;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isFromLeft()
+    {
+        return position == SiblingPosition.LEFT;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isFromRight()
+    {
+        return position == SiblingPosition.RIGHT;
+    }
+
+
+    /**
+     * @see Object#toString()
+     */
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append( "\n    removed element : " ).append( getRemovedElement() );
+        sb.append( "\n    modifiedPage : " ).append( getModifiedPage() );
+        sb.append( "\n    modifiedSibling : " ).append( getModifiedSibling() );
+
+        return sb.toString();
+    }
+}

Added: directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractDeleteResult.java
URL: http://svn.apache.org/viewvc/directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractDeleteResult.java?rev=1527458&view=auto
==============================================================================
--- directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractDeleteResult.java (added)
+++ directory/mavibot/trunk/mavibot/src/main/java/org/apache/directory/mavibot/btree/managed/AbstractDeleteResult.java Mon Sep 30 06:32:25 2013
@@ -0,0 +1,100 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.mavibot.btree.managed;
+
+
+import java.util.List;
+
+import org.apache.directory.mavibot.btree.Tuple;
+
+
+/**
+ * An abstract class to gather common elements of the DeleteResult
+ * 
+ * @param <K> The type for the Key
+ * @param <V> The type for the stored value
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+/* No qualifier */abstract class AbstractDeleteResult<K, V> extends AbstractResult<K, V> implements DeleteResult<K, V>
+{
+    /** The modified page reference */
+    private Page<K, V> modifiedPage;
+
+    /** The removed element if the key was found in the tree*/
+    private Tuple<K, V> removedElement;
+
+
+    /**
+     * The default constructor for AbstractDeleteResult.
+     * 
+     * @param modifiedPage The modified page
+     * @param removedElement The removed element (can be null if the key wasn't present in the tree)
+     */
+    /* No qualifier */AbstractDeleteResult( Page<K, V> modifiedPage, Tuple<K, V> removedElement )
+    {
+        super();
+        this.modifiedPage = modifiedPage;
+        this.removedElement = removedElement;
+    }
+
+
+    /**
+     * The default constructor for AbstractDeleteResult.
+     * 
+     * @param copiedPages the list of copied pages
+     * @param modifiedPage The modified page
+     * @param removedElement The removed element (can be null if the key wasn't present in the tree)
+     */
+    /* No qualifier */AbstractDeleteResult( List<Page<K, V>> copiedPages, Page<K, V> modifiedPage,
+        Tuple<K, V> removedElement )
+    {
+        super( copiedPages );
+        this.modifiedPage = modifiedPage;
+        this.removedElement = removedElement;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public Page<K, V> getModifiedPage()
+    {
+        return modifiedPage;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public Tuple<K, V> getRemovedElement()
+    {
+        return removedElement;
+    }
+
+
+    /**
+     * @param modifiedPage the modifiedPage to set
+     */
+    /* No qualifier */void setModifiedPage( Page<K, V> modifiedPage )
+    {
+        this.modifiedPage = modifiedPage;
+    }
+}