diff --git a/lucene/src/java/org/apache/lucene/util/BytesRefHash.java b/lucene/src/java/org/apache/lucene/util/BytesRefHash.java index a34ad775178..0976c8c61a0 100644 --- a/lucene/src/java/org/apache/lucene/util/BytesRefHash.java +++ b/lucene/src/java/org/apache/lucene/util/BytesRefHash.java @@ -89,21 +89,21 @@ public final class BytesRefHash { } /** - * Returns the {@link BytesRef} value for the given ord. + * Populates and returns a {@link BytesRef} with the bytes for the given ord. *

* Note: the given ord must be a positive integer less that the current size ( * {@link #size()}) *

+ * + * @param ord the ord + * @param ref the {@link BytesRef} to populate * - * @param ord - * the ord - * - * @return a BytesRef instance for the given ord + * @return the given BytesRef instance populated with the bytes for the given ord */ - public BytesRef get(int ord) { + public BytesRef get(int ord, BytesRef ref) { assert bytesStart != null : "bytesStart is null - not initialized"; assert ord < bytesStart.length: "ord exceeeds byteStart len: " + bytesStart.length; - return pool.setBytesRef(scratch1, bytesStart[ord]); + return pool.setBytesRef(ref, bytesStart[ord]); } /** diff --git a/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java b/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java index 48a6e99cdd1..c87f8869543 100644 --- a/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java +++ b/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java @@ -95,6 +95,7 @@ public class TestBytesRefHash extends LuceneTestCase { @Test public void testGet() { BytesRef ref = new BytesRef(); + BytesRef scratch = new BytesRef(); for (int j = 0; j < 2 * RANDOM_MULTIPLIER; j++) { Map strings = new HashMap(); for (int i = 0; i < 797; i++) { @@ -116,7 +117,7 @@ public class TestBytesRefHash extends LuceneTestCase { } for (Entry entry : strings.entrySet()) { ref.copy(entry.getKey()); - assertEquals(ref, hash.get(entry.getValue().intValue())); + assertEquals(ref, hash.get(entry.getValue().intValue(), scratch)); } hash.clear(); assertEquals(0, hash.size()); @@ -176,9 +177,10 @@ public class TestBytesRefHash extends LuceneTestCase { int[] sort = hash.sort(BytesRef.getUTF8SortedAsUTF16Comparator()); assertTrue(strings.size() < sort.length); int i = 0; + BytesRef scratch = new BytesRef(); for (String string : strings) { ref.copy(string); - assertEquals(ref, hash.get(sort[i++])); + assertEquals(ref, hash.get(sort[i++], scratch)); } hash.clear(); assertEquals(0, hash.size()); @@ -195,6 +197,7 @@ public class TestBytesRefHash extends LuceneTestCase { @Test public void testAdd() { BytesRef ref = new BytesRef(); + BytesRef scratch = new BytesRef(); for (int j = 0; j < 2 * RANDOM_MULTIPLIER; j++) { Set strings = new HashSet(); for (int i = 0; i < 797; i++) { @@ -213,7 +216,7 @@ public class TestBytesRefHash extends LuceneTestCase { } else { assertFalse(strings.add(str)); assertTrue((-key)-1 < count); - assertEquals(str, hash.get((-key)-1).utf8ToString()); + assertEquals(str, hash.get((-key)-1, scratch).utf8ToString()); assertEquals(count, hash.size()); } } @@ -253,6 +256,7 @@ public class TestBytesRefHash extends LuceneTestCase { @Test public void testAddByPoolOffset() { BytesRef ref = new BytesRef(); + BytesRef scratch = new BytesRef(); BytesRefHash offsetHash = newHash(pool); for (int j = 0; j < 2 * RANDOM_MULTIPLIER; j++) { Set strings = new HashSet(); @@ -275,11 +279,11 @@ public class TestBytesRefHash extends LuceneTestCase { } else { assertFalse(strings.add(str)); assertTrue((-key)-1 < count); - assertEquals(str, hash.get((-key)-1).utf8ToString()); + assertEquals(str, hash.get((-key)-1, scratch).utf8ToString()); assertEquals(count, hash.size()); int offsetKey = offsetHash.addByPoolOffset(hash.byteStart((-key)-1)); assertTrue((-offsetKey)-1 < count); - assertEquals(str, hash.get((-offsetKey)-1).utf8ToString()); + assertEquals(str, hash.get((-offsetKey)-1, scratch).utf8ToString()); assertEquals(count, hash.size()); } } @@ -288,7 +292,7 @@ public class TestBytesRefHash extends LuceneTestCase { for (String string : strings) { ref.copy(string); int key = hash.add(ref); - BytesRef bytesRef = offsetHash.get((-key)-1); + BytesRef bytesRef = offsetHash.get((-key)-1, scratch); assertEquals(ref, bytesRef); } @@ -303,11 +307,12 @@ public class TestBytesRefHash extends LuceneTestCase { private void assertAllIn(Set strings, BytesRefHash hash) { BytesRef ref = new BytesRef(); + BytesRef scratch = new BytesRef(); int count = hash.size(); for (String string : strings) { ref.copy(string); int key = hash.add(ref); // add again to check duplicates - assertEquals(string, hash.get((-key)-1).utf8ToString()); + assertEquals(string, hash.get((-key)-1, scratch).utf8ToString()); assertEquals(count, hash.size()); assertTrue("key: " + key + " count: " + count + " string: " + string, key < count);