[Mulgara-svn] r771 - projects/xa2/object-pool/src
andrae at mulgara.org
andrae at mulgara.org
Fri Apr 11 04:52:21 UTC 2008
Author: andrae
Date: 2008-04-10 21:52:20 -0700 (Thu, 10 Apr 2008)
New Revision: 771
Modified:
projects/xa2/object-pool/src/MemoryTrie.java
projects/xa2/object-pool/src/MemoryTrieTest.java
Log:
Converted Trie from String->long to byte[]->long.
Modified: projects/xa2/object-pool/src/MemoryTrie.java
===================================================================
--- projects/xa2/object-pool/src/MemoryTrie.java 2008-04-11 03:10:23 UTC (rev 770)
+++ projects/xa2/object-pool/src/MemoryTrie.java 2008-04-11 04:52:20 UTC (rev 771)
@@ -21,7 +21,7 @@
this.root = null;
}
- public void insert(String key, long value) {
+ public void insert(byte[] key, long value) {
if (root == null) {
root = new TrieBranch(key, value);
} else {
@@ -33,7 +33,7 @@
}
}
- public long lookup(String key) throws NotFound {
+ public long lookup(byte[] key) throws NotFound {
if (root == null) {
throw new NotFound();
}
@@ -71,15 +71,15 @@
private Map<Byte, TrieNode> children;
private TrieLeaf term;
- public TrieBranch(String str, long value) {
+ public TrieBranch(byte[] key, long value) {
super();
this.children = new HashMap<Byte, TrieNode>();
- this.term = new TrieLeaf(str, value);
+ this.term = new TrieLeaf(key, value);
this.offset = term.key.length;
this.least = this.term;
}
- public TrieBranch(TrieBranch oldRoot, String key, long value) {
+ public TrieBranch(TrieBranch oldRoot, byte[] key, long value) {
this(oldRoot, new TrieLeaf(key, value));
}
@@ -129,12 +129,12 @@
}
}
- public void insert(String str, long value) throws InsertAbove {
- insert(new TrieLeaf(str, value), 0);
+ public void insert(byte[] key, long value) throws InsertAbove {
+ insert(new TrieLeaf(key, value), 0);
}
- public long lookup(String str) throws NotFound {
- return lookup(str.getBytes(), 0);
+ public long lookup(byte[] key) throws NotFound {
+ return lookup(key, 0);
}
protected void insert(TrieLeaf node, int parentLcp) throws InsertAbove {
@@ -201,9 +201,10 @@
final byte[] key;
final long value;
- public TrieLeaf(String key, long value) {
+ public TrieLeaf(byte[] key, long value) {
super();
- this.key = key.getBytes();
+ this.key = new byte[key.length];
+ System.arraycopy(key, 0, this.key, 0, key.length);
this.value = value;
this.least = this;
}
Modified: projects/xa2/object-pool/src/MemoryTrieTest.java
===================================================================
--- projects/xa2/object-pool/src/MemoryTrieTest.java 2008-04-11 03:10:23 UTC (rev 770)
+++ projects/xa2/object-pool/src/MemoryTrieTest.java 2008-04-11 04:52:20 UTC (rev 771)
@@ -22,7 +22,7 @@
}
public static void testWithFile(File file) throws Exception {
- Map<String, Long> namesMap = new HashMap<String, Long>();
+ Map<byte[], Long> namesMap = new HashMap<byte[], Long>();
MemoryTrie namesTrie = new MemoryTrie();
System.out.println("Inserting lines from " + file);
@@ -30,15 +30,15 @@
long n = 0;
String name = names.readLine();
while (name != null) {
- namesMap.put(name, n);
- namesTrie.insert(name, n);
+ namesMap.put(name.getBytes(), n);
+ namesTrie.insert(name.getBytes(), n);
name = names.readLine();
n++;
}
names.close();
System.out.println("Checking lines from " + file);
- for (String key : namesMap.keySet()) {
+ for (byte[] key : namesMap.keySet()) {
if (namesTrie.lookup(key) != namesMap.get(key)) {
throw new IllegalStateException("Trie doesn't match Map");
}
@@ -46,4 +46,47 @@
System.out.println("Test Succeeded with " + file);
}
+/*
+ public static void testWithRandomFile(File file) throws Exception {
+ Map<byte[], Long> namesMap = new HashMap<byte[], Long[]>();
+ MemoryTrie namesTrie = new MemoryTrie();
+
+ System.out.println("Inserting random bytes from " + file);
+ FileChannel chan = new FileInputStream(file).getChannel();
+ ByteBuffer buffer = ByteBuffer.allocate(134*1024).clear().limit(0);
+ // Set limit to 0 so initial compact works correctly.
+
+ long n = 0;
+ byte[] key;
+ while (n < 5000) {
+ if (buffer.hasRemaining() < 67*1024 && chan.read(buffer.compact()) == -1) {
+ break;
+ }
+ buffer.flip();
+
+ key = new byte[buffer.getShort()];
+ buffer.get(key);
+ namesMap.put(key, n++);
+ namesTrie.insert(key, n);
+
+ for (i = 0; i < 10; i++) {
+ key = new byte[buffer.getByte()];
+ buffer.get(key);
+ namesMap.put(key, n++);
+ namesTrie.insert(key, n);
+ }
+ }
+ chan.close();
+
+ System.out.println("Checking random bytes from " + file);
+ for (byte[] key : namesMap.keySet()) {
+ if (namesTrie.lookup(key) != namesMap.get(key)) {
+ throw new IllegalStateException("Trie doesn't match Map");
+ }
+ }
+
+ System.out.println("Test Succeeded with " + file);
+ }
+ */
+
}
More information about the Mulgara-svn
mailing list