home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.framework;
-
- import com.ibm.xml.internal.StringHasher;
-
- final class ChunkyCharArray$CharArrayChunk implements StringProducer {
- // $FF: synthetic field
- private final ChunkyCharArray this$0;
- protected StringPool fStringPool;
- protected int fChunk;
- protected int fCurrentIndex;
- protected char[] fData;
- protected ChunkyCharArray$CharArrayChunk fPreviousChunk;
- protected ChunkyCharArray$CharArrayChunk fNextChunk;
-
- public ChunkyCharArray$CharArrayChunk(ChunkyCharArray var1, StringPool var2, ChunkyCharArray$CharArrayChunk var3) {
- this.this$0 = var1;
- this.this$0 = var1;
- this.fChunk = -1;
- this.fStringPool = var2;
- this.fChunk = var3 == null ? 0 : var3.fChunk + 1;
- this.fPreviousChunk = var3;
- if (var3 != null) {
- var3.fNextChunk = this;
- }
-
- }
-
- protected ChunkyCharArray$CharArrayChunk(ChunkyCharArray var1, ChunkyCharArray$CharArrayChunk var2) {
- this.this$0 = var1;
- this.this$0 = var1;
- this.fChunk = -1;
- this.fStringPool = var2.fStringPool;
- this.fChunk = var2.fChunk;
- this.fData = var2.fData;
- this.fPreviousChunk = null;
- this.fNextChunk = null;
- }
-
- protected ChunkyCharArray$CharArrayChunk chunkFor(int var1) {
- int var2 = var1 >> 14;
-
- ChunkyCharArray$CharArrayChunk var3;
- for(var3 = this; var2 != var3.fChunk; var3 = var3.fPreviousChunk) {
- }
-
- return var3;
- }
-
- public void setLength(int var1) {
- this.this$0.fLength = var1;
- this.this$0.fCurrentChunk = this.chunkFor(var1);
- this.fCurrentIndex = var1 & 16383;
- }
-
- public void append(char var1) {
- try {
- this.fData[this.fCurrentIndex] = var1;
- } catch (ArrayIndexOutOfBoundsException var3) {
- if (this.fCurrentIndex == 16384) {
- this.this$0.fCurrentChunk = new ChunkyCharArray$CharArrayChunk(this.this$0, this.fStringPool, this);
- this.this$0.fCurrentChunk.append(var1);
- return;
- }
-
- char[] var2 = new char[this.fCurrentIndex * 2];
- System.arraycopy(this.fData, 0, var2, 0, this.fCurrentIndex);
- this.fData = var2;
- this.fData[this.fCurrentIndex] = var1;
- } catch (NullPointerException var4) {
- this.fData = new char[128];
- this.fData[this.fCurrentIndex] = var1;
- }
-
- ++this.this$0.fLength;
- ++this.fCurrentIndex;
- }
-
- public void append(ChunkyCharArray var1, int var2, int var3) {
- ChunkyCharArray$CharArrayChunk var4 = this.chunkFor(var2);
- int var5 = var2 & 16383;
- if (var5 + var3 <= 16384) {
- char[] var12 = var4.fData;
- int var14 = var5;
- int var16 = var3;
-
- while(var16-- > 0) {
- var1.fCurrentChunk.append(var12[var14++]);
- }
-
- } else {
- int var6 = 16384 - var5;
- char[] var7 = var4.fData;
- int var8 = var5;
- int var9 = var6;
-
- while(var9-- > 0) {
- var1.fCurrentChunk.append(var7[var8++]);
- }
-
- var3 -= var6;
-
- do {
- var4 = var4.fNextChunk;
- var6 = var3 <= 16384 ? var3 : 16384;
- var7 = var4.fData;
- var8 = 0;
- var9 = var6;
-
- while(var9-- > 0) {
- var1.fCurrentChunk.append(var7[var8++]);
- }
-
- var3 -= var6;
- } while(var3 > 0);
-
- }
- }
-
- protected ChunkyCharArray$CharArrayChunk createClump(int var1) {
- ChunkyCharArray$CharArrayChunk var2 = new ChunkyCharArray$CharArrayChunk(this.this$0, this);
- ChunkyCharArray$CharArrayChunk var3 = this.fNextChunk;
- ChunkyCharArray$CharArrayChunk var4 = var2;
-
- ChunkyCharArray$CharArrayChunk var5;
- do {
- var5 = new ChunkyCharArray$CharArrayChunk(this.this$0, var3);
- var4.fNextChunk = var5;
- var3 = var3.fNextChunk;
- var4 = var5;
- } while(var5.fChunk != var1);
-
- return var2;
- }
-
- public int addString(int var1, int var2) {
- int var3 = var1 >> 14;
- if (var3 != this.fChunk) {
- if (this.fPreviousChunk != null) {
- return this.fPreviousChunk.addString(var1, var2);
- } else {
- System.out.println("fPreviousChunk == null");
- return -1;
- }
- } else {
- int var4 = var1 + var2 - 1 >> 14;
- if (var3 == var4) {
- return this.fStringPool.addString(this, var1 & 16383, var2);
- } else {
- if (this.fNextChunk == null) {
- System.out.println("fNextChunk == null");
- }
-
- return this.fStringPool.addString(this.createClump(var4), var1 & 16383, var2);
- }
- }
- }
-
- public int addSymbol(int var1, int var2) {
- int var3 = var1 >> 14;
- if (var3 != this.fChunk) {
- if (this.fPreviousChunk != null) {
- return this.fPreviousChunk.addSymbol(var1, var2);
- } else {
- System.out.println("fPreviousChunk == null");
- return -1;
- }
- } else {
- int var4 = var1 + var2 - 1 >> 14;
- int var5 = var1 & 16383;
- if (var3 == var4) {
- int var14 = 0;
-
- for(int var16 = 0; var16 < var2; ++var16) {
- var14 = StringHasher.hashChar(var14, var16, this.fData[var5++] & '\uffff');
- }
-
- int var17 = var14 & Integer.MAX_VALUE;
- var14 = var17 == 0 ? 1 : var17;
- return this.fStringPool.addSymbol(this, var1 & 16383, var2, var14);
- } else {
- int var6 = 0;
- int var7 = 0;
-
- int var9;
- for(var9 = 16384 - var5; var5 < 16384; var6 = StringHasher.hashChar(var6, var7++, this.fData[var5++] & '\uffff')) {
- }
-
- int var8 = var2 - var9;
- ChunkyCharArray$CharArrayChunk var10 = this.fNextChunk;
-
- do {
- var5 = 0;
-
- for(var9 = var8 <= 16384 ? var8 : 16384; var5 < var9; var6 = StringHasher.hashChar(var6, var7++, var10.fData[var5++] & '\uffff')) {
- }
-
- var8 -= var9;
- var10 = var10.fNextChunk;
- } while(var8 > 0);
-
- int var11 = var6 & Integer.MAX_VALUE;
- var6 = var11 == 0 ? 1 : var11;
- return this.fStringPool.addSymbol(this.createClump(var4), var1 & 16383, var2, var6);
- }
- }
- }
-
- public String toString(int var1, int var2) {
- if (var1 + var2 <= 16384) {
- return new String(this.fData, var1, var2);
- } else {
- StringBuffer var3 = new StringBuffer(var2);
- int var4 = 16384 - var1;
- var3.append(this.fData, var1, var4);
- var2 -= var4;
- ChunkyCharArray$CharArrayChunk var5 = this.fNextChunk;
-
- do {
- var4 = var2 <= 16384 ? var2 : 16384;
- var3.append(var5.fData, 0, var4);
- var2 -= var4;
- var5 = var5.fNextChunk;
- } while(var2 > 0);
-
- String var6 = var3.toString();
- Object var8 = null;
- return var6;
- }
- }
-
- public boolean equalsString(int var1, int var2, String var3, int var4) {
- if (var2 != var4) {
- return false;
- } else if (var1 + var2 <= 16384) {
- for(int var11 = 0; var11 < var2; ++var11) {
- if (this.fData[var1++] != var3.charAt(var11)) {
- return false;
- }
- }
-
- return true;
- } else {
- int var5 = 16384 - var1;
- int var6 = 0;
-
- while(var6 < var5) {
- if (this.fData[var1++] != var3.charAt(var6++)) {
- return false;
- }
- }
-
- var2 -= var5;
- ChunkyCharArray$CharArrayChunk var7 = this.fNextChunk;
-
- do {
- var1 = 0;
- var5 = var2 <= 16384 ? var2 : 16384;
- var2 -= var5;
-
- while(var5-- > 0) {
- if (var7.fData[var1++] != var3.charAt(var6++)) {
- return false;
- }
- }
-
- var7 = var7.fNextChunk;
- } while(var2 > 0);
-
- return true;
- }
- }
- }
-