mmidy 02/04/10 13:33:16
Modified: java/src/org/apache/xml/dtm DTM.java
java/src/org/apache/xml/dtm/ref DTMDefaultBase.java
DTMDefaultBaseIterators.java
DTMDefaultBaseTraversers.java
ExpandedNameTable.java
java/src/org/apache/xml/dtm/ref/dom2dtm DOM2DTM.java
java/src/org/apache/xml/dtm/ref/sax2dtm SAX2DTM.java
Log:
Change extended types to be an integer and use a structure with a localname,
a namespace and a nodetype to represent the node extended type. We no longer
need to do the shifting left and right that we did for the previous extended
types.
Revision Changes Path
1.7 +5 -0 xml-xalan/java/src/org/apache/xml/dtm/DTM.java
Index: DTM.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/DTM.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DTM.java 8 Feb 2002 23:33:49 -0000 1.6
+++ DTM.java 10 Apr 2002 20:33:15 -0000 1.7
@@ -190,6 +190,11 @@
* currently a node type defined by the DOM API.
*/
public static final short NAMESPACE_NODE = 13;
+
+ /**
+ * The number of valid nodetypes.
+ */
+ public static final short NTYPES = 14;
// ========= DTM Implementation Control Functions. ==============
// %TBD% RETIRED -- do via setFeature if needed. Remove from impls.
1.28 +3 -3
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java
Index: DTMDefaultBase.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- DTMDefaultBase.java 9 Apr 2002 19:06:42 -0000 1.27
+++ DTMDefaultBase.java 10 Apr 2002 20:33:16 -0000 1.28
@@ -461,7 +461,7 @@
int info = _exptype(identity);
if (NULL != info)
- return ExpandedNameTable.getType(info);
+ return m_expandedNameTable.getType(info);
else
return NULL;
}
@@ -1572,7 +1572,7 @@
int identity = makeNodeIdentity(nodeHandle);
int expandedNameID = _exptype(identity);
- return ExpandedNameTable.getNamespaceID(expandedNameID);
+ return m_expandedNameTable.getNamespaceID(expandedNameID);
}
/**
@@ -1662,7 +1662,7 @@
*/
public short getNodeType(int nodeHandle)
{
- return (short)(_exptype(makeNodeIdentity(nodeHandle)) >>>
ExpandedNameTable.ROTAMOUNT_TYPE);
+ return
m_expandedNameTable.getType(_exptype(makeNodeIdentity(nodeHandle)));
}
/**
1.12 +1 -1
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java
Index: DTMDefaultBaseIterators.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- DTMDefaultBaseIterators.java 8 Feb 2002 23:33:50 -0000 1.11
+++ DTMDefaultBaseIterators.java 10 Apr 2002 20:33:16 -0000 1.12
@@ -1036,7 +1036,7 @@
return resetPosition();
}
- int type = getExpandedTypeID(node) & ExpandedNameTable.MASK_NODETYPE;
+ int type = m_expandedNameTable.getType(getExpandedTypeID(node));
if(ExpandedNameTable.ATTRIBUTE == type
|| ExpandedNameTable.NAMESPACE == type )
{
1.9 +1 -1
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseTraversers.java
Index: DTMDefaultBaseTraversers.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseTraversers.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- DTMDefaultBaseTraversers.java 27 Nov 2001 00:15:43 -0000 1.8
+++ DTMDefaultBaseTraversers.java 10 Apr 2002 20:33:16 -0000 1.9
@@ -517,7 +517,7 @@
{
return (m_indexing
&& ExpandedNameTable.ELEMENT
- == (expandedTypeID & ExpandedNameTable.MASK_NODETYPE));
+ == m_expandedNameTable.getType(expandedTypeID));
}
/**
1.4 +104 -34
xml-xalan/java/src/org/apache/xml/dtm/ref/ExpandedNameTable.java
Index: ExpandedNameTable.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/ExpandedNameTable.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ExpandedNameTable.java 11 Jul 2001 04:00:13 -0000 1.3
+++ ExpandedNameTable.java 10 Apr 2002 20:33:16 -0000 1.4
@@ -58,6 +58,8 @@
import org.apache.xml.dtm.DTM;
+import java.util.Vector;
+
/**
* This is a default implementation of a table that manages mappings from
* expanded names to expandedNameIDs.
@@ -81,30 +83,27 @@
/** Probably a reference to static pool. */
private DTMStringPool m_namespaceNames;
- public static int BITS_PER_LOCALNAME = 16;
- public static int BITS_PER_NAMESPACE = 10;
-
- public static int MASK_LOCALNAME = 0x0000FFFF;
- public static int MASK_NAMESPACE = 0x03FF0000;
- public static int MASK_NODETYPE = 0xFC000000;
- public static int MASK_NODEHANDLE = 0x000FFFFF;
-
- public static final int ROTAMOUNT_TYPE =
(BITS_PER_NAMESPACE+BITS_PER_LOCALNAME);
+ /** Vector of extended types for this document */
+ private /*static*/ Vector m_extendedTypes;
+ /** Next available extended type */
+ private int m_nextType;
+
// These are all the types prerotated, for caller convenience.
- public static final int ELEMENT = ((int)DTM.ELEMENT_NODE) <<
ROTAMOUNT_TYPE;
- public static final int ATTRIBUTE = ((int)DTM.ATTRIBUTE_NODE) <<
ROTAMOUNT_TYPE;
- public static final int TEXT = ((int)DTM.TEXT_NODE) << ROTAMOUNT_TYPE;
- public static final int CDATA_SECTION = ((int)DTM.CDATA_SECTION_NODE) <<
ROTAMOUNT_TYPE;
- public static final int ENTITY_REFERENCE =
((int)DTM.ENTITY_REFERENCE_NODE) << ROTAMOUNT_TYPE;
- public static final int ENTITY = ((int)DTM.ENTITY_NODE) << ROTAMOUNT_TYPE;
- public static final int PROCESSING_INSTRUCTION =
((int)DTM.PROCESSING_INSTRUCTION_NODE) << ROTAMOUNT_TYPE;
- public static final int COMMENT = ((int)DTM.COMMENT_NODE) <<
ROTAMOUNT_TYPE;
- public static final int DOCUMENT = ((int)DTM.DOCUMENT_NODE) <<
ROTAMOUNT_TYPE;
- public static final int DOCUMENT_TYPE = ((int)DTM.DOCUMENT_TYPE_NODE) <<
ROTAMOUNT_TYPE;
- public static final int DOCUMENT_FRAGMENT
=((int)DTM.DOCUMENT_FRAGMENT_NODE) << ROTAMOUNT_TYPE;
- public static final int NOTATION = ((int)DTM.NOTATION_NODE) <<
ROTAMOUNT_TYPE;
- public static final int NAMESPACE = ((int)DTM.NAMESPACE_NODE) <<
ROTAMOUNT_TYPE;
+ public static final int ELEMENT = ((int)DTM.ELEMENT_NODE) ;
+ public static final int ATTRIBUTE = ((int)DTM.ATTRIBUTE_NODE) ;
+ public static final int TEXT = ((int)DTM.TEXT_NODE) ;
+ public static final int CDATA_SECTION = ((int)DTM.CDATA_SECTION_NODE) ;
+ public static final int ENTITY_REFERENCE =
((int)DTM.ENTITY_REFERENCE_NODE) ;
+ public static final int ENTITY = ((int)DTM.ENTITY_NODE) ;
+ public static final int PROCESSING_INSTRUCTION =
((int)DTM.PROCESSING_INSTRUCTION_NODE) ;
+ public static final int COMMENT = ((int)DTM.COMMENT_NODE) ;
+ public static final int DOCUMENT = ((int)DTM.DOCUMENT_NODE) ;
+ public static final int DOCUMENT_TYPE = ((int)DTM.DOCUMENT_TYPE_NODE) ;
+ public static final int DOCUMENT_FRAGMENT
=((int)DTM.DOCUMENT_FRAGMENT_NODE) ;
+ public static final int NOTATION = ((int)DTM.NOTATION_NODE) ;
+ public static final int NAMESPACE = ((int)DTM.NAMESPACE_NODE) ;
+
/**
* Create an expanded name table that uses private string pool lookup.
@@ -113,6 +112,7 @@
{
m_locNamesPool = new DTMSafeStringPool();
m_namespaceNames = new DTMSafeStringPool();
+ initExtendedTypes();
}
/**
@@ -126,6 +126,22 @@
{
m_locNamesPool = locNamesPool;
m_namespaceNames = namespaceNames;
+ initExtendedTypes();
+ }
+
+ /**
+ * Initialize the vector of extended types with the
+ * basic DOM node types.
+ */
+ private void initExtendedTypes()
+ {
+ m_extendedTypes = new Vector();
+ int i;
+ for (i = 0; i < DTM.NTYPES; i++)
+ {
+ m_extendedTypes.addElement(new ExtendedType(i, "", "") );
+ }
+ m_nextType = m_extendedTypes.size();
}
/**
@@ -141,13 +157,25 @@
*/
public int getExpandedTypeID(String namespace, String localName, int type)
{
- int nsID = (null != namespace) ?
m_namespaceNames.stringToIndex(namespace) : 0;
+ /*int nsID = (null != namespace) ?
m_namespaceNames.stringToIndex(namespace) : 0;
int lnID = m_locNamesPool.stringToIndex(localName);
int expandedTypeID = (type << (BITS_PER_NAMESPACE+BITS_PER_LOCALNAME))
| (nsID << BITS_PER_LOCALNAME) | lnID;
-
return expandedTypeID;
+*/
+ if (null == namespace)
+ namespace = "";
+ if (null == localName)
+ localName = "";
+ for (int i = 0; i < m_extendedTypes.size(); i++)
+ {
+ ExtendedType etype = (ExtendedType)m_extendedTypes.elementAt(i);
+ if( type == etype.nodetype && namespace.equals(etype.namespace) &&
localName.equals(etype.localName))
+ return i;
+ }
+ m_extendedTypes.addElement(new ExtendedType(type, namespace, localName));
+ return m_nextType++;
}
/**
@@ -161,9 +189,17 @@
*/
public int getExpandedTypeID(int type)
{
- int expandedTypeID = (type << (BITS_PER_NAMESPACE+BITS_PER_LOCALNAME));
+ /*int expandedTypeID = (type << (BITS_PER_NAMESPACE+BITS_PER_LOCALNAME));
return expandedTypeID;
+ */
+ for (int i = 0; i < m_extendedTypes.size(); i++)
+ {
+ ExtendedType etype = (ExtendedType)m_extendedTypes.elementAt(i);
+ if( type == etype.nodetype )
+ return i;
+ }
+ return -1; // something's very wrong!
}
/**
@@ -174,7 +210,9 @@
*/
public String getLocalName(int ExpandedNameID)
{
- return m_locNamesPool.indexToString(ExpandedNameID & MASK_LOCALNAME);
+ //return m_locNamesPool.indexToString(ExpandedNameID & MASK_LOCALNAME);
+ ExtendedType etype = (ExtendedType)m_extendedTypes.elementAt
(ExpandedNameID);
+ return etype.localName;
}
/**
@@ -183,9 +221,14 @@
* @param ExpandedNameID an ID that represents an expanded-name.
* @return The id of this local name.
*/
- public static final int getLocalNameID(int ExpandedNameID)
+ public /*static*/ final int getLocalNameID(int ExpandedNameID)
{
- return (ExpandedNameID & MASK_LOCALNAME);
+ //return (ExpandedNameID & MASK_LOCALNAME);
+ ExtendedType etype = (ExtendedType)m_extendedTypes.elementAt
(ExpandedNameID);
+ if (etype.localName.equals(""))
+ return 0;
+ else
+ return ExpandedNameID;
}
@@ -199,8 +242,10 @@
public String getNamespace(int ExpandedNameID)
{
- int id = (ExpandedNameID & MASK_NAMESPACE) >> BITS_PER_LOCALNAME;
- return (0 == id) ? null : m_namespaceNames.indexToString(id);
+ //int id = (ExpandedNameID & MASK_NAMESPACE) >> BITS_PER_LOCALNAME;
+ //return (0 == id) ? null : m_namespaceNames.indexToString(id);
+ ExtendedType etype = (ExtendedType)m_extendedTypes.elementAt
(ExpandedNameID);
+ return (etype.namespace.equals("") ? null : etype.namespace);
}
/**
@@ -209,9 +254,14 @@
* @param ExpandedNameID an ID that represents an expanded-name.
* @return The id of this namespace.
*/
- public static final int getNamespaceID(int ExpandedNameID)
+ public /*static*/ final int getNamespaceID(int ExpandedNameID)
{
- return (ExpandedNameID & MASK_NAMESPACE) >> BITS_PER_LOCALNAME;
+ //return (ExpandedNameID & MASK_NAMESPACE) >> BITS_PER_LOCALNAME;
+ ExtendedType etype = (ExtendedType)m_extendedTypes.elementAt
(ExpandedNameID);
+ if (etype.namespace.equals(""))
+ return 0;
+ else
+ return ExpandedNameID;
}
/**
@@ -220,9 +270,29 @@
* @param ExpandedNameID an ID that represents an expanded-name.
* @return The id of this local name.
*/
- public static final short getType(int ExpandedNameID)
+ public final short getType(int ExpandedNameID)
{
- return (short)(ExpandedNameID >> ROTAMOUNT_TYPE);
+ //return (short)(ExpandedNameID >> ROTAMOUNT_TYPE);
+ ExtendedType etype = (ExtendedType)m_extendedTypes.elementAt
(ExpandedNameID);
+ return (short)etype.nodetype;
+ }
+
+
+ /**
+ * Private class representing an extended type object
+ */
+ private class ExtendedType
+ {
+ private int nodetype;
+ private String namespace;
+ private String localName;
+
+ private ExtendedType (int nodetype, String namespace, String localName)
+ {
+ this.nodetype = nodetype;
+ this.namespace = namespace;
+ this.localName = localName;
+ }
}
}
1.28 +1 -1
xml-xalan/java/src/org/apache/xml/dtm/ref/dom2dtm/DOM2DTM.java
Index: DOM2DTM.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/dom2dtm/DOM2DTM.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- DOM2DTM.java 18 Dec 2001 21:55:33 -0000 1.27
+++ DOM2DTM.java 10 Apr 2002 20:33:16 -0000 1.28
@@ -1232,7 +1232,7 @@
// time, and was wrong anyway since it wasn't coverting handle to
// identity. Inlined it.
int type = _exptype(makeNodeIdentity(nodeHandle));
- type=(NULL != type) ? ExpandedNameTable.getType(type) : NULL;
+ type=(NULL != type) ? getNodeType(nodeHandle) : NULL;
if(TEXT_NODE!=type && CDATA_SECTION_NODE!=type)
return getNode(nodeHandle).getNodeValue();
1.28 +3 -6
xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java
Index: SAX2DTM.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/SAX2DTM.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- SAX2DTM.java 6 Feb 2002 17:46:45 -0000 1.27
+++ SAX2DTM.java 10 Apr 2002 20:33:16 -0000 1.28
@@ -570,9 +570,7 @@
int expandedTypeID = getExpandedTypeID(nodeHandle);
// If just testing nonzero, no need to shift...
- //int namespaceID = (expandedTypeID & ExpandedNameTable.MASK_NAMESPACE)
- // >> ExpandedNameTable.BITS_PER_LOCALNAME;
- int namespaceID = (expandedTypeID & ExpandedNameTable.MASK_NAMESPACE);
+ int namespaceID = m_expandedNameTable.getNamespaceID(expandedTypeID);
if (0 == namespaceID)
{
@@ -619,9 +617,8 @@
public String getNodeNameX(int nodeHandle)
{
- int expandedTypeID = getExpandedTypeID(nodeHandle);
- int namespaceID = (expandedTypeID & ExpandedNameTable.MASK_NAMESPACE)
- >> ExpandedNameTable.BITS_PER_LOCALNAME;
+ int expandedTypeID = getExpandedTypeID(nodeHandle);
+ int namespaceID = m_expandedNameTable.getNamespaceID(expandedTypeID);
if (0 == namespaceID)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]