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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to