[Mulgara-svn] r629 - trunk/src/jar/store-stringpool-xa/java/org/mulgara/store/stringpool/xa

pag at mulgara.org pag at mulgara.org
Thu Jan 24 22:50:07 UTC 2008


Author: pag
Date: 2008-01-24 14:50:07 -0800 (Thu, 24 Jan 2008)
New Revision: 629

Modified:
   trunk/src/jar/store-stringpool-xa/java/org/mulgara/store/stringpool/xa/XAStringPoolImpl.java
Log:
Updated loadSPObject to avoid an unneccessary copy operation on data from a Block.  More of these may be possible

Modified: trunk/src/jar/store-stringpool-xa/java/org/mulgara/store/stringpool/xa/XAStringPoolImpl.java
===================================================================
--- trunk/src/jar/store-stringpool-xa/java/org/mulgara/store/stringpool/xa/XAStringPoolImpl.java	2008-01-24 22:47:57 UTC (rev 628)
+++ trunk/src/jar/store-stringpool-xa/java/org/mulgara/store/stringpool/xa/XAStringPoolImpl.java	2008-01-24 22:50:07 UTC (rev 629)
@@ -2238,15 +2238,14 @@
         }
 
         // Retrieve bytes from the AVLNode.
-        ByteBuffer data = ByteBuffer.allocate(dataSize);
-        data.limit(directDataSize);
-        avlNode.getBlock().get(
-            (AVLNode.HEADER_SIZE + IDX_DATA) * Constants.SIZEOF_LONG, data
-        );
+        ByteBuffer data = avlNode.getBlock().getSlice((AVLNode.HEADER_SIZE + IDX_DATA) * Constants.SIZEOF_LONG, directDataSize);
 
         // Retrieve the remaining bytes if any.
         if (dataSize > MAX_DIRECT_DATA_BYTES) {
-          data.limit(dataSize);
+          // need a bigger buffer
+          ByteBuffer newData = ByteBuffer.allocate(dataSize);
+          newData.put(data);
+          data = newData;
           retrieveRemainingBytes(objectPool, data, blockId);
         }
         data.rewind();




More information about the Mulgara-svn mailing list