OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / libcore / luni / src / main / java / org / apache / xpath / axes / ChildIterator.java
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the  "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 /*
19  * $Id: ChildIterator.java 468655 2006-10-28 07:12:06Z minchau $
20  */
21 package org.apache.xpath.axes;
22
23 import org.apache.xml.dtm.DTM;
24 import org.apache.xml.dtm.DTMFilter;
25 import org.apache.xpath.XPathContext;
26 import org.apache.xpath.compiler.Compiler;
27
28 /**
29  * This class implements an optimized iterator for
30  * "node()" patterns, that is, any children of the
31  * context node.
32  * @see org.apache.xpath.axes.LocPathIterator
33  * @xsl.usage advanced
34  */
35 public class ChildIterator extends LocPathIterator
36 {
37     static final long serialVersionUID = -6935428015142993583L;
38
39   /**
40    * Create a ChildIterator object.
41    *
42    * @param compiler A reference to the Compiler that contains the op map.
43    * @param opPos The position within the op map, which contains the
44    * location path expression for this itterator.
45    * @param analysis Analysis bits of the entire pattern.
46    *
47    * @throws javax.xml.transform.TransformerException
48    */
49   ChildIterator(Compiler compiler, int opPos, int analysis)
50           throws javax.xml.transform.TransformerException
51   {
52     super(compiler, opPos, analysis, false);
53
54     // This iterator matches all kinds of nodes
55     initNodeTest(DTMFilter.SHOW_ALL);
56   }
57   
58   /**
59    * Return the first node out of the nodeset, if this expression is 
60    * a nodeset expression.  This is the default implementation for 
61    * nodesets.
62    * <p>WARNING: Do not mutate this class from this function!</p>
63    * @param xctxt The XPath runtime context.
64    * @return the first node out of the nodeset, or DTM.NULL.
65    */
66   public int asNode(XPathContext xctxt)
67     throws javax.xml.transform.TransformerException
68   {
69     int current = xctxt.getCurrentNode();
70     
71     DTM dtm = xctxt.getDTM(current);
72     
73     return dtm.getFirstChild(current);
74   }
75
76   /**
77    *  Returns the next node in the set and advances the position of the
78    * iterator in the set. After a NodeIterator is created, the first call
79    * to nextNode() returns the first node in the set.
80    *
81    * @return  The next <code>Node</code> in the set being iterated over, or
82    *   <code>null</code> if there are no more members in that set.
83    */
84   public int nextNode()
85   {
86         if(m_foundLast)
87                 return DTM.NULL;
88
89     int next;
90
91     m_lastFetched = next = (DTM.NULL == m_lastFetched)
92                            ? m_cdtm.getFirstChild(m_context)
93                            : m_cdtm.getNextSibling(m_lastFetched);
94
95     // m_lastFetched = next;
96     if (DTM.NULL != next)
97     {
98       m_pos++;
99       return next;
100     }
101     else
102     {
103       m_foundLast = true;
104
105       return DTM.NULL;
106     }
107   }
108   
109   /**
110    * Returns the axis being iterated, if it is known.
111    * 
112    * @return Axis.CHILD, etc., or -1 if the axis is not known or is of multiple 
113    * types.
114    */
115   public int getAxis()
116   {
117     return org.apache.xml.dtm.Axis.CHILD;
118   }
119
120
121 }