home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.dom;
-
- import com.ibm.xml.framework.AttrPool;
- import com.ibm.xml.framework.EntityPool;
- import com.ibm.xml.framework.ParserState;
- import com.ibm.xml.framework.StringPool;
- import java.util.Hashtable;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
-
- public class DeferredDocumentImpl extends DocumentImpl {
- static final long serialVersionUID = 5186323580749626857L;
- private static final boolean DEBUG_PRINT_TABLES = false;
- private static final boolean DEBUG_IDS = false;
- protected static final int CHUNK_SHIFT = 11;
- protected static final int CHUNK_SIZE = 2048;
- protected static final int CHUNK_MASK = 2047;
- protected static final int INITIAL_CHUNK_COUNT = 32;
- protected transient int fNodeCount;
- protected transient byte[][] fNodeType;
- protected transient int[][] fNodeName;
- protected transient int[][] fNodeValue;
- protected transient int[][] fNodeParent;
- protected transient int[][] fNodeFirstChild;
- protected transient int[][] fNodeLastChild;
- protected transient int[][] fNodePrevSib;
- protected transient int[][] fNodeNextSib;
- protected transient int fIdCount;
- protected transient int[] fIdName;
- protected transient int[] fIdElement;
- protected transient ParserState fParserState;
- protected transient StringPool fStringPool;
-
- public DeferredDocumentImpl(ParserState var1) {
- this.fParserState = var1;
- this.fStringPool = var1.getStringPool();
- super.syncData = true;
- super.syncChildren = true;
- }
-
- public int createDocument() {
- int var1 = this.createNode((short)9);
- return var1;
- }
-
- public int createDocumentType(int var1) {
- int var2 = this.createNode((short)10);
- int var3 = var2 >> 11;
- int var4 = var2 & 2047;
- this.fNodeName[var3][var4] = var1;
- return var2;
- }
-
- public int createNotation(int var1) {
- int var2 = this.createNode((short)12);
- int var3 = var2 >> 11;
- int var4 = var2 & 2047;
- int var5 = this.createNode((short)3);
- int var6 = var5 >> 11;
- int var7 = var5 & 2047;
- this.fNodeValue[var3][var4] = var5;
- EntityPool var8 = this.fParserState.getEntityPool();
- this.fNodeName[var3][var4] = var8.getNotationName(var1);
- this.fNodeFirstChild[var6][var7] = var8.getPublicId(var1);
- this.fNodeLastChild[var6][var7] = var8.getSystemId(var1);
- return var2;
- }
-
- public int createEntity(int var1) {
- int var2 = this.createNode((short)6);
- int var3 = var2 >> 11;
- int var4 = var2 & 2047;
- int var5 = this.createNode((short)3);
- int var6 = var5 >> 11;
- int var7 = var5 & 2047;
- this.fNodeValue[var3][var4] = var5;
- EntityPool var8 = this.fParserState.getEntityPool();
- this.fNodeName[var3][var4] = var8.getEntityName(var1);
- this.fNodeFirstChild[var6][var7] = var8.getPublicId(var1);
- this.fNodeLastChild[var6][var7] = var8.getSystemId(var1);
- this.fNodePrevSib[var6][var7] = var8.getNotationName(var1);
- return var2;
- }
-
- public int createEntityReference(int var1) {
- int var2 = this.createNode((short)5);
- int var3 = var2 >> 11;
- int var4 = var2 & 2047;
- int var5 = this.fParserState.getEntityPool().getEntityName(var1);
- this.fNodeName[var3][var4] = var5;
- return var2;
- }
-
- public int createElement(int var1, int var2) {
- int var3 = this.createNode((short)1);
- int var4 = var3 >> 11;
- int var5 = var3 & 2047;
- this.fNodeName[var4][var5] = var1;
- if (var2 != -1) {
- AttrPool var6 = this.fParserState.getAttrPool();
- int var7 = var6.getFirstAttr(var2);
- int var8 = -1;
- int var9 = -1;
- int var10 = -1;
-
- for(int var11 = var7; var11 != -1; var11 = var6.getNextAttr(var11)) {
- int var12 = this.createNode((short)2);
- int var13 = var12 >> 11;
- int var14 = var12 & 2047;
- this.fNodeParent[var13][var14] = var3;
- this.fNodeName[var13][var14] = var6.getAttrName(var11);
- this.fNodeValue[var13][var14] = var6.isSpecified(var11) ? 1 : 0;
- int var15 = this.createNode((short)3);
- int var16 = var15 >> 11;
- int var17 = var15 & 2047;
- this.fNodeValue[var16][var17] = var6.getAttValue(var11);
- this.appendChild(var12, var15);
- if (var11 == var7) {
- this.fNodeValue[var4][var5] = var12;
- } else {
- this.fNodeNextSib[var9][var10] = var12;
- this.fNodePrevSib[var13][var14] = var8;
- }
-
- var8 = var12;
- var9 = var13;
- var10 = var14;
- }
- }
-
- return var3;
- }
-
- public int createAttribute(int var1, int var2, boolean var3) {
- int var4 = this.createNode((short)2);
- int var5 = var4 >> 11;
- int var6 = var4 & 2047;
- this.fNodeName[var5][var6] = var1;
- this.fNodeValue[var5][var6] = var3 ? 1 : 0;
- int var7 = this.createTextNode(var2, false);
- this.appendChild(var4, var7);
- return var4;
- }
-
- public int createElementDefinition(int var1) {
- int var2 = this.createNode((short)-1);
- int var3 = var2 >> 11;
- int var4 = var2 & 2047;
- this.fNodeName[var3][var4] = var1;
- return var2;
- }
-
- public int createTextNode(int var1, boolean var2) {
- int var3 = this.createNode((short)3);
- int var4 = var3 >> 11;
- int var5 = var3 & 2047;
- this.fNodeValue[var4][var5] = var1;
- this.fNodeFirstChild[var4][var5] = var2 ? 1 : 0;
- return var3;
- }
-
- public int createCDATASection(int var1) {
- int var2 = this.createNode((short)4);
- int var3 = var2 >> 11;
- int var4 = var2 & 2047;
- this.fNodeValue[var3][var4] = var1;
- return var2;
- }
-
- public int createProcessingInstruction(int var1, int var2) {
- int var3 = this.createNode((short)7);
- int var4 = var3 >> 11;
- int var5 = var3 & 2047;
- this.fNodeName[var4][var5] = var1;
- this.fNodeValue[var4][var5] = var2;
- return var3;
- }
-
- public int createComment(int var1) {
- int var2 = this.createNode((short)8);
- int var3 = var2 >> 11;
- int var4 = var2 & 2047;
- this.fNodeValue[var3][var4] = var1;
- return var2;
- }
-
- public void appendChild(int var1, int var2) {
- int var3 = var1 >> 11;
- int var4 = var1 & 2047;
- int var5 = var2 >> 11;
- int var6 = var2 & 2047;
- this.fNodeParent[var5][var6] = var1;
- int var7 = this.fNodeLastChild[var3][var4];
- this.fNodePrevSib[var5][var6] = var7;
- if (var7 == -1) {
- this.fNodeFirstChild[var3][var4] = var2;
- } else {
- int var8 = var7 >> 11;
- int var9 = var7 & 2047;
- this.fNodeNextSib[var8][var9] = var2;
- }
-
- this.fNodeLastChild[var3][var4] = var2;
- }
-
- public void setAsFirstChild(int var1, int var2) {
- int var3 = var1 >> 11;
- int var4 = var1 & 2047;
- int var5 = var2 >> 11;
- int var6 = var2 & 2047;
- this.fNodeFirstChild[var3][var4] = var2;
-
- for(int var7 = var2; var7 != -1; var6 = var7 & 2047) {
- var2 = var7;
- var7 = this.fNodeNextSib[var5][var6];
- var5 = var7 >> 11;
- }
-
- this.fNodeLastChild[var3][var4] = var2;
- }
-
- public int getParentNode(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- return this.fNodeParent[var2][var3];
- }
- }
-
- public int getFirstChild(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- return this.fNodeFirstChild[var2][var3];
- }
- }
-
- public int getLastChild(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- int var4 = this.fNodeLastChild[var2][var3];
- if (var4 != -1 && this.fNodeType[var2][var3] == 3) {
- int var5 = this.fNodePrevSib[var2][var3];
- var2 = var5 >> 11;
- var3 = var5 & 2047;
- if (var5 != -1 && this.fNodeType[var2][var3] == 3) {
- while(var5 != -1 && this.fNodeType[var2][var3] == 3) {
- var1 = var5;
- var5 = this.fNodePrevSib[var2][var3];
- var2 = var5 >> 11;
- var3 = var5 & 2047;
- }
-
- return var1;
- }
- }
-
- return var4;
- }
- }
-
- public int getPreviousSibling(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- int var4 = this.fNodePrevSib[var2][var3];
- if (var4 != -1 && this.fNodeType[var2][var3] != 3) {
- var2 = var4 >> 11;
- var3 = var4 & 2047;
- if (this.fNodeType[var2][var3] == 3) {
- while(var4 != -1 && this.fNodeType[var2][var3] == 3) {
- var1 = var4;
- var4 = this.fNodePrevSib[var2][var3];
- var2 = var4 >> 11;
- var3 = var4 & 2047;
- }
-
- return var1;
- }
- }
-
- return var4;
- }
- }
-
- public int getNextSibling(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
-
- for(var1 = this.fNodeNextSib[var2][var3]; var1 != -1 && this.fNodeType[var2][var3] == 3; var3 = var1 & 2047) {
- var1 = this.fNodeNextSib[var2][var3];
- var2 = var1 >> 11;
- }
-
- return var1;
- }
- }
-
- public int getRealNextSibling(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- return this.fNodeNextSib[var2][var3];
- }
- }
-
- public int lookupElementDefinition(int var1) {
- if (this.fNodeCount > 1) {
- int var2 = -1;
-
- for(int var3 = this.getFirstChild(0); var3 != -1; var3 = this.getNextSibling(var3)) {
- if (this.getNodeType(var3) == 10) {
- var2 = var3;
- break;
- }
- }
-
- for(int var4 = this.getFirstChild(var2); var4 != -1; var4 = this.getNextSibling(var4)) {
- if (this.getNodeName(var4) == var1) {
- return var4;
- }
- }
- }
-
- return -1;
- }
-
- public int getAttributeList(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- return this.fNodeValue[var2][var3];
- }
- }
-
- public DeferredNode getNodeObject(int var1) {
- if (var1 == -1) {
- return null;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- byte var4 = this.fNodeType[var2][var3];
- Object var5 = null;
- switch (var4) {
- case -1:
- var5 = new DeferredElementDefinitionImpl(this, var1);
- case 0:
- case 9:
- case 11:
- default:
- break;
- case 1:
- var5 = new DeferredElementImpl(this, var1);
- if (super.docElement == null) {
- super.docElement = (ElementImpl)var5;
- }
-
- if (this.fIdElement != null) {
- int var6 = binarySearch(this.fIdElement, 0, this.fIdCount, var1);
-
- while(var6 != -1) {
- int var7 = this.fIdName[var6];
- if (var7 != -1) {
- String var8 = this.fStringPool.toString(var7);
- this.putIdentifier0(var8, (Element)var5);
- this.fIdName[var6] = -1;
- }
-
- if (var6 < this.fIdCount && this.fIdElement[var6 + 1] == var1) {
- ++var6;
- } else {
- var6 = -1;
- }
- }
- }
- break;
- case 2:
- var5 = new DeferredAttrImpl(this, var1);
- break;
- case 3:
- var5 = new DeferredTextImpl(this, var1);
- break;
- case 4:
- var5 = new DeferredCDATASectionImpl(this, var1);
- break;
- case 5:
- var5 = new DeferredEntityReferenceImpl(this, var1);
- break;
- case 6:
- var5 = new DeferredEntityImpl(this, var1);
- break;
- case 7:
- var5 = new DeferredProcessingInstructionImpl(this, var1);
- break;
- case 8:
- var5 = new DeferredCommentImpl(this, var1);
- break;
- case 10:
- var5 = new DeferredDocumentTypeImpl(this, var1);
- super.docType = (DocumentTypeImpl)var5;
- break;
- case 12:
- var5 = new DeferredNotationImpl(this, var1);
- }
-
- if (var5 != null) {
- return (DeferredNode)var5;
- } else {
- throw new IllegalArgumentException();
- }
- }
- }
-
- public String getNodeNameString(int var1) {
- if (var1 == -1) {
- return null;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- int var4 = this.fNodeName[var2][var3];
- return var4 == -1 ? null : this.fStringPool.toString(var4);
- }
- }
-
- public String getNodeValueString(int var1) {
- if (var1 == -1) {
- return null;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- int var4 = this.fNodeValue[var2][var3];
- return var4 == -1 ? null : this.fStringPool.toString(var4);
- }
- }
-
- public int getNodeName(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- return this.fNodeName[var2][var3];
- }
- }
-
- public int getNodeValue(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- return this.fNodeValue[var2][var3];
- }
- }
-
- public short getNodeType(int var1) {
- if (var1 == -1) {
- return -1;
- } else {
- int var2 = var1 >> 11;
- int var3 = var1 & 2047;
- return (short)this.fNodeType[var2][var3];
- }
- }
-
- public void putIdentifier(int var1, int var2) {
- if (this.fIdName == null) {
- this.fIdName = new int[64];
- this.fIdElement = new int[64];
- }
-
- if (this.fIdCount == this.fIdName.length) {
- int[] var3 = new int[this.fIdCount * 2];
- System.arraycopy(this.fIdName, 0, var3, 0, this.fIdCount);
- this.fIdName = var3;
- int[] var4 = new int[var3.length];
- System.arraycopy(this.fIdElement, 0, var4, 0, this.fIdCount);
- this.fIdElement = var4;
- }
-
- this.fIdName[this.fIdCount] = var1;
- this.fIdElement[this.fIdCount] = var2;
- ++this.fIdCount;
- }
-
- public void print() {
- }
-
- protected void synchronizeData() {
- super.syncData = false;
- if (this.fIdElement != null) {
- IntVector var1 = new IntVector();
-
- for(int var2 = 0; var2 < this.fIdCount; ++var2) {
- int var3 = this.fIdElement[var2];
- int var4 = this.fIdName[var2];
- if (var4 != -1) {
- var1.removeAllElements();
- int var5 = var3;
-
- do {
- var1.addElement(var5);
- var5 = this.getParentNode(var5);
- } while(var5 != -1);
-
- Object var6 = this;
-
- for(int var7 = var1.size() - 2; var7 >= 0; --var7) {
- var5 = var1.elementAt(var7);
-
- for(Node var8 = ((Node)var6).getFirstChild(); var8 != null; var8 = var8.getNextSibling()) {
- if (var8 instanceof DeferredNode) {
- int var9 = ((DeferredNode)var8).getNodeIndex();
- if (var9 == var5) {
- var6 = var8;
- break;
- }
- }
- }
- }
-
- Element var11 = (Element)var6;
- String var12 = this.fStringPool.toString(var4);
- this.putIdentifier0(var12, var11);
- this.fIdName[var2] = -1;
-
- while(this.fIdElement[var2 + 1] == var3) {
- ++var2;
- var12 = this.fStringPool.toString(this.fIdName[var2]);
- this.putIdentifier0(var12, var11);
- }
- }
- }
- }
-
- }
-
- protected void synchronizeChildren() {
- super.syncChildren = false;
- NodeImpl var1 = null;
-
- for(int var2 = this.getFirstChild(0); var2 != -1; var2 = this.getNextSibling(var2)) {
- NodeImpl var3 = (NodeImpl)this.getNodeObject(var2);
- if (var1 == null) {
- super.firstChild = var3;
- } else {
- var1.nextSibling = var3;
- }
-
- var3.parentNode = this;
- var3.previousSibling = var1;
- var1 = var3;
- short var4 = var3.getNodeType();
- if (var4 == 1) {
- super.docElement = (ElementImpl)var3;
- } else if (var4 == 10) {
- super.docType = (DocumentTypeImpl)var3;
- }
- }
-
- if (var1 != null) {
- super.lastChild = var1;
- }
-
- }
-
- protected boolean ensureCapacity(int var1, int var2) {
- if (this.fNodeType == null) {
- this.fNodeType = new byte[32][];
- this.fNodeName = new int[32][];
- this.fNodeValue = new int[32][];
- this.fNodeParent = new int[32][];
- this.fNodeFirstChild = new int[32][];
- this.fNodeLastChild = new int[32][];
- this.fNodePrevSib = new int[32][];
- this.fNodeNextSib = new int[32][];
- }
-
- try {
- if (this.fNodeType[var1][var2] == 0) {
- return false;
- }
-
- return true;
- } catch (ArrayIndexOutOfBoundsException var6) {
- int var3 = var1 * 2;
- byte[][] var4 = new byte[var3][];
- System.arraycopy(this.fNodeType, 0, var4, 0, var1);
- this.fNodeType = var4;
- int[][] var5 = new int[var3][];
- System.arraycopy(this.fNodeName, 0, var5, 0, var1);
- this.fNodeName = var5;
- var5 = new int[var3][];
- System.arraycopy(this.fNodeValue, 0, var5, 0, var1);
- this.fNodeValue = var5;
- var5 = new int[var3][];
- System.arraycopy(this.fNodeParent, 0, var5, 0, var1);
- this.fNodeParent = var5;
- var5 = new int[var3][];
- System.arraycopy(this.fNodeFirstChild, 0, var5, 0, var1);
- this.fNodeFirstChild = var5;
- var5 = new int[var3][];
- System.arraycopy(this.fNodeLastChild, 0, var5, 0, var1);
- this.fNodeLastChild = var5;
- var5 = new int[var3][];
- System.arraycopy(this.fNodePrevSib, 0, var5, 0, var1);
- this.fNodePrevSib = var5;
- var5 = new int[var3][];
- System.arraycopy(this.fNodeNextSib, 0, var5, 0, var1);
- this.fNodeNextSib = var5;
- } catch (NullPointerException var7) {
- }
-
- this.fNodeType[var1] = new byte[2048];
- this.fNodeName[var1] = new int[2048];
- this.fNodeValue[var1] = new int[2048];
- this.fNodeParent[var1] = new int[2048];
- this.fNodeFirstChild[var1] = new int[2048];
- this.fNodeLastChild[var1] = new int[2048];
- this.fNodePrevSib[var1] = new int[2048];
- this.fNodeNextSib[var1] = new int[2048];
- return true;
- }
-
- protected int createNode(short var1) {
- int var2 = this.fNodeCount >> 11;
- int var3 = this.fNodeCount & 2047;
- this.ensureCapacity(var2, var3);
- this.fNodeType[var2][var3] = (byte)var1;
- this.fNodeName[var2][var3] = -1;
- this.fNodeValue[var2][var3] = -1;
- this.fNodeParent[var2][var3] = -1;
- this.fNodeFirstChild[var2][var3] = -1;
- this.fNodeLastChild[var2][var3] = -1;
- this.fNodePrevSib[var2][var3] = -1;
- this.fNodeNextSib[var2][var3] = -1;
- return this.fNodeCount++;
- }
-
- protected static int binarySearch(int[] var0, int var1, int var2, int var3) {
- while(var1 <= var2) {
- int var4 = (var1 + var2) / 2;
- int var5 = var0[var4];
- if (var5 == var3) {
- while(var4 > 0 && var0[var4 - 1] == var3) {
- --var4;
- }
-
- return var4;
- }
-
- if (var5 > var3) {
- var2 = var4 - 1;
- } else {
- var1 = var4 + 1;
- }
- }
-
- return -1;
- }
-
- private void putIdentifier0(String var1, Element var2) {
- if (super.identifiers == null) {
- super.identifiers = new Hashtable();
- }
-
- super.identifiers.put(var1, var2);
- }
-
- private static void print(int[] var0, int var1, int var2, int var3, int var4) {
- }
- }
-