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 / dom / DeferredDocumentImpl.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  8.5 KB  |  689 lines

  1. package com.ibm.xml.dom;
  2.  
  3. import com.ibm.xml.framework.AttrPool;
  4. import com.ibm.xml.framework.EntityPool;
  5. import com.ibm.xml.framework.ParserState;
  6. import com.ibm.xml.framework.StringPool;
  7. import java.util.Hashtable;
  8. import org.w3c.dom.Element;
  9. import org.w3c.dom.Node;
  10.  
  11. public class DeferredDocumentImpl extends DocumentImpl {
  12.    static final long serialVersionUID = 5186323580749626857L;
  13.    private static final boolean DEBUG_PRINT_TABLES = false;
  14.    private static final boolean DEBUG_IDS = false;
  15.    protected static final int CHUNK_SHIFT = 11;
  16.    protected static final int CHUNK_SIZE = 2048;
  17.    protected static final int CHUNK_MASK = 2047;
  18.    protected static final int INITIAL_CHUNK_COUNT = 32;
  19.    protected transient int fNodeCount;
  20.    protected transient byte[][] fNodeType;
  21.    protected transient int[][] fNodeName;
  22.    protected transient int[][] fNodeValue;
  23.    protected transient int[][] fNodeParent;
  24.    protected transient int[][] fNodeFirstChild;
  25.    protected transient int[][] fNodeLastChild;
  26.    protected transient int[][] fNodePrevSib;
  27.    protected transient int[][] fNodeNextSib;
  28.    protected transient int fIdCount;
  29.    protected transient int[] fIdName;
  30.    protected transient int[] fIdElement;
  31.    protected transient ParserState fParserState;
  32.    protected transient StringPool fStringPool;
  33.  
  34.    public DeferredDocumentImpl(ParserState var1) {
  35.       this.fParserState = var1;
  36.       this.fStringPool = var1.getStringPool();
  37.       super.syncData = true;
  38.       super.syncChildren = true;
  39.    }
  40.  
  41.    public int createDocument() {
  42.       int var1 = this.createNode((short)9);
  43.       return var1;
  44.    }
  45.  
  46.    public int createDocumentType(int var1) {
  47.       int var2 = this.createNode((short)10);
  48.       int var3 = var2 >> 11;
  49.       int var4 = var2 & 2047;
  50.       this.fNodeName[var3][var4] = var1;
  51.       return var2;
  52.    }
  53.  
  54.    public int createNotation(int var1) {
  55.       int var2 = this.createNode((short)12);
  56.       int var3 = var2 >> 11;
  57.       int var4 = var2 & 2047;
  58.       int var5 = this.createNode((short)3);
  59.       int var6 = var5 >> 11;
  60.       int var7 = var5 & 2047;
  61.       this.fNodeValue[var3][var4] = var5;
  62.       EntityPool var8 = this.fParserState.getEntityPool();
  63.       this.fNodeName[var3][var4] = var8.getNotationName(var1);
  64.       this.fNodeFirstChild[var6][var7] = var8.getPublicId(var1);
  65.       this.fNodeLastChild[var6][var7] = var8.getSystemId(var1);
  66.       return var2;
  67.    }
  68.  
  69.    public int createEntity(int var1) {
  70.       int var2 = this.createNode((short)6);
  71.       int var3 = var2 >> 11;
  72.       int var4 = var2 & 2047;
  73.       int var5 = this.createNode((short)3);
  74.       int var6 = var5 >> 11;
  75.       int var7 = var5 & 2047;
  76.       this.fNodeValue[var3][var4] = var5;
  77.       EntityPool var8 = this.fParserState.getEntityPool();
  78.       this.fNodeName[var3][var4] = var8.getEntityName(var1);
  79.       this.fNodeFirstChild[var6][var7] = var8.getPublicId(var1);
  80.       this.fNodeLastChild[var6][var7] = var8.getSystemId(var1);
  81.       this.fNodePrevSib[var6][var7] = var8.getNotationName(var1);
  82.       return var2;
  83.    }
  84.  
  85.    public int createEntityReference(int var1) {
  86.       int var2 = this.createNode((short)5);
  87.       int var3 = var2 >> 11;
  88.       int var4 = var2 & 2047;
  89.       int var5 = this.fParserState.getEntityPool().getEntityName(var1);
  90.       this.fNodeName[var3][var4] = var5;
  91.       return var2;
  92.    }
  93.  
  94.    public int createElement(int var1, int var2) {
  95.       int var3 = this.createNode((short)1);
  96.       int var4 = var3 >> 11;
  97.       int var5 = var3 & 2047;
  98.       this.fNodeName[var4][var5] = var1;
  99.       if (var2 != -1) {
  100.          AttrPool var6 = this.fParserState.getAttrPool();
  101.          int var7 = var6.getFirstAttr(var2);
  102.          int var8 = -1;
  103.          int var9 = -1;
  104.          int var10 = -1;
  105.  
  106.          for(int var11 = var7; var11 != -1; var11 = var6.getNextAttr(var11)) {
  107.             int var12 = this.createNode((short)2);
  108.             int var13 = var12 >> 11;
  109.             int var14 = var12 & 2047;
  110.             this.fNodeParent[var13][var14] = var3;
  111.             this.fNodeName[var13][var14] = var6.getAttrName(var11);
  112.             this.fNodeValue[var13][var14] = var6.isSpecified(var11) ? 1 : 0;
  113.             int var15 = this.createNode((short)3);
  114.             int var16 = var15 >> 11;
  115.             int var17 = var15 & 2047;
  116.             this.fNodeValue[var16][var17] = var6.getAttValue(var11);
  117.             this.appendChild(var12, var15);
  118.             if (var11 == var7) {
  119.                this.fNodeValue[var4][var5] = var12;
  120.             } else {
  121.                this.fNodeNextSib[var9][var10] = var12;
  122.                this.fNodePrevSib[var13][var14] = var8;
  123.             }
  124.  
  125.             var8 = var12;
  126.             var9 = var13;
  127.             var10 = var14;
  128.          }
  129.       }
  130.  
  131.       return var3;
  132.    }
  133.  
  134.    public int createAttribute(int var1, int var2, boolean var3) {
  135.       int var4 = this.createNode((short)2);
  136.       int var5 = var4 >> 11;
  137.       int var6 = var4 & 2047;
  138.       this.fNodeName[var5][var6] = var1;
  139.       this.fNodeValue[var5][var6] = var3 ? 1 : 0;
  140.       int var7 = this.createTextNode(var2, false);
  141.       this.appendChild(var4, var7);
  142.       return var4;
  143.    }
  144.  
  145.    public int createElementDefinition(int var1) {
  146.       int var2 = this.createNode((short)-1);
  147.       int var3 = var2 >> 11;
  148.       int var4 = var2 & 2047;
  149.       this.fNodeName[var3][var4] = var1;
  150.       return var2;
  151.    }
  152.  
  153.    public int createTextNode(int var1, boolean var2) {
  154.       int var3 = this.createNode((short)3);
  155.       int var4 = var3 >> 11;
  156.       int var5 = var3 & 2047;
  157.       this.fNodeValue[var4][var5] = var1;
  158.       this.fNodeFirstChild[var4][var5] = var2 ? 1 : 0;
  159.       return var3;
  160.    }
  161.  
  162.    public int createCDATASection(int var1) {
  163.       int var2 = this.createNode((short)4);
  164.       int var3 = var2 >> 11;
  165.       int var4 = var2 & 2047;
  166.       this.fNodeValue[var3][var4] = var1;
  167.       return var2;
  168.    }
  169.  
  170.    public int createProcessingInstruction(int var1, int var2) {
  171.       int var3 = this.createNode((short)7);
  172.       int var4 = var3 >> 11;
  173.       int var5 = var3 & 2047;
  174.       this.fNodeName[var4][var5] = var1;
  175.       this.fNodeValue[var4][var5] = var2;
  176.       return var3;
  177.    }
  178.  
  179.    public int createComment(int var1) {
  180.       int var2 = this.createNode((short)8);
  181.       int var3 = var2 >> 11;
  182.       int var4 = var2 & 2047;
  183.       this.fNodeValue[var3][var4] = var1;
  184.       return var2;
  185.    }
  186.  
  187.    public void appendChild(int var1, int var2) {
  188.       int var3 = var1 >> 11;
  189.       int var4 = var1 & 2047;
  190.       int var5 = var2 >> 11;
  191.       int var6 = var2 & 2047;
  192.       this.fNodeParent[var5][var6] = var1;
  193.       int var7 = this.fNodeLastChild[var3][var4];
  194.       this.fNodePrevSib[var5][var6] = var7;
  195.       if (var7 == -1) {
  196.          this.fNodeFirstChild[var3][var4] = var2;
  197.       } else {
  198.          int var8 = var7 >> 11;
  199.          int var9 = var7 & 2047;
  200.          this.fNodeNextSib[var8][var9] = var2;
  201.       }
  202.  
  203.       this.fNodeLastChild[var3][var4] = var2;
  204.    }
  205.  
  206.    public void setAsFirstChild(int var1, int var2) {
  207.       int var3 = var1 >> 11;
  208.       int var4 = var1 & 2047;
  209.       int var5 = var2 >> 11;
  210.       int var6 = var2 & 2047;
  211.       this.fNodeFirstChild[var3][var4] = var2;
  212.  
  213.       for(int var7 = var2; var7 != -1; var6 = var7 & 2047) {
  214.          var2 = var7;
  215.          var7 = this.fNodeNextSib[var5][var6];
  216.          var5 = var7 >> 11;
  217.       }
  218.  
  219.       this.fNodeLastChild[var3][var4] = var2;
  220.    }
  221.  
  222.    public int getParentNode(int var1) {
  223.       if (var1 == -1) {
  224.          return -1;
  225.       } else {
  226.          int var2 = var1 >> 11;
  227.          int var3 = var1 & 2047;
  228.          return this.fNodeParent[var2][var3];
  229.       }
  230.    }
  231.  
  232.    public int getFirstChild(int var1) {
  233.       if (var1 == -1) {
  234.          return -1;
  235.       } else {
  236.          int var2 = var1 >> 11;
  237.          int var3 = var1 & 2047;
  238.          return this.fNodeFirstChild[var2][var3];
  239.       }
  240.    }
  241.  
  242.    public int getLastChild(int var1) {
  243.       if (var1 == -1) {
  244.          return -1;
  245.       } else {
  246.          int var2 = var1 >> 11;
  247.          int var3 = var1 & 2047;
  248.          int var4 = this.fNodeLastChild[var2][var3];
  249.          if (var4 != -1 && this.fNodeType[var2][var3] == 3) {
  250.             int var5 = this.fNodePrevSib[var2][var3];
  251.             var2 = var5 >> 11;
  252.             var3 = var5 & 2047;
  253.             if (var5 != -1 && this.fNodeType[var2][var3] == 3) {
  254.                while(var5 != -1 && this.fNodeType[var2][var3] == 3) {
  255.                   var1 = var5;
  256.                   var5 = this.fNodePrevSib[var2][var3];
  257.                   var2 = var5 >> 11;
  258.                   var3 = var5 & 2047;
  259.                }
  260.  
  261.                return var1;
  262.             }
  263.          }
  264.  
  265.          return var4;
  266.       }
  267.    }
  268.  
  269.    public int getPreviousSibling(int var1) {
  270.       if (var1 == -1) {
  271.          return -1;
  272.       } else {
  273.          int var2 = var1 >> 11;
  274.          int var3 = var1 & 2047;
  275.          int var4 = this.fNodePrevSib[var2][var3];
  276.          if (var4 != -1 && this.fNodeType[var2][var3] != 3) {
  277.             var2 = var4 >> 11;
  278.             var3 = var4 & 2047;
  279.             if (this.fNodeType[var2][var3] == 3) {
  280.                while(var4 != -1 && this.fNodeType[var2][var3] == 3) {
  281.                   var1 = var4;
  282.                   var4 = this.fNodePrevSib[var2][var3];
  283.                   var2 = var4 >> 11;
  284.                   var3 = var4 & 2047;
  285.                }
  286.  
  287.                return var1;
  288.             }
  289.          }
  290.  
  291.          return var4;
  292.       }
  293.    }
  294.  
  295.    public int getNextSibling(int var1) {
  296.       if (var1 == -1) {
  297.          return -1;
  298.       } else {
  299.          int var2 = var1 >> 11;
  300.          int var3 = var1 & 2047;
  301.  
  302.          for(var1 = this.fNodeNextSib[var2][var3]; var1 != -1 && this.fNodeType[var2][var3] == 3; var3 = var1 & 2047) {
  303.             var1 = this.fNodeNextSib[var2][var3];
  304.             var2 = var1 >> 11;
  305.          }
  306.  
  307.          return var1;
  308.       }
  309.    }
  310.  
  311.    public int getRealNextSibling(int var1) {
  312.       if (var1 == -1) {
  313.          return -1;
  314.       } else {
  315.          int var2 = var1 >> 11;
  316.          int var3 = var1 & 2047;
  317.          return this.fNodeNextSib[var2][var3];
  318.       }
  319.    }
  320.  
  321.    public int lookupElementDefinition(int var1) {
  322.       if (this.fNodeCount > 1) {
  323.          int var2 = -1;
  324.  
  325.          for(int var3 = this.getFirstChild(0); var3 != -1; var3 = this.getNextSibling(var3)) {
  326.             if (this.getNodeType(var3) == 10) {
  327.                var2 = var3;
  328.                break;
  329.             }
  330.          }
  331.  
  332.          for(int var4 = this.getFirstChild(var2); var4 != -1; var4 = this.getNextSibling(var4)) {
  333.             if (this.getNodeName(var4) == var1) {
  334.                return var4;
  335.             }
  336.          }
  337.       }
  338.  
  339.       return -1;
  340.    }
  341.  
  342.    public int getAttributeList(int var1) {
  343.       if (var1 == -1) {
  344.          return -1;
  345.       } else {
  346.          int var2 = var1 >> 11;
  347.          int var3 = var1 & 2047;
  348.          return this.fNodeValue[var2][var3];
  349.       }
  350.    }
  351.  
  352.    public DeferredNode getNodeObject(int var1) {
  353.       if (var1 == -1) {
  354.          return null;
  355.       } else {
  356.          int var2 = var1 >> 11;
  357.          int var3 = var1 & 2047;
  358.          byte var4 = this.fNodeType[var2][var3];
  359.          Object var5 = null;
  360.          switch (var4) {
  361.             case -1:
  362.                var5 = new DeferredElementDefinitionImpl(this, var1);
  363.             case 0:
  364.             case 9:
  365.             case 11:
  366.             default:
  367.                break;
  368.             case 1:
  369.                var5 = new DeferredElementImpl(this, var1);
  370.                if (super.docElement == null) {
  371.                   super.docElement = (ElementImpl)var5;
  372.                }
  373.  
  374.                if (this.fIdElement != null) {
  375.                   int var6 = binarySearch(this.fIdElement, 0, this.fIdCount, var1);
  376.  
  377.                   while(var6 != -1) {
  378.                      int var7 = this.fIdName[var6];
  379.                      if (var7 != -1) {
  380.                         String var8 = this.fStringPool.toString(var7);
  381.                         this.putIdentifier0(var8, (Element)var5);
  382.                         this.fIdName[var6] = -1;
  383.                      }
  384.  
  385.                      if (var6 < this.fIdCount && this.fIdElement[var6 + 1] == var1) {
  386.                         ++var6;
  387.                      } else {
  388.                         var6 = -1;
  389.                      }
  390.                   }
  391.                }
  392.                break;
  393.             case 2:
  394.                var5 = new DeferredAttrImpl(this, var1);
  395.                break;
  396.             case 3:
  397.                var5 = new DeferredTextImpl(this, var1);
  398.                break;
  399.             case 4:
  400.                var5 = new DeferredCDATASectionImpl(this, var1);
  401.                break;
  402.             case 5:
  403.                var5 = new DeferredEntityReferenceImpl(this, var1);
  404.                break;
  405.             case 6:
  406.                var5 = new DeferredEntityImpl(this, var1);
  407.                break;
  408.             case 7:
  409.                var5 = new DeferredProcessingInstructionImpl(this, var1);
  410.                break;
  411.             case 8:
  412.                var5 = new DeferredCommentImpl(this, var1);
  413.                break;
  414.             case 10:
  415.                var5 = new DeferredDocumentTypeImpl(this, var1);
  416.                super.docType = (DocumentTypeImpl)var5;
  417.                break;
  418.             case 12:
  419.                var5 = new DeferredNotationImpl(this, var1);
  420.          }
  421.  
  422.          if (var5 != null) {
  423.             return (DeferredNode)var5;
  424.          } else {
  425.             throw new IllegalArgumentException();
  426.          }
  427.       }
  428.    }
  429.  
  430.    public String getNodeNameString(int var1) {
  431.       if (var1 == -1) {
  432.          return null;
  433.       } else {
  434.          int var2 = var1 >> 11;
  435.          int var3 = var1 & 2047;
  436.          int var4 = this.fNodeName[var2][var3];
  437.          return var4 == -1 ? null : this.fStringPool.toString(var4);
  438.       }
  439.    }
  440.  
  441.    public String getNodeValueString(int var1) {
  442.       if (var1 == -1) {
  443.          return null;
  444.       } else {
  445.          int var2 = var1 >> 11;
  446.          int var3 = var1 & 2047;
  447.          int var4 = this.fNodeValue[var2][var3];
  448.          return var4 == -1 ? null : this.fStringPool.toString(var4);
  449.       }
  450.    }
  451.  
  452.    public int getNodeName(int var1) {
  453.       if (var1 == -1) {
  454.          return -1;
  455.       } else {
  456.          int var2 = var1 >> 11;
  457.          int var3 = var1 & 2047;
  458.          return this.fNodeName[var2][var3];
  459.       }
  460.    }
  461.  
  462.    public int getNodeValue(int var1) {
  463.       if (var1 == -1) {
  464.          return -1;
  465.       } else {
  466.          int var2 = var1 >> 11;
  467.          int var3 = var1 & 2047;
  468.          return this.fNodeValue[var2][var3];
  469.       }
  470.    }
  471.  
  472.    public short getNodeType(int var1) {
  473.       if (var1 == -1) {
  474.          return -1;
  475.       } else {
  476.          int var2 = var1 >> 11;
  477.          int var3 = var1 & 2047;
  478.          return (short)this.fNodeType[var2][var3];
  479.       }
  480.    }
  481.  
  482.    public void putIdentifier(int var1, int var2) {
  483.       if (this.fIdName == null) {
  484.          this.fIdName = new int[64];
  485.          this.fIdElement = new int[64];
  486.       }
  487.  
  488.       if (this.fIdCount == this.fIdName.length) {
  489.          int[] var3 = new int[this.fIdCount * 2];
  490.          System.arraycopy(this.fIdName, 0, var3, 0, this.fIdCount);
  491.          this.fIdName = var3;
  492.          int[] var4 = new int[var3.length];
  493.          System.arraycopy(this.fIdElement, 0, var4, 0, this.fIdCount);
  494.          this.fIdElement = var4;
  495.       }
  496.  
  497.       this.fIdName[this.fIdCount] = var1;
  498.       this.fIdElement[this.fIdCount] = var2;
  499.       ++this.fIdCount;
  500.    }
  501.  
  502.    public void print() {
  503.    }
  504.  
  505.    protected void synchronizeData() {
  506.       super.syncData = false;
  507.       if (this.fIdElement != null) {
  508.          IntVector var1 = new IntVector();
  509.  
  510.          for(int var2 = 0; var2 < this.fIdCount; ++var2) {
  511.             int var3 = this.fIdElement[var2];
  512.             int var4 = this.fIdName[var2];
  513.             if (var4 != -1) {
  514.                var1.removeAllElements();
  515.                int var5 = var3;
  516.  
  517.                do {
  518.                   var1.addElement(var5);
  519.                   var5 = this.getParentNode(var5);
  520.                } while(var5 != -1);
  521.  
  522.                Object var6 = this;
  523.  
  524.                for(int var7 = var1.size() - 2; var7 >= 0; --var7) {
  525.                   var5 = var1.elementAt(var7);
  526.  
  527.                   for(Node var8 = ((Node)var6).getFirstChild(); var8 != null; var8 = var8.getNextSibling()) {
  528.                      if (var8 instanceof DeferredNode) {
  529.                         int var9 = ((DeferredNode)var8).getNodeIndex();
  530.                         if (var9 == var5) {
  531.                            var6 = var8;
  532.                            break;
  533.                         }
  534.                      }
  535.                   }
  536.                }
  537.  
  538.                Element var11 = (Element)var6;
  539.                String var12 = this.fStringPool.toString(var4);
  540.                this.putIdentifier0(var12, var11);
  541.                this.fIdName[var2] = -1;
  542.  
  543.                while(this.fIdElement[var2 + 1] == var3) {
  544.                   ++var2;
  545.                   var12 = this.fStringPool.toString(this.fIdName[var2]);
  546.                   this.putIdentifier0(var12, var11);
  547.                }
  548.             }
  549.          }
  550.       }
  551.  
  552.    }
  553.  
  554.    protected void synchronizeChildren() {
  555.       super.syncChildren = false;
  556.       NodeImpl var1 = null;
  557.  
  558.       for(int var2 = this.getFirstChild(0); var2 != -1; var2 = this.getNextSibling(var2)) {
  559.          NodeImpl var3 = (NodeImpl)this.getNodeObject(var2);
  560.          if (var1 == null) {
  561.             super.firstChild = var3;
  562.          } else {
  563.             var1.nextSibling = var3;
  564.          }
  565.  
  566.          var3.parentNode = this;
  567.          var3.previousSibling = var1;
  568.          var1 = var3;
  569.          short var4 = var3.getNodeType();
  570.          if (var4 == 1) {
  571.             super.docElement = (ElementImpl)var3;
  572.          } else if (var4 == 10) {
  573.             super.docType = (DocumentTypeImpl)var3;
  574.          }
  575.       }
  576.  
  577.       if (var1 != null) {
  578.          super.lastChild = var1;
  579.       }
  580.  
  581.    }
  582.  
  583.    protected boolean ensureCapacity(int var1, int var2) {
  584.       if (this.fNodeType == null) {
  585.          this.fNodeType = new byte[32][];
  586.          this.fNodeName = new int[32][];
  587.          this.fNodeValue = new int[32][];
  588.          this.fNodeParent = new int[32][];
  589.          this.fNodeFirstChild = new int[32][];
  590.          this.fNodeLastChild = new int[32][];
  591.          this.fNodePrevSib = new int[32][];
  592.          this.fNodeNextSib = new int[32][];
  593.       }
  594.  
  595.       try {
  596.          if (this.fNodeType[var1][var2] == 0) {
  597.             return false;
  598.          }
  599.  
  600.          return true;
  601.       } catch (ArrayIndexOutOfBoundsException var6) {
  602.          int var3 = var1 * 2;
  603.          byte[][] var4 = new byte[var3][];
  604.          System.arraycopy(this.fNodeType, 0, var4, 0, var1);
  605.          this.fNodeType = var4;
  606.          int[][] var5 = new int[var3][];
  607.          System.arraycopy(this.fNodeName, 0, var5, 0, var1);
  608.          this.fNodeName = var5;
  609.          var5 = new int[var3][];
  610.          System.arraycopy(this.fNodeValue, 0, var5, 0, var1);
  611.          this.fNodeValue = var5;
  612.          var5 = new int[var3][];
  613.          System.arraycopy(this.fNodeParent, 0, var5, 0, var1);
  614.          this.fNodeParent = var5;
  615.          var5 = new int[var3][];
  616.          System.arraycopy(this.fNodeFirstChild, 0, var5, 0, var1);
  617.          this.fNodeFirstChild = var5;
  618.          var5 = new int[var3][];
  619.          System.arraycopy(this.fNodeLastChild, 0, var5, 0, var1);
  620.          this.fNodeLastChild = var5;
  621.          var5 = new int[var3][];
  622.          System.arraycopy(this.fNodePrevSib, 0, var5, 0, var1);
  623.          this.fNodePrevSib = var5;
  624.          var5 = new int[var3][];
  625.          System.arraycopy(this.fNodeNextSib, 0, var5, 0, var1);
  626.          this.fNodeNextSib = var5;
  627.       } catch (NullPointerException var7) {
  628.       }
  629.  
  630.       this.fNodeType[var1] = new byte[2048];
  631.       this.fNodeName[var1] = new int[2048];
  632.       this.fNodeValue[var1] = new int[2048];
  633.       this.fNodeParent[var1] = new int[2048];
  634.       this.fNodeFirstChild[var1] = new int[2048];
  635.       this.fNodeLastChild[var1] = new int[2048];
  636.       this.fNodePrevSib[var1] = new int[2048];
  637.       this.fNodeNextSib[var1] = new int[2048];
  638.       return true;
  639.    }
  640.  
  641.    protected int createNode(short var1) {
  642.       int var2 = this.fNodeCount >> 11;
  643.       int var3 = this.fNodeCount & 2047;
  644.       this.ensureCapacity(var2, var3);
  645.       this.fNodeType[var2][var3] = (byte)var1;
  646.       this.fNodeName[var2][var3] = -1;
  647.       this.fNodeValue[var2][var3] = -1;
  648.       this.fNodeParent[var2][var3] = -1;
  649.       this.fNodeFirstChild[var2][var3] = -1;
  650.       this.fNodeLastChild[var2][var3] = -1;
  651.       this.fNodePrevSib[var2][var3] = -1;
  652.       this.fNodeNextSib[var2][var3] = -1;
  653.       return this.fNodeCount++;
  654.    }
  655.  
  656.    protected static int binarySearch(int[] var0, int var1, int var2, int var3) {
  657.       while(var1 <= var2) {
  658.          int var4 = (var1 + var2) / 2;
  659.          int var5 = var0[var4];
  660.          if (var5 == var3) {
  661.             while(var4 > 0 && var0[var4 - 1] == var3) {
  662.                --var4;
  663.             }
  664.  
  665.             return var4;
  666.          }
  667.  
  668.          if (var5 > var3) {
  669.             var2 = var4 - 1;
  670.          } else {
  671.             var1 = var4 + 1;
  672.          }
  673.       }
  674.  
  675.       return -1;
  676.    }
  677.  
  678.    private void putIdentifier0(String var1, Element var2) {
  679.       if (super.identifiers == null) {
  680.          super.identifiers = new Hashtable();
  681.       }
  682.  
  683.       super.identifiers.put(var1, var2);
  684.    }
  685.  
  686.    private static void print(int[] var0, int var1, int var2, int var3, int var4) {
  687.    }
  688. }
  689.