lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sim...@apache.org
Subject svn commit: r1196228 - in /lucene/dev/trunk/lucene: CHANGES.txt src/java/org/apache/lucene/util/CharsRef.java src/test/org/apache/lucene/util/TestCharsRef.java
Date Tue, 01 Nov 2011 19:23:43 GMT
Author: simonw
Date: Tue Nov  1 19:23:43 2011
New Revision: 1196228

URL: http://svn.apache.org/viewvc?rev=1196228&view=rev
Log:
LUCENE-3548: fix broken CharsRef#append

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/CharsRef.java
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestCharsRef.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1196228&r1=1196227&r2=1196228&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Nov  1 19:23:43 2011
@@ -706,6 +706,9 @@ Bug fixes
 * LUCENE-3541: IndexInput's default copyBytes() implementation was not safe 
   across multiple threads, because all clones shared the same buffer.
   (Robert Muir)
+  
+* LUCENE-3548: Fix CharsRef#append to extend length of the existing char[]
+  and presever existing chars. (Simon Willnauer) 
 
 New Features
 

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/CharsRef.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/CharsRef.java?rev=1196228&r1=1196227&r2=1196228&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/CharsRef.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/CharsRef.java Tue Nov  1 19:23:43
2011
@@ -189,18 +189,22 @@ public final class CharsRef implements C
    * Copies the given array into this CharsRef starting at offset 0
    */
   public void copy(char[] otherChars, int otherOffset, int otherLength) {
+    grow(otherLength);
+    System.arraycopy(otherChars, otherOffset, this.chars, 0,
+        otherLength);
     this.offset = 0;
-    append(otherChars, otherOffset, otherLength);
+    this.length = otherLength;
   }
 
   /**
-   * Appends the given array to this CharsRef starting at the current offset
+   * Appends the given array to this CharsRef
    */
   public void append(char[] otherChars, int otherOffset, int otherLength) {
-    grow(this.offset + otherLength);
-    System.arraycopy(otherChars, otherOffset, this.chars, this.offset,
+    final int newLength = length + otherLength;
+    grow(this.offset + newLength);
+    System.arraycopy(otherChars, otherOffset, this.chars, this.offset+length,
         otherLength);
-    this.length = otherLength;
+    this.length += otherLength;
   }
 
   @Override

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestCharsRef.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestCharsRef.java?rev=1196228&r1=1196227&r2=1196228&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestCharsRef.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestCharsRef.java Tue Nov  1 19:23:43
2011
@@ -38,4 +38,33 @@ public class TestCharsRef extends Lucene
       assertEquals(utf8[i].utf8ToString(), utf16[i].toString());
     }
   }
+  
+  public void testAppend() {
+    CharsRef ref = new CharsRef();
+    StringBuilder builder = new StringBuilder();
+    int numStrings = atLeast(10);
+    for (int i = 0; i < numStrings; i++) {
+      char[] charArray = _TestUtil.randomRealisticUnicodeString(random, 1, 100).toCharArray();
+      int offset = random.nextInt(charArray.length);
+      int length = charArray.length - offset;
+      builder.append(charArray, offset, length);
+      ref.append(charArray, offset, length);  
+    }
+    
+    assertEquals(builder.toString(), ref.toString());
+  }
+  
+  public void testCopy() {
+    int numIters = atLeast(10);
+    for (int i = 0; i < numIters; i++) {
+      CharsRef ref = new CharsRef();
+      char[] charArray = _TestUtil.randomRealisticUnicodeString(random, 1, 100).toCharArray();
+      int offset = random.nextInt(charArray.length);
+      int length = charArray.length - offset;
+      String str = new String(charArray, offset, length);
+      ref.copy(charArray, offset, length);
+      assertEquals(str, ref.toString());  
+    }
+    
+  }
 }



Mime
View raw message