activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From chir...@apache.org
Subject svn commit: r694765 - in /activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index: BTreeIndex.java BTreeNode.java
Date Fri, 12 Sep 2008 18:23:30 GMT
Author: chirino
Date: Fri Sep 12 11:23:29 2008
New Revision: 694765

URL: http://svn.apache.org/viewvc?rev=694765&view=rev
Log:
Exposing a getLast() and getFirst() method on the index.


Modified:
    activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeIndex.java
    activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeNode.java

Modified: activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeIndex.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeIndex.java?rev=694765&r1=694764&r2=694765&view=diff
==============================================================================
--- activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeIndex.java (original)
+++ activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeIndex.java Fri Sep
12 11:23:29 2008
@@ -223,10 +223,14 @@
         getRoot(tx).visit(tx, visitor);
     }
 
-    synchronized Value getFirst(Transaction tx) throws IOException {
+    synchronized public Map.Entry<Key,Value> getFirst(Transaction tx) throws IOException
{
         return getRoot(tx).getFirst(tx);
     }
 
+    synchronized public Map.Entry<Key,Value> getLast(Transaction tx) throws IOException
{
+        return getRoot(tx).getLast(tx);
+    }
+
     ///////////////////////////////////////////////////////////////////
     // Internal implementation methods
     ///////////////////////////////////////////////////////////////////

Modified: activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeNode.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeNode.java?rev=694765&r1=694764&r2=694765&view=diff
==============================================================================
--- activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeNode.java (original)
+++ activemq/sandbox/kahadb/src/main/java/org/apache/kahadb/index/BTreeNode.java Fri Sep 12
11:23:29 2008
@@ -55,7 +55,31 @@
     // The next leaf node after this one.  Used for fast iteration of the entries.
     private long next = -1;
     
+    private final class KeyValueEntry implements Map.Entry<Key, Value> {
+        private final Key key;
+        private final Value value;
+
+        public KeyValueEntry(Key key, Value value) {
+            this.key = key;
+            this.value = value;
+        }
+
+        public Key getKey() {
+            return key;
+        }
+
+        public Value getValue() {
+            return value;
+        }
+
+        public Value setValue(Value value) {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
     private final class BTreeIterator implements Iterator<Map.Entry<Key, Value>>
{
+        
         private final Transaction tx;
         BTreeNode<Key,Value> current;
         int nextIndex;
@@ -83,20 +107,7 @@
                             break;
                         }
                     }  else {
-                        nextEntry = new Map.Entry<Key, Value>() {
-                            private final Key key = current.keys[nextIndex];
-                            private final Value value = current.values[nextIndex];
-                            
-                            public Key getKey() {
-                                return key;
-                            }
-                            public Value getValue() {
-                                return value;
-                            }
-                            public Value setValue(Value value) {
-                                throw new UnsupportedOperationException();
-                            }
-                        };
+                        nextEntry = new KeyValueEntry(current.keys[nextIndex], current.values[nextIndex]);
                         nextIndex++;
                         break;
                     }
@@ -524,13 +535,26 @@
         }
     }
     
-    public Value getFirst(Transaction tx) throws IOException {
+    public Map.Entry<Key,Value> getFirst(Transaction tx) throws IOException {
         BTreeNode<Key, Value> node = this;
         while( node .isBranch() ) {
             node = node.getChild(tx, 0);
         }
         if( node.values.length>0 ) {
-            return node.values[0];
+            return new KeyValueEntry(keys[0], values[0]);
+        } else {
+            return null;
+        }
+    }
+
+    public Map.Entry<Key,Value> getLast(Transaction tx) throws IOException {
+        BTreeNode<Key, Value> node = this;
+        while( node.isBranch() ) {
+            node = node.getChild(tx, children.length-1);
+        }
+        if( node.values.length>0 ) {
+            int idx = values.length-1;
+            return new KeyValueEntry(keys[idx], values[idx]);
         } else {
             return null;
         }



Mime
View raw message