You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2002/09/21 19:53:24 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom DOMAdapter.java
santiagopg 2002/09/21 10:53:24
Modified: java/src/org/apache/xalan/xsltc/dom DOMAdapter.java
Log:
Lazy computation of mappings and reverse mappings.
Revision Changes Path
1.14 +63 -30 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMAdapter.java
Index: DOMAdapter.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMAdapter.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- DOMAdapter.java 21 Jun 2002 15:36:01 -0000 1.13
+++ DOMAdapter.java 21 Sep 2002 17:53:23 -0000 1.14
@@ -75,10 +75,14 @@
public final class DOMAdapter implements DOM {
private final DOMImpl _domImpl;
- private short[] _mapping;
- private short[] _reverse;
- private short[] _NSmapping;
- private short[] _NSreverse;
+ private String[] _namesArray;
+ private String[] _namespaceArray;
+
+ // Cached mappings
+ private short[] _mapping = null;
+ private short[] _reverse = null;
+ private short[] _NSmapping = null;
+ private short[] _NSreverse = null;
private StripFilter _filter = null;
@@ -89,17 +93,41 @@
String[] namespaceArray)
{
_domImpl = dom;
- _mapping = dom.getMapping(namesArray);
- _reverse = dom.getReverseMapping(namesArray);
- _NSmapping = dom.getNamespaceMapping(namespaceArray);
- _NSreverse = dom.getReverseNamespaceMapping(namespaceArray);
+ _namesArray = namesArray;
+ _namespaceArray = namespaceArray;
}
public void setupMapping(String[] names, String[] namespaces) {
- _mapping = _domImpl.getMapping(names);
- _reverse = _domImpl.getReverseMapping(names);
- _NSmapping = _domImpl.getNamespaceMapping(namespaces);
- _NSreverse = _domImpl.getReverseNamespaceMapping(namespaces);
+ _namesArray = names;
+ _namespaceArray = namespaces;
+ }
+
+ private short[] getMapping() {
+ if (_mapping == null) {
+ _mapping = _domImpl.getMapping(_namesArray);
+ }
+ return _mapping;
+ }
+
+ private short[] getReverse() {
+ if (_reverse == null) {
+ _reverse = _domImpl.getReverseMapping(_namesArray);
+ }
+ return _reverse;
+ }
+
+ private short[] getNSMapping() {
+ if (_NSmapping == null) {
+ _NSmapping = _domImpl.getNamespaceMapping(_namespaceArray);
+ }
+ return _NSmapping;
+ }
+
+ private short[] getNSReverse() {
+ if (_NSreverse == null) {
+ _NSreverse = _domImpl.getReverseNamespaceMapping(_namespaceArray);
+ }
+ return _NSreverse;
}
/**
@@ -131,7 +159,8 @@
return iterator.setStartNode(node);
}
else {
- iterator = _domImpl.strippingIterator(iterator, _mapping, _filter);
+ iterator = _domImpl.strippingIterator(iterator, getMapping(),
+ _filter);
return iterator.setStartNode(node);
}
}
@@ -141,45 +170,49 @@
}
public NodeIterator getTypedChildren(final int type) {
- NodeIterator iterator = _domImpl.getTypedChildren(_reverse[type]);
- if (_reverse[type] == DOM.TEXT && _filter != null) {
- return _domImpl.strippingIterator(iterator,_mapping,_filter);
+ final short[] reverse = getReverse();
+
+ NodeIterator iterator = _domImpl.getTypedChildren(reverse[type]);
+ if (reverse[type] == DOM.TEXT && _filter != null) {
+ return _domImpl.strippingIterator(iterator, getMapping(), _filter);
}
return iterator;
}
public NodeIterator getNamespaceAxisIterator(final int axis, final int ns) {
- return _domImpl.getNamespaceAxisIterator(axis,_NSreverse[ns]);
+ return _domImpl.getNamespaceAxisIterator(axis, getNSReverse()[ns]);
}
public NodeIterator getAxisIterator(final int axis) {
NodeIterator iterator = _domImpl.getAxisIterator(axis);
if (_filter != null) {
- return _domImpl.strippingIterator(iterator, _mapping, _filter);
+ return _domImpl.strippingIterator(iterator, getMapping(), _filter);
}
return iterator;
}
public NodeIterator getTypedAxisIterator(final int axis, final int type) {
NodeIterator iterator;
+ final short[] reverse = getReverse();
+ final short[] NSreverse = getNSReverse();
if (axis == Axis.NAMESPACE) {
- iterator = (type == NO_TYPE || type > _NSreverse.length) ?
+ iterator = (type == NO_TYPE || type > NSreverse.length) ?
_domImpl.getAxisIterator(axis) :
- _domImpl.getTypedAxisIterator(axis,_NSreverse[type]);
+ _domImpl.getTypedAxisIterator(axis, NSreverse[type]);
}
else {
- iterator = _domImpl.getTypedAxisIterator(axis, _reverse[type]);
+ iterator = _domImpl.getTypedAxisIterator(axis, reverse[type]);
}
- if (_reverse[type] == DOM.TEXT && _filter != null) {
- iterator = _domImpl.strippingIterator(iterator, _mapping, _filter);
+ if (reverse[type] == DOM.TEXT && _filter != null) {
+ iterator = _domImpl.strippingIterator(iterator, getMapping(), _filter);
}
return iterator;
}
public NodeIterator getNthDescendant(int type, int n, boolean includeself) {
- return _domImpl.getNthDescendant(_reverse[type], n, includeself);
+ return _domImpl.getNthDescendant(getReverse()[type], n, includeself);
}
public NodeIterator getNodeValueIterator(NodeIterator iterator, int type,
@@ -193,11 +226,11 @@
}
public int getType(final int node) {
- return _mapping[_domImpl.getType(node)];
+ return getMapping()[_domImpl.getType(node)];
}
public int getNamespaceType(final int node) {
- return _NSmapping[_domImpl.getNamespaceType(node)];
+ return getNSMapping()[_domImpl.getNamespaceType(node)];
}
public int getParent(final int node) {
@@ -205,15 +238,15 @@
}
public int getTypedPosition(int type, int node) {
- return _domImpl.getTypedPosition(_reverse[type], node);
+ return _domImpl.getTypedPosition(getReverse()[type], node);
}
public int getTypedLast(int type, int node) {
- return _domImpl.getTypedLast(_reverse[type], node);
+ return _domImpl.getTypedLast(getReverse()[type], node);
}
public int getAttributeNode(final int type, final int element) {
- return _domImpl.getAttributeNode(_reverse[type], element);
+ return _domImpl.getAttributeNode(getReverse()[type], element);
}
public String getNodeName(final int node) {
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org