home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / framework / ChunkyCharArray$CharArrayChunk.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  3.6 KB  |  273 lines

  1. package com.ibm.xml.framework;
  2.  
  3. import com.ibm.xml.internal.StringHasher;
  4.  
  5. final class ChunkyCharArray$CharArrayChunk implements StringProducer {
  6.    // $FF: synthetic field
  7.    private final ChunkyCharArray this$0;
  8.    protected StringPool fStringPool;
  9.    protected int fChunk;
  10.    protected int fCurrentIndex;
  11.    protected char[] fData;
  12.    protected ChunkyCharArray$CharArrayChunk fPreviousChunk;
  13.    protected ChunkyCharArray$CharArrayChunk fNextChunk;
  14.  
  15.    public ChunkyCharArray$CharArrayChunk(ChunkyCharArray var1, StringPool var2, ChunkyCharArray$CharArrayChunk var3) {
  16.       this.this$0 = var1;
  17.       this.this$0 = var1;
  18.       this.fChunk = -1;
  19.       this.fStringPool = var2;
  20.       this.fChunk = var3 == null ? 0 : var3.fChunk + 1;
  21.       this.fPreviousChunk = var3;
  22.       if (var3 != null) {
  23.          var3.fNextChunk = this;
  24.       }
  25.  
  26.    }
  27.  
  28.    protected ChunkyCharArray$CharArrayChunk(ChunkyCharArray var1, ChunkyCharArray$CharArrayChunk var2) {
  29.       this.this$0 = var1;
  30.       this.this$0 = var1;
  31.       this.fChunk = -1;
  32.       this.fStringPool = var2.fStringPool;
  33.       this.fChunk = var2.fChunk;
  34.       this.fData = var2.fData;
  35.       this.fPreviousChunk = null;
  36.       this.fNextChunk = null;
  37.    }
  38.  
  39.    protected ChunkyCharArray$CharArrayChunk chunkFor(int var1) {
  40.       int var2 = var1 >> 14;
  41.  
  42.       ChunkyCharArray$CharArrayChunk var3;
  43.       for(var3 = this; var2 != var3.fChunk; var3 = var3.fPreviousChunk) {
  44.       }
  45.  
  46.       return var3;
  47.    }
  48.  
  49.    public void setLength(int var1) {
  50.       this.this$0.fLength = var1;
  51.       this.this$0.fCurrentChunk = this.chunkFor(var1);
  52.       this.fCurrentIndex = var1 & 16383;
  53.    }
  54.  
  55.    public void append(char var1) {
  56.       try {
  57.          this.fData[this.fCurrentIndex] = var1;
  58.       } catch (ArrayIndexOutOfBoundsException var3) {
  59.          if (this.fCurrentIndex == 16384) {
  60.             this.this$0.fCurrentChunk = new ChunkyCharArray$CharArrayChunk(this.this$0, this.fStringPool, this);
  61.             this.this$0.fCurrentChunk.append(var1);
  62.             return;
  63.          }
  64.  
  65.          char[] var2 = new char[this.fCurrentIndex * 2];
  66.          System.arraycopy(this.fData, 0, var2, 0, this.fCurrentIndex);
  67.          this.fData = var2;
  68.          this.fData[this.fCurrentIndex] = var1;
  69.       } catch (NullPointerException var4) {
  70.          this.fData = new char[128];
  71.          this.fData[this.fCurrentIndex] = var1;
  72.       }
  73.  
  74.       ++this.this$0.fLength;
  75.       ++this.fCurrentIndex;
  76.    }
  77.  
  78.    public void append(ChunkyCharArray var1, int var2, int var3) {
  79.       ChunkyCharArray$CharArrayChunk var4 = this.chunkFor(var2);
  80.       int var5 = var2 & 16383;
  81.       if (var5 + var3 <= 16384) {
  82.          char[] var12 = var4.fData;
  83.          int var14 = var5;
  84.          int var16 = var3;
  85.  
  86.          while(var16-- > 0) {
  87.             var1.fCurrentChunk.append(var12[var14++]);
  88.          }
  89.  
  90.       } else {
  91.          int var6 = 16384 - var5;
  92.          char[] var7 = var4.fData;
  93.          int var8 = var5;
  94.          int var9 = var6;
  95.  
  96.          while(var9-- > 0) {
  97.             var1.fCurrentChunk.append(var7[var8++]);
  98.          }
  99.  
  100.          var3 -= var6;
  101.  
  102.          do {
  103.             var4 = var4.fNextChunk;
  104.             var6 = var3 <= 16384 ? var3 : 16384;
  105.             var7 = var4.fData;
  106.             var8 = 0;
  107.             var9 = var6;
  108.  
  109.             while(var9-- > 0) {
  110.                var1.fCurrentChunk.append(var7[var8++]);
  111.             }
  112.  
  113.             var3 -= var6;
  114.          } while(var3 > 0);
  115.  
  116.       }
  117.    }
  118.  
  119.    protected ChunkyCharArray$CharArrayChunk createClump(int var1) {
  120.       ChunkyCharArray$CharArrayChunk var2 = new ChunkyCharArray$CharArrayChunk(this.this$0, this);
  121.       ChunkyCharArray$CharArrayChunk var3 = this.fNextChunk;
  122.       ChunkyCharArray$CharArrayChunk var4 = var2;
  123.  
  124.       ChunkyCharArray$CharArrayChunk var5;
  125.       do {
  126.          var5 = new ChunkyCharArray$CharArrayChunk(this.this$0, var3);
  127.          var4.fNextChunk = var5;
  128.          var3 = var3.fNextChunk;
  129.          var4 = var5;
  130.       } while(var5.fChunk != var1);
  131.  
  132.       return var2;
  133.    }
  134.  
  135.    public int addString(int var1, int var2) {
  136.       int var3 = var1 >> 14;
  137.       if (var3 != this.fChunk) {
  138.          if (this.fPreviousChunk != null) {
  139.             return this.fPreviousChunk.addString(var1, var2);
  140.          } else {
  141.             System.out.println("fPreviousChunk == null");
  142.             return -1;
  143.          }
  144.       } else {
  145.          int var4 = var1 + var2 - 1 >> 14;
  146.          if (var3 == var4) {
  147.             return this.fStringPool.addString(this, var1 & 16383, var2);
  148.          } else {
  149.             if (this.fNextChunk == null) {
  150.                System.out.println("fNextChunk == null");
  151.             }
  152.  
  153.             return this.fStringPool.addString(this.createClump(var4), var1 & 16383, var2);
  154.          }
  155.       }
  156.    }
  157.  
  158.    public int addSymbol(int var1, int var2) {
  159.       int var3 = var1 >> 14;
  160.       if (var3 != this.fChunk) {
  161.          if (this.fPreviousChunk != null) {
  162.             return this.fPreviousChunk.addSymbol(var1, var2);
  163.          } else {
  164.             System.out.println("fPreviousChunk == null");
  165.             return -1;
  166.          }
  167.       } else {
  168.          int var4 = var1 + var2 - 1 >> 14;
  169.          int var5 = var1 & 16383;
  170.          if (var3 == var4) {
  171.             int var14 = 0;
  172.  
  173.             for(int var16 = 0; var16 < var2; ++var16) {
  174.                var14 = StringHasher.hashChar(var14, var16, this.fData[var5++] & '\uffff');
  175.             }
  176.  
  177.             int var17 = var14 & Integer.MAX_VALUE;
  178.             var14 = var17 == 0 ? 1 : var17;
  179.             return this.fStringPool.addSymbol(this, var1 & 16383, var2, var14);
  180.          } else {
  181.             int var6 = 0;
  182.             int var7 = 0;
  183.  
  184.             int var9;
  185.             for(var9 = 16384 - var5; var5 < 16384; var6 = StringHasher.hashChar(var6, var7++, this.fData[var5++] & '\uffff')) {
  186.             }
  187.  
  188.             int var8 = var2 - var9;
  189.             ChunkyCharArray$CharArrayChunk var10 = this.fNextChunk;
  190.  
  191.             do {
  192.                var5 = 0;
  193.  
  194.                for(var9 = var8 <= 16384 ? var8 : 16384; var5 < var9; var6 = StringHasher.hashChar(var6, var7++, var10.fData[var5++] & '\uffff')) {
  195.                }
  196.  
  197.                var8 -= var9;
  198.                var10 = var10.fNextChunk;
  199.             } while(var8 > 0);
  200.  
  201.             int var11 = var6 & Integer.MAX_VALUE;
  202.             var6 = var11 == 0 ? 1 : var11;
  203.             return this.fStringPool.addSymbol(this.createClump(var4), var1 & 16383, var2, var6);
  204.          }
  205.       }
  206.    }
  207.  
  208.    public String toString(int var1, int var2) {
  209.       if (var1 + var2 <= 16384) {
  210.          return new String(this.fData, var1, var2);
  211.       } else {
  212.          StringBuffer var3 = new StringBuffer(var2);
  213.          int var4 = 16384 - var1;
  214.          var3.append(this.fData, var1, var4);
  215.          var2 -= var4;
  216.          ChunkyCharArray$CharArrayChunk var5 = this.fNextChunk;
  217.  
  218.          do {
  219.             var4 = var2 <= 16384 ? var2 : 16384;
  220.             var3.append(var5.fData, 0, var4);
  221.             var2 -= var4;
  222.             var5 = var5.fNextChunk;
  223.          } while(var2 > 0);
  224.  
  225.          String var6 = var3.toString();
  226.          Object var8 = null;
  227.          return var6;
  228.       }
  229.    }
  230.  
  231.    public boolean equalsString(int var1, int var2, String var3, int var4) {
  232.       if (var2 != var4) {
  233.          return false;
  234.       } else if (var1 + var2 <= 16384) {
  235.          for(int var11 = 0; var11 < var2; ++var11) {
  236.             if (this.fData[var1++] != var3.charAt(var11)) {
  237.                return false;
  238.             }
  239.          }
  240.  
  241.          return true;
  242.       } else {
  243.          int var5 = 16384 - var1;
  244.          int var6 = 0;
  245.  
  246.          while(var6 < var5) {
  247.             if (this.fData[var1++] != var3.charAt(var6++)) {
  248.                return false;
  249.             }
  250.          }
  251.  
  252.          var2 -= var5;
  253.          ChunkyCharArray$CharArrayChunk var7 = this.fNextChunk;
  254.  
  255.          do {
  256.             var1 = 0;
  257.             var5 = var2 <= 16384 ? var2 : 16384;
  258.             var2 -= var5;
  259.  
  260.             while(var5-- > 0) {
  261.                if (var7.fData[var1++] != var3.charAt(var6++)) {
  262.                   return false;
  263.                }
  264.             }
  265.  
  266.             var7 = var7.fNextChunk;
  267.          } while(var2 > 0);
  268.  
  269.          return true;
  270.       }
  271.    }
  272. }
  273.