home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- final class CompactCharArray implements Cloneable {
- public static final int UNICODECOUNT = 65536;
- private static final int DEBUGSHOWOVERLAPLIMIT = 100;
- private static final boolean DEBUGTRACE = false;
- private static final boolean DEBUGSMALL = false;
- private static final boolean DEBUGOVERLAP = false;
- private static final int DEBUGSMALLLIMIT = 30000;
- private static final int BLOCKSHIFT = 7;
- private static final int BLOCKCOUNT = 128;
- private static final int INDEXSHIFT = 9;
- private static final int INDEXCOUNT = 512;
- private static final int BLOCKMASK = 127;
- private char[] values;
- private short[] indices;
- private boolean isCompact;
-
- public CompactCharArray() {
- this('\u0000');
- }
-
- public CompactCharArray(char var1) {
- this.values = new char[65536];
- this.indices = new short[512];
-
- for(int var2 = 0; var2 < 65536; ++var2) {
- this.values[var2] = var1;
- }
-
- for(int var3 = 0; var3 < 512; ++var3) {
- this.indices[var3] = (short)(var3 << 7);
- }
-
- this.isCompact = false;
- }
-
- public CompactCharArray(short[] var1, char[] var2) {
- if (var1.length != 512) {
- throw new IllegalArgumentException("Index out of bounds.");
- } else {
- for(int var3 = 0; var3 < 512; ++var3) {
- short var4 = var1[var3];
- if (var4 < 0 || var4 >= var2.length + 128) {
- throw new IllegalArgumentException("Index out of bounds.");
- }
- }
-
- this.indices = var1;
- this.values = var2;
- }
- }
-
- public char elementAt(char var1) {
- return this.values[(this.indices[var1 >> 7] & '\uffff') + (var1 & 127)];
- }
-
- public void setElementAt(char var1, char var2) {
- if (this.isCompact) {
- this.expand();
- }
-
- this.values[var1] = var2;
- }
-
- public void setElementAt(char var1, char var2, char var3) {
- if (this.isCompact) {
- this.expand();
- }
-
- for(int var4 = var1; var4 <= var2; ++var4) {
- this.values[var4] = var3;
- }
-
- }
-
- public void compact() {
- if (!this.isCompact) {
- char[] var1 = new char[65536];
- int var2 = 128;
-
- for(short var5 = 0; var5 < 128; ++var5) {
- var1[var5] = (char)var5;
- }
-
- this.indices[0] = 0;
-
- for(short var4 = 1; var4 < 512; ++var4) {
- int var8 = var4 << 7;
- int var7 = this.FindOverlappingPosition(var8, var1, var2);
- int var6 = var7 + 128;
- if (var6 > var2) {
- for(short var9 = (short)var2; var9 < var6; ++var9) {
- var1[var9] = (char)(var9 - var7 + var8);
- }
-
- var2 = var6;
- }
-
- this.indices[var4] = (short)var7;
- }
-
- char[] var3 = new char[var2];
-
- for(short var10 = 0; var10 < var2; ++var10) {
- var3[var10] = this.values[var1[var10]];
- }
-
- this.values = null;
- this.values = var3;
- this.isCompact = true;
- }
-
- }
-
- public short[] getIndexArray() {
- return this.indices;
- }
-
- public char[] getStringArray() {
- return this.values;
- }
-
- public Object clone() {
- try {
- CompactCharArray var1 = (CompactCharArray)super.clone();
- var1.values = (char[])this.values.clone();
- var1.indices = (short[])this.indices.clone();
- return var1;
- } catch (CloneNotSupportedException var2) {
- throw new InternalError();
- }
- }
-
- public boolean equals(Object var1) {
- if (var1 == null) {
- return false;
- } else if (this == var1) {
- return true;
- } else if (this.getClass() != var1.getClass()) {
- return false;
- } else {
- CompactCharArray var2 = (CompactCharArray)var1;
-
- for(int var3 = 0; var3 < 65536; ++var3) {
- if (this.elementAt((char)var3) != var2.elementAt((char)var3)) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- public int hashCode() {
- int var1 = 0;
- int var2 = Math.min(3, this.values.length / 16);
-
- for(int var3 = 0; var3 < this.values.length; var3 += var2) {
- var1 = var1 * 37 + this.values[var3];
- }
-
- return var1;
- }
-
- public void writeArrays() {
- int var2 = this.values.length > 0 ? this.values.length : this.values.length + 65536;
- System.out.println("{");
-
- int var1;
- for(var1 = 0; var1 < 511; ++var1) {
- System.out.print("(short)" + (this.getIndexArrayValue(var1) >= 0 ? this.getIndexArrayValue(var1) : this.getIndexArrayValue(var1) + 65536) + ", ");
- if (var1 != 0 && var1 % 10 == 0) {
- System.out.println();
- }
- }
-
- System.out.println("(short)" + (this.getIndexArrayValue(511) >= 0 ? this.getIndexArrayValue(var1) : this.getIndexArrayValue(var1) + 65536) + " }");
- System.out.println("{");
-
- for(int var3 = 0; var3 < var2 - 1; ++var3) {
- System.out.print("(char)" + this.getArrayValue(var3) + ", ");
- if (var3 != 0 && var3 % 10 == 0) {
- System.out.println();
- }
- }
-
- System.out.println("(char)" + this.getArrayValue(var2 - 1) + " }");
- }
-
- public void printIndex(short var1, short var2) {
- for(int var3 = var1; var3 < var2; ++var3) {
- System.out.println(var3 + " -> : " + (this.indices[var3] >= 0 ? this.indices[var3] : this.indices[var3] + 65536));
- }
-
- System.out.println();
- }
-
- public void printPlainArray(int var1, int var2, char[] var3) {
- if (var3 != null) {
- for(int var4 = var1; var4 < var1 + var2; ++var4) {
- System.out.print(" " + this.getArrayValue(var3[var4]));
- }
- } else {
- for(int var5 = var1; var5 < var1 + var2; ++var5) {
- System.out.print(" " + this.getArrayValue(var5));
- }
- }
-
- System.out.println(" Range: start " + var1 + " , count " + var2);
- }
-
- private void expand() {
- if (this.isCompact) {
- char[] var2 = new char[65536];
-
- for(int var1 = 0; var1 < 65536; ++var1) {
- var2[var1] = this.elementAt((char)var1);
- }
-
- for(int var3 = 0; var3 < 512; ++var3) {
- this.indices[var3] = (short)(var3 << 7);
- }
-
- this.values = null;
- this.values = var2;
- this.isCompact = false;
- }
-
- }
-
- private short capacity() {
- return (short)this.values.length;
- }
-
- private char getArrayValue(int var1) {
- return this.values[var1];
- }
-
- private short getIndexArrayValue(int var1) {
- return this.indices[var1];
- }
-
- private int FindOverlappingPosition(int var1, char[] var2, int var3) {
- int var4;
- for(var4 = 0; var4 < var3; var4 += 128) {
- short var6 = 128;
- if (var4 + 128 > var3) {
- var6 = (short)(var3 - var4);
- }
-
- short var5;
- for(var5 = 0; var5 < var6 && this.values[var1 + var5] == this.values[var2[var4 + var5]]; ++var5) {
- }
-
- if (var5 == var6) {
- break;
- }
- }
-
- return var4;
- }
- }
-