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 / internal / CharReader$CharDataChunk.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  3.3 KB  |  241 lines

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