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