zongaro 2002/12/17 11:06:42
Modified: java/src/org/apache/xml/dtm/ref Tag: XSLTC_DTM
DTMDefaultBase.java DTMDefaultBaseIterators.java
Log:
Added getFirstAttributeIdentity and getNextAttributeIdentity methods to
DTMDefaultBase that take a node identity as input and return a node identity.
That avoids some overhead of decoding a handle when iterating through
attributes.
Revision Changes Path
No revision
No revision
1.28.2.7 +39 -25
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.28.2.6
retrieving revision 1.28.2.7
diff -u -r1.28.2.6 -r1.28.2.7
--- DTMDefaultBase.java 10 Dec 2002 18:48:44 -0000 1.28.2.6
+++ DTMDefaultBase.java 17 Dec 2002 19:06:41 -0000 1.28.2.7
@@ -552,7 +552,6 @@
*/
protected int _nextsib(int identity)
{
-
// Boiler-plate code for each of the _xxx functions, except for the
array.
int info = (identity >= m_size) ? NOTPROCESSED :
m_nextsib.elementAt(identity);
@@ -1040,15 +1039,23 @@
*/
public int getFirstAttribute(int nodeHandle)
{
+ int nodeID = makeNodeIdentity(nodeHandle);
- int type = getNodeType(nodeHandle);
+ return makeNodeHandle(getFirstAttributeIdentity(nodeID));
+ }
+
+ /**
+ * Given a node identity, get the index of the node's first attribute.
+ *
+ * @param identity int identity of the node.
+ * @return Identity of first attribute, or DTM.NULL to indicate none
exists.
+ */
+ protected int getFirstAttributeIdentity(int identity) {
+ int type = _type(identity);
if (DTM.ELEMENT_NODE == type)
{
-
// Assume that attributes and namespaces immediately follow the
element.
- int identity = makeNodeIdentity(nodeHandle);
-
while (DTM.NULL != (identity = getNextNodeIdentity(identity)))
{
@@ -1057,7 +1064,7 @@
if (type == DTM.ATTRIBUTE_NODE)
{
- return makeNodeHandle(identity);
+ return identity;
}
else if (DTM.NAMESPACE_NODE != type)
{
@@ -1163,28 +1170,35 @@
* @return int DTM node-number of the resolved attr,
* or DTM.NULL to indicate none exists.
*/
- public int getNextAttribute(int nodeHandle)
- {
-
- int type = getNodeType(nodeHandle);
+ public int getNextAttribute(int nodeHandle) {
+ int nodeID = makeNodeIdentity(nodeHandle);
- if (DTM.ATTRIBUTE_NODE == type)
- {
- // Assume that attributes and namespace nodes immediately follow the
element.
- int identity = makeNodeIdentity(nodeHandle);
+ if (_type(nodeID) == DTM.ATTRIBUTE_NODE) {
+ return makeNodeHandle(getNextAttributeIdentity(nodeID));
+ }
- while (DTM.NULL != (identity = getNextNodeIdentity(identity)))
- {
- type = _type(identity);
+ return DTM.NULL;
+ }
- if (type == DTM.ATTRIBUTE_NODE)
- {
- return makeNodeHandle(identity);
- }
- else if (type != DTM.NAMESPACE_NODE)
- {
- break;
- }
+ /**
+ * Given a node identity for an attribute, advance to the next attribute.
+ *
+ * @param identity int identity of the attribute node. This
+ * <strong>must</strong> be an attribute node.
+ *
+ * @return int DTM node-identity of the resolved attr,
+ * or DTM.NULL to indicate none exists.
+ *
+ */
+ protected int getNextAttributeIdentity(int identity) {
+ // Assume that attributes and namespace nodes immediately follow the
element
+ while (DTM.NULL != (identity = getNextNodeIdentity(identity))) {
+ int type = _type(identity);
+
+ if (type == DTM.ATTRIBUTE_NODE) {
+ return identity;
+ } else if (type != DTM.NAMESPACE_NODE) {
+ break;
}
}
1.12.2.9 +6 -3
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.12.2.8
retrieving revision 1.12.2.9
diff -u -r1.12.2.8 -r1.12.2.9
--- DTMDefaultBaseIterators.java 8 Dec 2002 12:08:14 -0000 1.12.2.8
+++ DTMDefaultBaseIterators.java 17 Dec 2002 19:06:41 -0000 1.12.2.9
@@ -943,7 +943,7 @@
if (_isRestartable)
{
_startNode = node;
- _currentNode = getFirstAttribute(node);
+ _currentNode = getFirstAttributeIdentity(makeNodeIdentity(node));
return resetPosition();
}
@@ -961,9 +961,12 @@
final int node = _currentNode;
- _currentNode = getNextAttribute(node);
+ if (node != NULL) {
+ _currentNode = getNextAttributeIdentity(node);
+ return returnNode(makeNodeHandle(node));
+ }
- return returnNode(node);
+ return NULL;
}
} // end of AttributeIterator
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]