lmartin 2003/03/25 12:49:39 Modified: java/src/org/apache/xerces/dom CoreDocumentImpl.java Log: added support for ordering disconnected nodes - needed for compareDocumentPosition Revision Changes Path 1.40 +53 -1 xml-xerces/java/src/org/apache/xerces/dom/CoreDocumentImpl.java Index: CoreDocumentImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/CoreDocumentImpl.java,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- CoreDocumentImpl.java 21 Jan 2003 17:54:57 -0000 1.39 +++ CoreDocumentImpl.java 25 Mar 2003 20:49:38 -0000 1.40 @@ -210,6 +210,17 @@ /** Bypass error checking. */ protected boolean errorChecking = true; + /** The following are required for compareDocumentPosition + */ + // Document number. Documents are ordered across the implementation using + // positive integer values. Documents are assigned numbers on demand. + private int documentNumber=0; + // Node counter and table. Used to assign numbers to nodes for this + // document. Node number values are negative integers. Nodes are + // assigned numbers on demand. + private int nodeCounter = 0; + private Hashtable nodeTable; + // // Static initialization // @@ -1229,6 +1240,47 @@ } // createElementDefinition(String):ElementDefinitionImpl // other non-DOM methods + + /** NON-DOM: Get the number associated with this document. Used to + order documents in the implementation. + */ + protected int getNodeNumber() { + if (documentNumber==0) { + + CoreDOMImplementationImpl cd = (CoreDOMImplementationImpl)CoreDOMImplementationImpl.getDOMImplementation(); + documentNumber = cd.assignDocumentNumber(); + } + return documentNumber; + } + + + /** NON-DOM: Get a number associated with a node created with respect + to this document. Needed for compareDocumentPosition when nodes + are disconnected. This is only used on demand. + */ + protected int getNodeNumber(Node node) { + + // Check if the node is already in the hash + // If so, retrieve the node number + // If not, assign a number to the node + // Node numbers are negative, from -1 to -n + int num; + if (nodeTable == null) { + nodeTable = new Hashtable(); + num = --nodeCounter; + nodeTable.put(node, new Integer(num)); + } + else { + Integer n = (Integer)nodeTable.get(node); + if (n== null) { + num = --nodeCounter; + nodeTable.put(node, new Integer(num)); + } + else + num = n.intValue(); + } + return num; + } /** * Copies a node from another document to this document. The new nodes are
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]