[Mulgara-svn] r859 - projects/xa2/object-pool/src
andrae at mulgara.org
andrae at mulgara.org
Mon Apr 28 08:58:13 UTC 2008
Author: andrae
Date: 2008-04-28 01:58:12 -0700 (Mon, 28 Apr 2008)
New Revision: 859
Modified:
projects/xa2/object-pool/src/CompBlockTrie.java
projects/xa2/object-pool/src/CompBlockTrieTest.java
projects/xa2/object-pool/src/CompMemTrie.java
projects/xa2/object-pool/src/CompMemTrieTest.java
Log:
Profiling suggests that the use of exceptions for flow control was a really bad idea.
69.9% 0 + 8033 java.lang.Throwable.fillInStackTrace
Altered insert to return a boolean.
Modified: projects/xa2/object-pool/src/CompBlockTrie.java
===================================================================
--- projects/xa2/object-pool/src/CompBlockTrie.java 2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompBlockTrie.java 2008-04-28 08:58:12 UTC (rev 859)
@@ -52,7 +52,7 @@
this.space = 0; // If this gets modified it will be recalculated automaticly then.
}
- public void insert(byte[] key, long value) throws CompMemTrie.InsufficientSpace {
+ public boolean insert(byte[] key, long value) {
// Space was calculated on the basis of worst-case - if we were worst case we have now filled the
// trie-block, but if we haven't we should recalculate the space available.
if (space == 0) {
@@ -61,12 +61,14 @@
if (space < 0) {
throw new IllegalStateException("Overfilled CompBlockTrie");
} else if (space == 0) {
- throw new CompMemTrie.InsufficientSpace("Trie Node is filled");
+ return false;
}
}
super.insert(key, value);
space--;
+
+ return true;
}
public void write(ByteBuffer index, FileChannel data) throws InsufficientSpace, IOException {
Modified: projects/xa2/object-pool/src/CompBlockTrieTest.java
===================================================================
--- projects/xa2/object-pool/src/CompBlockTrieTest.java 2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompBlockTrieTest.java 2008-04-28 08:58:12 UTC (rev 859)
@@ -63,17 +63,16 @@
for (int i = 0; i < limit; i++) {
// The use of the double loop means we pay the cost of setting up the exception handler only once per
// block, not once per entry.
- try {
- if (name == null) {
- break;
- }
- trie.insert(name.getBytes(), n);
+ if (name == null) {
+ break;
+ }
+ if (trie.insert(name.getBytes(), n)) {
// Note: exception thrown here if trie is full. So name will remain valid when we reenter loop with
// a new trie.
namesMap.put(name.getBytes(), n);
name = names.readLine();
n++;
- } catch (CompMemTrie.InsufficientSpace ec) {
+ } else {
trie.write((ByteBuffer)indexBuffer.clear(), dataFile);
indexFile.write((ByteBuffer)indexBuffer.flip());
tries.add(trie);
Modified: projects/xa2/object-pool/src/CompMemTrie.java
===================================================================
--- projects/xa2/object-pool/src/CompMemTrie.java 2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompMemTrie.java 2008-04-28 08:58:12 UTC (rev 859)
@@ -35,7 +35,7 @@
this.root = null;
}
- public void insert(byte[] key, long value) throws InsufficientSpace {
+ public boolean insert(byte[] key, long value) {
if (root == null) {
root = new TrieLeaf(key, value);
} else {
@@ -45,6 +45,8 @@
root = new TrieBranch(root, key, value);
}
}
+
+ return true;
}
public long lookup(byte[] key) throws NotFound {
Modified: projects/xa2/object-pool/src/CompMemTrieTest.java
===================================================================
--- projects/xa2/object-pool/src/CompMemTrieTest.java 2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompMemTrieTest.java 2008-04-28 08:58:12 UTC (rev 859)
@@ -48,7 +48,7 @@
long _endInsert = System.currentTimeMillis();
names.close();
- System.out.println("Checking lines from " + file);
+ System.out.println("Checking " + n + " lines from " + file);
long _startLookup = System.currentTimeMillis();
for (byte[] key : namesMap.keySet()) {
if (namesTrie.lookup(key) != namesMap.get(key)) {
More information about the Mulgara-svn
mailing list