pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / contrib / analyzers / common / src / java / org / apache / lucene / analysis / util / OpenStringBuilder.java
diff --git a/lucene-java-3.5.0/lucene/contrib/analyzers/common/src/java/org/apache/lucene/analysis/util/OpenStringBuilder.java b/lucene-java-3.5.0/lucene/contrib/analyzers/common/src/java/org/apache/lucene/analysis/util/OpenStringBuilder.java
new file mode 100644 (file)
index 0000000..18603cf
--- /dev/null
@@ -0,0 +1,145 @@
+package org.apache.lucene.analysis.util;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A StringBuilder that allows one to access the array.
+ */
+public class OpenStringBuilder implements Appendable, CharSequence {
+  protected char[] buf;
+  protected int len;
+
+  public OpenStringBuilder() {
+    this(32);
+  }
+
+  public OpenStringBuilder(int size) {
+    buf = new char[size];
+  }
+
+  public OpenStringBuilder(char[] arr, int len) {
+    set(arr, len);
+  }
+
+  public void setLength(int len) { this.len = len; }
+
+  public void set(char[] arr, int end) {
+    this.buf = arr;
+    this.len = end;
+  }
+
+  public char[] getArray() { return buf; }
+  public int size() { return len; }
+  public int length() { return len; }
+  public int capacity() { return buf.length; }
+
+  public Appendable append(CharSequence csq) {
+    return append(csq, 0, csq.length());
+  }
+
+  public Appendable append(CharSequence csq, int start, int end) {
+    reserve(end-start);
+    for (int i=start; i<end; i++) {
+      unsafeWrite(csq.charAt(i));
+    }
+    return this;
+  }
+
+  public Appendable append(char c) {
+    write(c);
+    return this;
+  }
+
+  public char charAt(int index) {
+    return buf[index];
+  }
+
+  public void setCharAt(int index, char ch) {
+    buf[index] = ch;    
+  }
+
+  public CharSequence subSequence(int start, int end) {
+    throw new UnsupportedOperationException(); // todo
+  }
+
+  public void unsafeWrite(char b) {
+    buf[len++] = b;
+  }
+
+  public void unsafeWrite(int b) { unsafeWrite((char)b); }
+
+  public void unsafeWrite(char b[], int off, int len) {
+    System.arraycopy(b, off, buf, this.len, len);
+    this.len += len;
+  }
+
+  protected void resize(int len) {
+    char newbuf[] = new char[Math.max(buf.length << 1, len)];
+    System.arraycopy(buf, 0, newbuf, 0, size());
+    buf = newbuf;
+  }
+
+  public void reserve(int num) {
+    if (len + num > buf.length) resize(len + num);
+  }
+
+  public void write(char b) {
+    if (len >= buf.length) {
+      resize(len +1);
+    }
+    unsafeWrite(b);
+  }
+
+  public void write(int b) { write((char)b); }
+
+  public final void write(char[] b) {
+    write(b,0,b.length);
+  }
+
+  public void write(char b[], int off, int len) {
+    reserve(len);
+    unsafeWrite(b, off, len);
+  }
+
+  public final void write(OpenStringBuilder arr) {
+    write(arr.buf, 0, len);
+  }
+
+  public void write(String s) {
+    reserve(s.length());
+    s.getChars(0,s.length(),buf, len);
+    len +=s.length();
+  }
+
+  public void flush() {
+  }
+
+  public final void reset() {
+    len =0;
+  }
+
+  public char[] toCharArray() {
+    char newbuf[] = new char[size()];
+    System.arraycopy(buf, 0, newbuf, 0, size());
+    return newbuf;
+  }
+
+  public String toString() {
+    return new String(buf, 0, size());
+  }
+}