<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the  "License");<a name="line.6"></a>
<FONT color="green">007</FONT>     * you may not use this file except in compliance with the License.<a name="line.7"></a>
<FONT color="green">008</FONT>     * You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<FONT color="green">013</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<FONT color="green">014</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<FONT color="green">015</FONT>     * See the License for the specific language governing permissions and<a name="line.15"></a>
<FONT color="green">016</FONT>     * limitations under the License.<a name="line.16"></a>
<FONT color="green">017</FONT>     */<a name="line.17"></a>
<FONT color="green">018</FONT>    /*<a name="line.18"></a>
<FONT color="green">019</FONT>     * $Id: SAX2DTM2.java 468653 2006-10-28 07:07:05Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xml.dtm.ref.sax2dtm;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.xml.dtm.*;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.xml.dtm.ref.*;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.xml.utils.FastStringBuffer;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.xml.utils.XMLString;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.xml.utils.XMLStringDefault;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.xml.utils.XMLStringFactory;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.xml.res.XMLMessages;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.xml.res.XMLErrorResources;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.xml.serializer.SerializationHandler;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>    import javax.xml.transform.Source;<a name="line.33"></a>
<FONT color="green">034</FONT>    import java.util.Vector;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.xml.utils.SuballocatedIntVector;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.xml.sax.*;<a name="line.36"></a>
<FONT color="green">037</FONT>    <a name="line.37"></a>
<FONT color="green">038</FONT>    /**<a name="line.38"></a>
<FONT color="green">039</FONT>     * SAX2DTM2 is an optimized version of SAX2DTM which is used in non-incremental situation.<a name="line.39"></a>
<FONT color="green">040</FONT>     * It is used as the super class of the XSLTC SAXImpl. Many of the interfaces in SAX2DTM<a name="line.40"></a>
<FONT color="green">041</FONT>     * and DTMDefaultBase are overridden in SAX2DTM2 in order to allow fast, efficient<a name="line.41"></a>
<FONT color="green">042</FONT>     * access to the DTM model. Some nested iterators in DTMDefaultBaseIterators<a name="line.42"></a>
<FONT color="green">043</FONT>     * are also overridden in SAX2DTM2 for performance reasons.<a name="line.43"></a>
<FONT color="green">044</FONT>     * &lt;p&gt;<a name="line.44"></a>
<FONT color="green">045</FONT>     * Performance is the biggest consideration in the design of SAX2DTM2. To make the code most<a name="line.45"></a>
<FONT color="green">046</FONT>     * efficient, the incremental support is dropped in SAX2DTM2, which means that you should not<a name="line.46"></a>
<FONT color="green">047</FONT>     * use it in incremental situation. To reduce the overhead of pulling data from the DTM model,<a name="line.47"></a>
<FONT color="green">048</FONT>     * a few core interfaces in SAX2DTM2 have direct access to the internal arrays of the<a name="line.48"></a>
<FONT color="green">049</FONT>     * SuballocatedIntVectors.<a name="line.49"></a>
<FONT color="green">050</FONT>     * &lt;p&gt;<a name="line.50"></a>
<FONT color="green">051</FONT>     * The design of SAX2DTM2 may limit its extensibilty. If you have a reason to extend the<a name="line.51"></a>
<FONT color="green">052</FONT>     * SAX2DTM model, please extend from SAX2DTM instead of this class.<a name="line.52"></a>
<FONT color="green">053</FONT>     * &lt;p&gt;<a name="line.53"></a>
<FONT color="green">054</FONT>     * TODO: This class is currently only used by XSLTC. We need to investigate the possibility<a name="line.54"></a>
<FONT color="green">055</FONT>     * of also using it in Xalan-J Interpretive. Xalan's performance is likely to get an instant<a name="line.55"></a>
<FONT color="green">056</FONT>     * boost if we use SAX2DTM2 instead of SAX2DTM in non-incremental case.<a name="line.56"></a>
<FONT color="green">057</FONT>     * &lt;p&gt;<a name="line.57"></a>
<FONT color="green">058</FONT>     * %MK% The code in this class is critical to the XSLTC_DTM performance. Be very careful<a name="line.58"></a>
<FONT color="green">059</FONT>     * when making changes here!<a name="line.59"></a>
<FONT color="green">060</FONT>     */<a name="line.60"></a>
<FONT color="green">061</FONT>    public class SAX2DTM2 extends SAX2DTM<a name="line.61"></a>
<FONT color="green">062</FONT>    {<a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>      /****************************************************************<a name="line.64"></a>
<FONT color="green">065</FONT>       *       Optimized version of the nested iterators<a name="line.65"></a>
<FONT color="green">066</FONT>       ****************************************************************/<a name="line.66"></a>
<FONT color="green">067</FONT>    <a name="line.67"></a>
<FONT color="green">068</FONT>      /**<a name="line.68"></a>
<FONT color="green">069</FONT>       * Iterator that returns all immediate children of a given node<a name="line.69"></a>
<FONT color="green">070</FONT>       */<a name="line.70"></a>
<FONT color="green">071</FONT>      public final class ChildrenIterator extends InternalAxisIteratorBase<a name="line.71"></a>
<FONT color="green">072</FONT>      {<a name="line.72"></a>
<FONT color="green">073</FONT>    <a name="line.73"></a>
<FONT color="green">074</FONT>        /**<a name="line.74"></a>
<FONT color="green">075</FONT>         * Setting start to END should 'close' the iterator,<a name="line.75"></a>
<FONT color="green">076</FONT>         * i.e. subsequent call to next() should return END.<a name="line.76"></a>
<FONT color="green">077</FONT>         * &lt;p&gt;<a name="line.77"></a>
<FONT color="green">078</FONT>         * If the iterator is not restartable, this has no effect.<a name="line.78"></a>
<FONT color="green">079</FONT>         * %REVIEW% Should it return/throw something in that case,<a name="line.79"></a>
<FONT color="green">080</FONT>         * or set current node to END, to indicate request-not-honored?<a name="line.80"></a>
<FONT color="green">081</FONT>         *<a name="line.81"></a>
<FONT color="green">082</FONT>         * @param node Sets the root of the iteration.<a name="line.82"></a>
<FONT color="green">083</FONT>         *<a name="line.83"></a>
<FONT color="green">084</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.84"></a>
<FONT color="green">085</FONT>         */<a name="line.85"></a>
<FONT color="green">086</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.86"></a>
<FONT color="green">087</FONT>        {<a name="line.87"></a>
<FONT color="green">088</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.88"></a>
<FONT color="green">089</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.89"></a>
<FONT color="green">090</FONT>            node = getDocument();<a name="line.90"></a>
<FONT color="green">091</FONT>          if (_isRestartable)<a name="line.91"></a>
<FONT color="green">092</FONT>          {<a name="line.92"></a>
<FONT color="green">093</FONT>            _startNode = node;<a name="line.93"></a>
<FONT color="green">094</FONT>            _currentNode = (node == DTM.NULL) ? DTM.NULL<a name="line.94"></a>
<FONT color="green">095</FONT>                                              : _firstch2(makeNodeIdentity(node));<a name="line.95"></a>
<FONT color="green">096</FONT>    <a name="line.96"></a>
<FONT color="green">097</FONT>            return resetPosition();<a name="line.97"></a>
<FONT color="green">098</FONT>          }<a name="line.98"></a>
<FONT color="green">099</FONT>    <a name="line.99"></a>
<FONT color="green">100</FONT>          return this;<a name="line.100"></a>
<FONT color="green">101</FONT>        }<a name="line.101"></a>
<FONT color="green">102</FONT>    <a name="line.102"></a>
<FONT color="green">103</FONT>        /**<a name="line.103"></a>
<FONT color="green">104</FONT>         * Get the next node in the iteration.<a name="line.104"></a>
<FONT color="green">105</FONT>         *<a name="line.105"></a>
<FONT color="green">106</FONT>         * @return The next node handle in the iteration, or END if no more<a name="line.106"></a>
<FONT color="green">107</FONT>         * are available.<a name="line.107"></a>
<FONT color="green">108</FONT>         */<a name="line.108"></a>
<FONT color="green">109</FONT>        public int next()<a name="line.109"></a>
<FONT color="green">110</FONT>        {<a name="line.110"></a>
<FONT color="green">111</FONT>          if (_currentNode != NULL) {<a name="line.111"></a>
<FONT color="green">112</FONT>            int node = _currentNode;<a name="line.112"></a>
<FONT color="green">113</FONT>            _currentNode = _nextsib2(node);<a name="line.113"></a>
<FONT color="green">114</FONT>            return returnNode(makeNodeHandle(node));<a name="line.114"></a>
<FONT color="green">115</FONT>          }<a name="line.115"></a>
<FONT color="green">116</FONT>    <a name="line.116"></a>
<FONT color="green">117</FONT>          return END;<a name="line.117"></a>
<FONT color="green">118</FONT>        }<a name="line.118"></a>
<FONT color="green">119</FONT>      }  // end of ChildrenIterator<a name="line.119"></a>
<FONT color="green">120</FONT>    <a name="line.120"></a>
<FONT color="green">121</FONT>      /**<a name="line.121"></a>
<FONT color="green">122</FONT>       * Iterator that returns the parent of a given node. Note that<a name="line.122"></a>
<FONT color="green">123</FONT>       * this delivers only a single node; if you want all the ancestors,<a name="line.123"></a>
<FONT color="green">124</FONT>       * see AncestorIterator.<a name="line.124"></a>
<FONT color="green">125</FONT>       */<a name="line.125"></a>
<FONT color="green">126</FONT>      public final class ParentIterator extends InternalAxisIteratorBase<a name="line.126"></a>
<FONT color="green">127</FONT>      {<a name="line.127"></a>
<FONT color="green">128</FONT>    <a name="line.128"></a>
<FONT color="green">129</FONT>        /** The extended type ID that was requested. */<a name="line.129"></a>
<FONT color="green">130</FONT>        private int _nodeType = DTM.NULL;<a name="line.130"></a>
<FONT color="green">131</FONT>    <a name="line.131"></a>
<FONT color="green">132</FONT>        /**<a name="line.132"></a>
<FONT color="green">133</FONT>         * Set start to END should 'close' the iterator,<a name="line.133"></a>
<FONT color="green">134</FONT>         * i.e. subsequent call to next() should return END.<a name="line.134"></a>
<FONT color="green">135</FONT>         *<a name="line.135"></a>
<FONT color="green">136</FONT>         * @param node Sets the root of the iteration.<a name="line.136"></a>
<FONT color="green">137</FONT>         *<a name="line.137"></a>
<FONT color="green">138</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.138"></a>
<FONT color="green">139</FONT>         */<a name="line.139"></a>
<FONT color="green">140</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.140"></a>
<FONT color="green">141</FONT>        {<a name="line.141"></a>
<FONT color="green">142</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.142"></a>
<FONT color="green">143</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.143"></a>
<FONT color="green">144</FONT>            node = getDocument();<a name="line.144"></a>
<FONT color="green">145</FONT>          if (_isRestartable)<a name="line.145"></a>
<FONT color="green">146</FONT>          {<a name="line.146"></a>
<FONT color="green">147</FONT>            _startNode = node;<a name="line.147"></a>
<FONT color="green">148</FONT>    <a name="line.148"></a>
<FONT color="green">149</FONT>            if (node != DTM.NULL)<a name="line.149"></a>
<FONT color="green">150</FONT>              _currentNode = _parent2(makeNodeIdentity(node));<a name="line.150"></a>
<FONT color="green">151</FONT>            else<a name="line.151"></a>
<FONT color="green">152</FONT>              _currentNode = DTM.NULL;<a name="line.152"></a>
<FONT color="green">153</FONT>    <a name="line.153"></a>
<FONT color="green">154</FONT>            return resetPosition();<a name="line.154"></a>
<FONT color="green">155</FONT>          }<a name="line.155"></a>
<FONT color="green">156</FONT>    <a name="line.156"></a>
<FONT color="green">157</FONT>          return this;<a name="line.157"></a>
<FONT color="green">158</FONT>        }<a name="line.158"></a>
<FONT color="green">159</FONT>    <a name="line.159"></a>
<FONT color="green">160</FONT>        /**<a name="line.160"></a>
<FONT color="green">161</FONT>         * Set the node type of the parent that we're looking for.<a name="line.161"></a>
<FONT color="green">162</FONT>         * Note that this does _not_ mean "find the nearest ancestor of<a name="line.162"></a>
<FONT color="green">163</FONT>         * this type", but "yield the parent if it is of this type".<a name="line.163"></a>
<FONT color="green">164</FONT>         *<a name="line.164"></a>
<FONT color="green">165</FONT>         *<a name="line.165"></a>
<FONT color="green">166</FONT>         * @param type extended type ID.<a name="line.166"></a>
<FONT color="green">167</FONT>         *<a name="line.167"></a>
<FONT color="green">168</FONT>         * @return ParentIterator configured with the type filter set.<a name="line.168"></a>
<FONT color="green">169</FONT>         */<a name="line.169"></a>
<FONT color="green">170</FONT>        public DTMAxisIterator setNodeType(final int type)<a name="line.170"></a>
<FONT color="green">171</FONT>        {<a name="line.171"></a>
<FONT color="green">172</FONT>    <a name="line.172"></a>
<FONT color="green">173</FONT>          _nodeType = type;<a name="line.173"></a>
<FONT color="green">174</FONT>    <a name="line.174"></a>
<FONT color="green">175</FONT>          return this;<a name="line.175"></a>
<FONT color="green">176</FONT>        }<a name="line.176"></a>
<FONT color="green">177</FONT>    <a name="line.177"></a>
<FONT color="green">178</FONT>        /**<a name="line.178"></a>
<FONT color="green">179</FONT>         * Get the next node in the iteration. In this case, we return<a name="line.179"></a>
<FONT color="green">180</FONT>         * only the immediate parent, _if_ it matches the requested nodeType.<a name="line.180"></a>
<FONT color="green">181</FONT>         *<a name="line.181"></a>
<FONT color="green">182</FONT>         * @return The next node handle in the iteration, or END.<a name="line.182"></a>
<FONT color="green">183</FONT>         */<a name="line.183"></a>
<FONT color="green">184</FONT>        public int next()<a name="line.184"></a>
<FONT color="green">185</FONT>        {<a name="line.185"></a>
<FONT color="green">186</FONT>          int result = _currentNode;<a name="line.186"></a>
<FONT color="green">187</FONT>          if (result == END)<a name="line.187"></a>
<FONT color="green">188</FONT>            return DTM.NULL;<a name="line.188"></a>
<FONT color="green">189</FONT>    <a name="line.189"></a>
<FONT color="green">190</FONT>          // %OPT% The most common case is handled first.<a name="line.190"></a>
<FONT color="green">191</FONT>          if (_nodeType == NULL) {<a name="line.191"></a>
<FONT color="green">192</FONT>            _currentNode = END;<a name="line.192"></a>
<FONT color="green">193</FONT>            return returnNode(makeNodeHandle(result));<a name="line.193"></a>
<FONT color="green">194</FONT>          }<a name="line.194"></a>
<FONT color="green">195</FONT>          else if (_nodeType &gt;= DTM.NTYPES) {<a name="line.195"></a>
<FONT color="green">196</FONT>            if (_nodeType == _exptype2(result)) {<a name="line.196"></a>
<FONT color="green">197</FONT>              _currentNode = END;<a name="line.197"></a>
<FONT color="green">198</FONT>              return returnNode(makeNodeHandle(result));<a name="line.198"></a>
<FONT color="green">199</FONT>            }<a name="line.199"></a>
<FONT color="green">200</FONT>          }<a name="line.200"></a>
<FONT color="green">201</FONT>          else {<a name="line.201"></a>
<FONT color="green">202</FONT>            if (_nodeType == _type2(result)) {<a name="line.202"></a>
<FONT color="green">203</FONT>              _currentNode = END;<a name="line.203"></a>
<FONT color="green">204</FONT>              return returnNode(makeNodeHandle(result));<a name="line.204"></a>
<FONT color="green">205</FONT>            }<a name="line.205"></a>
<FONT color="green">206</FONT>          }<a name="line.206"></a>
<FONT color="green">207</FONT>    <a name="line.207"></a>
<FONT color="green">208</FONT>          return DTM.NULL;<a name="line.208"></a>
<FONT color="green">209</FONT>        }<a name="line.209"></a>
<FONT color="green">210</FONT>      }  // end of ParentIterator<a name="line.210"></a>
<FONT color="green">211</FONT>    <a name="line.211"></a>
<FONT color="green">212</FONT>      /**<a name="line.212"></a>
<FONT color="green">213</FONT>       * Iterator that returns children of a given type for a given node.<a name="line.213"></a>
<FONT color="green">214</FONT>       * The functionality chould be achieved by putting a filter on top<a name="line.214"></a>
<FONT color="green">215</FONT>       * of a basic child iterator, but a specialised iterator is used<a name="line.215"></a>
<FONT color="green">216</FONT>       * for efficiency (both speed and size of translet).<a name="line.216"></a>
<FONT color="green">217</FONT>       */<a name="line.217"></a>
<FONT color="green">218</FONT>      public final class TypedChildrenIterator extends InternalAxisIteratorBase<a name="line.218"></a>
<FONT color="green">219</FONT>      {<a name="line.219"></a>
<FONT color="green">220</FONT>    <a name="line.220"></a>
<FONT color="green">221</FONT>        /** The extended type ID that was requested. */<a name="line.221"></a>
<FONT color="green">222</FONT>        private final int _nodeType;<a name="line.222"></a>
<FONT color="green">223</FONT>    <a name="line.223"></a>
<FONT color="green">224</FONT>        /**<a name="line.224"></a>
<FONT color="green">225</FONT>         * Constructor TypedChildrenIterator<a name="line.225"></a>
<FONT color="green">226</FONT>         *<a name="line.226"></a>
<FONT color="green">227</FONT>         *<a name="line.227"></a>
<FONT color="green">228</FONT>         * @param nodeType The extended type ID being requested.<a name="line.228"></a>
<FONT color="green">229</FONT>         */<a name="line.229"></a>
<FONT color="green">230</FONT>        public TypedChildrenIterator(int nodeType)<a name="line.230"></a>
<FONT color="green">231</FONT>        {<a name="line.231"></a>
<FONT color="green">232</FONT>          _nodeType = nodeType;<a name="line.232"></a>
<FONT color="green">233</FONT>        }<a name="line.233"></a>
<FONT color="green">234</FONT>    <a name="line.234"></a>
<FONT color="green">235</FONT>        /**<a name="line.235"></a>
<FONT color="green">236</FONT>         * Set start to END should 'close' the iterator,<a name="line.236"></a>
<FONT color="green">237</FONT>         * i.e. subsequent call to next() should return END.<a name="line.237"></a>
<FONT color="green">238</FONT>         *<a name="line.238"></a>
<FONT color="green">239</FONT>         * @param node Sets the root of the iteration.<a name="line.239"></a>
<FONT color="green">240</FONT>         *<a name="line.240"></a>
<FONT color="green">241</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.241"></a>
<FONT color="green">242</FONT>         */<a name="line.242"></a>
<FONT color="green">243</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.243"></a>
<FONT color="green">244</FONT>        {<a name="line.244"></a>
<FONT color="green">245</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.245"></a>
<FONT color="green">246</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.246"></a>
<FONT color="green">247</FONT>            node = getDocument();<a name="line.247"></a>
<FONT color="green">248</FONT>          if (_isRestartable)<a name="line.248"></a>
<FONT color="green">249</FONT>          {<a name="line.249"></a>
<FONT color="green">250</FONT>            _startNode = node;<a name="line.250"></a>
<FONT color="green">251</FONT>            _currentNode = (node == DTM.NULL)<a name="line.251"></a>
<FONT color="green">252</FONT>                                       ? DTM.NULL<a name="line.252"></a>
<FONT color="green">253</FONT>                                       : _firstch2(makeNodeIdentity(_startNode));<a name="line.253"></a>
<FONT color="green">254</FONT>    <a name="line.254"></a>
<FONT color="green">255</FONT>            return resetPosition();<a name="line.255"></a>
<FONT color="green">256</FONT>          }<a name="line.256"></a>
<FONT color="green">257</FONT>    <a name="line.257"></a>
<FONT color="green">258</FONT>          return this;<a name="line.258"></a>
<FONT color="green">259</FONT>        }<a name="line.259"></a>
<FONT color="green">260</FONT>    <a name="line.260"></a>
<FONT color="green">261</FONT>        /**<a name="line.261"></a>
<FONT color="green">262</FONT>         * Get the next node in the iteration.<a name="line.262"></a>
<FONT color="green">263</FONT>         *<a name="line.263"></a>
<FONT color="green">264</FONT>         * @return The next node handle in the iteration, or END.<a name="line.264"></a>
<FONT color="green">265</FONT>         */<a name="line.265"></a>
<FONT color="green">266</FONT>        public int next()<a name="line.266"></a>
<FONT color="green">267</FONT>        {<a name="line.267"></a>
<FONT color="green">268</FONT>          int node = _currentNode;<a name="line.268"></a>
<FONT color="green">269</FONT>          if (node == DTM.NULL)<a name="line.269"></a>
<FONT color="green">270</FONT>            return DTM.NULL;<a name="line.270"></a>
<FONT color="green">271</FONT>    <a name="line.271"></a>
<FONT color="green">272</FONT>          final int nodeType = _nodeType;<a name="line.272"></a>
<FONT color="green">273</FONT>    <a name="line.273"></a>
<FONT color="green">274</FONT>          if (nodeType != DTM.ELEMENT_NODE) {<a name="line.274"></a>
<FONT color="green">275</FONT>            while (node != DTM.NULL &amp;&amp; _exptype2(node) != nodeType) {<a name="line.275"></a>
<FONT color="green">276</FONT>              node = _nextsib2(node);<a name="line.276"></a>
<FONT color="green">277</FONT>            }<a name="line.277"></a>
<FONT color="green">278</FONT>          }<a name="line.278"></a>
<FONT color="green">279</FONT>          // %OPT% If the nodeType is element (matching child::*), we only<a name="line.279"></a>
<FONT color="green">280</FONT>          // need to compare the expType with DTM.NTYPES. A child node of<a name="line.280"></a>
<FONT color="green">281</FONT>          // an element can be either an element, text, comment or<a name="line.281"></a>
<FONT color="green">282</FONT>          // processing instruction node. Only element node has an extended<a name="line.282"></a>
<FONT color="green">283</FONT>          // type greater than or equal to DTM.NTYPES.<a name="line.283"></a>
<FONT color="green">284</FONT>          else {<a name="line.284"></a>
<FONT color="green">285</FONT>            int eType;<a name="line.285"></a>
<FONT color="green">286</FONT>            while (node != DTM.NULL) {<a name="line.286"></a>
<FONT color="green">287</FONT>              eType = _exptype2(node);<a name="line.287"></a>
<FONT color="green">288</FONT>              if (eType &gt;= DTM.NTYPES)<a name="line.288"></a>
<FONT color="green">289</FONT>                break;<a name="line.289"></a>
<FONT color="green">290</FONT>              else<a name="line.290"></a>
<FONT color="green">291</FONT>                node = _nextsib2(node);<a name="line.291"></a>
<FONT color="green">292</FONT>            }<a name="line.292"></a>
<FONT color="green">293</FONT>          }<a name="line.293"></a>
<FONT color="green">294</FONT>    <a name="line.294"></a>
<FONT color="green">295</FONT>          if (node == DTM.NULL) {<a name="line.295"></a>
<FONT color="green">296</FONT>            _currentNode = DTM.NULL;<a name="line.296"></a>
<FONT color="green">297</FONT>            return DTM.NULL;<a name="line.297"></a>
<FONT color="green">298</FONT>          } else {<a name="line.298"></a>
<FONT color="green">299</FONT>            _currentNode = _nextsib2(node);<a name="line.299"></a>
<FONT color="green">300</FONT>            return returnNode(makeNodeHandle(node));<a name="line.300"></a>
<FONT color="green">301</FONT>          }<a name="line.301"></a>
<FONT color="green">302</FONT>    <a name="line.302"></a>
<FONT color="green">303</FONT>        }<a name="line.303"></a>
<FONT color="green">304</FONT>    <a name="line.304"></a>
<FONT color="green">305</FONT>        /**<a name="line.305"></a>
<FONT color="green">306</FONT>         * Return the node at the given position.<a name="line.306"></a>
<FONT color="green">307</FONT>         */<a name="line.307"></a>
<FONT color="green">308</FONT>        public int getNodeByPosition(int position)<a name="line.308"></a>
<FONT color="green">309</FONT>        {<a name="line.309"></a>
<FONT color="green">310</FONT>          if (position &lt;= 0)<a name="line.310"></a>
<FONT color="green">311</FONT>            return DTM.NULL;<a name="line.311"></a>
<FONT color="green">312</FONT>    <a name="line.312"></a>
<FONT color="green">313</FONT>          int node = _currentNode;<a name="line.313"></a>
<FONT color="green">314</FONT>          int pos = 0;<a name="line.314"></a>
<FONT color="green">315</FONT>    <a name="line.315"></a>
<FONT color="green">316</FONT>          final int nodeType = _nodeType;<a name="line.316"></a>
<FONT color="green">317</FONT>          if (nodeType != DTM.ELEMENT_NODE) {<a name="line.317"></a>
<FONT color="green">318</FONT>            while (node != DTM.NULL) {<a name="line.318"></a>
<FONT color="green">319</FONT>              if (_exptype2(node) == nodeType) {<a name="line.319"></a>
<FONT color="green">320</FONT>                pos++;<a name="line.320"></a>
<FONT color="green">321</FONT>                if (pos == position)<a name="line.321"></a>
<FONT color="green">322</FONT>                  return makeNodeHandle(node);<a name="line.322"></a>
<FONT color="green">323</FONT>              }<a name="line.323"></a>
<FONT color="green">324</FONT>    <a name="line.324"></a>
<FONT color="green">325</FONT>              node = _nextsib2(node);<a name="line.325"></a>
<FONT color="green">326</FONT>            }<a name="line.326"></a>
<FONT color="green">327</FONT>            return NULL;<a name="line.327"></a>
<FONT color="green">328</FONT>          }<a name="line.328"></a>
<FONT color="green">329</FONT>          else {<a name="line.329"></a>
<FONT color="green">330</FONT>            while (node != DTM.NULL) {<a name="line.330"></a>
<FONT color="green">331</FONT>              if (_exptype2(node) &gt;= DTM.NTYPES) {<a name="line.331"></a>
<FONT color="green">332</FONT>                pos++;<a name="line.332"></a>
<FONT color="green">333</FONT>                if (pos == position)<a name="line.333"></a>
<FONT color="green">334</FONT>                  return makeNodeHandle(node);<a name="line.334"></a>
<FONT color="green">335</FONT>              }<a name="line.335"></a>
<FONT color="green">336</FONT>              node = _nextsib2(node);<a name="line.336"></a>
<FONT color="green">337</FONT>            }<a name="line.337"></a>
<FONT color="green">338</FONT>            return NULL;<a name="line.338"></a>
<FONT color="green">339</FONT>          }<a name="line.339"></a>
<FONT color="green">340</FONT>        }<a name="line.340"></a>
<FONT color="green">341</FONT>    <a name="line.341"></a>
<FONT color="green">342</FONT>      }  // end of TypedChildrenIterator<a name="line.342"></a>
<FONT color="green">343</FONT>    <a name="line.343"></a>
<FONT color="green">344</FONT>      /**<a name="line.344"></a>
<FONT color="green">345</FONT>       * Iterator that returns the namespace nodes as defined by the XPath data model<a name="line.345"></a>
<FONT color="green">346</FONT>       * for a given node, filtered by extended type ID.<a name="line.346"></a>
<FONT color="green">347</FONT>       */<a name="line.347"></a>
<FONT color="green">348</FONT>      public class TypedRootIterator extends RootIterator<a name="line.348"></a>
<FONT color="green">349</FONT>      {<a name="line.349"></a>
<FONT color="green">350</FONT>    <a name="line.350"></a>
<FONT color="green">351</FONT>        /** The extended type ID that was requested. */<a name="line.351"></a>
<FONT color="green">352</FONT>        private final int _nodeType;<a name="line.352"></a>
<FONT color="green">353</FONT>    <a name="line.353"></a>
<FONT color="green">354</FONT>        /**<a name="line.354"></a>
<FONT color="green">355</FONT>         * Constructor TypedRootIterator<a name="line.355"></a>
<FONT color="green">356</FONT>         *<a name="line.356"></a>
<FONT color="green">357</FONT>         * @param nodeType The extended type ID being requested.<a name="line.357"></a>
<FONT color="green">358</FONT>         */<a name="line.358"></a>
<FONT color="green">359</FONT>        public TypedRootIterator(int nodeType)<a name="line.359"></a>
<FONT color="green">360</FONT>        {<a name="line.360"></a>
<FONT color="green">361</FONT>          super();<a name="line.361"></a>
<FONT color="green">362</FONT>          _nodeType = nodeType;<a name="line.362"></a>
<FONT color="green">363</FONT>        }<a name="line.363"></a>
<FONT color="green">364</FONT>    <a name="line.364"></a>
<FONT color="green">365</FONT>        /**<a name="line.365"></a>
<FONT color="green">366</FONT>         * Get the next node in the iteration.<a name="line.366"></a>
<FONT color="green">367</FONT>         *<a name="line.367"></a>
<FONT color="green">368</FONT>         * @return The next node handle in the iteration, or END.<a name="line.368"></a>
<FONT color="green">369</FONT>         */<a name="line.369"></a>
<FONT color="green">370</FONT>        public int next()<a name="line.370"></a>
<FONT color="green">371</FONT>        {<a name="line.371"></a>
<FONT color="green">372</FONT>          if(_startNode == _currentNode)<a name="line.372"></a>
<FONT color="green">373</FONT>            return NULL;<a name="line.373"></a>
<FONT color="green">374</FONT>    <a name="line.374"></a>
<FONT color="green">375</FONT>          final int node = _startNode;<a name="line.375"></a>
<FONT color="green">376</FONT>          int expType = _exptype2(makeNodeIdentity(node));<a name="line.376"></a>
<FONT color="green">377</FONT>    <a name="line.377"></a>
<FONT color="green">378</FONT>          _currentNode = node;<a name="line.378"></a>
<FONT color="green">379</FONT>    <a name="line.379"></a>
<FONT color="green">380</FONT>          if (_nodeType &gt;= DTM.NTYPES) {<a name="line.380"></a>
<FONT color="green">381</FONT>            if (_nodeType == expType) {<a name="line.381"></a>
<FONT color="green">382</FONT>              return returnNode(node);<a name="line.382"></a>
<FONT color="green">383</FONT>            }<a name="line.383"></a>
<FONT color="green">384</FONT>          }<a name="line.384"></a>
<FONT color="green">385</FONT>          else {<a name="line.385"></a>
<FONT color="green">386</FONT>            if (expType &lt; DTM.NTYPES) {<a name="line.386"></a>
<FONT color="green">387</FONT>              if (expType == _nodeType) {<a name="line.387"></a>
<FONT color="green">388</FONT>                return returnNode(node);<a name="line.388"></a>
<FONT color="green">389</FONT>              }<a name="line.389"></a>
<FONT color="green">390</FONT>            }<a name="line.390"></a>
<FONT color="green">391</FONT>            else {<a name="line.391"></a>
<FONT color="green">392</FONT>              if (m_extendedTypes[expType].getNodeType() == _nodeType) {<a name="line.392"></a>
<FONT color="green">393</FONT>                return returnNode(node);<a name="line.393"></a>
<FONT color="green">394</FONT>              }<a name="line.394"></a>
<FONT color="green">395</FONT>            }<a name="line.395"></a>
<FONT color="green">396</FONT>          }<a name="line.396"></a>
<FONT color="green">397</FONT>    <a name="line.397"></a>
<FONT color="green">398</FONT>          return NULL;<a name="line.398"></a>
<FONT color="green">399</FONT>        }<a name="line.399"></a>
<FONT color="green">400</FONT>      }  // end of TypedRootIterator<a name="line.400"></a>
<FONT color="green">401</FONT>    <a name="line.401"></a>
<FONT color="green">402</FONT>      /**<a name="line.402"></a>
<FONT color="green">403</FONT>       * Iterator that returns all siblings of a given node.<a name="line.403"></a>
<FONT color="green">404</FONT>       */<a name="line.404"></a>
<FONT color="green">405</FONT>      public class FollowingSiblingIterator extends InternalAxisIteratorBase<a name="line.405"></a>
<FONT color="green">406</FONT>      {<a name="line.406"></a>
<FONT color="green">407</FONT>    <a name="line.407"></a>
<FONT color="green">408</FONT>        /**<a name="line.408"></a>
<FONT color="green">409</FONT>         * Set start to END should 'close' the iterator,<a name="line.409"></a>
<FONT color="green">410</FONT>         * i.e. subsequent call to next() should return END.<a name="line.410"></a>
<FONT color="green">411</FONT>         *<a name="line.411"></a>
<FONT color="green">412</FONT>         * @param node Sets the root of the iteration.<a name="line.412"></a>
<FONT color="green">413</FONT>         *<a name="line.413"></a>
<FONT color="green">414</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.414"></a>
<FONT color="green">415</FONT>         */<a name="line.415"></a>
<FONT color="green">416</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.416"></a>
<FONT color="green">417</FONT>        {<a name="line.417"></a>
<FONT color="green">418</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.418"></a>
<FONT color="green">419</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.419"></a>
<FONT color="green">420</FONT>            node = getDocument();<a name="line.420"></a>
<FONT color="green">421</FONT>          if (_isRestartable)<a name="line.421"></a>
<FONT color="green">422</FONT>          {<a name="line.422"></a>
<FONT color="green">423</FONT>            _startNode = node;<a name="line.423"></a>
<FONT color="green">424</FONT>            _currentNode = makeNodeIdentity(node);<a name="line.424"></a>
<FONT color="green">425</FONT>    <a name="line.425"></a>
<FONT color="green">426</FONT>            return resetPosition();<a name="line.426"></a>
<FONT color="green">427</FONT>          }<a name="line.427"></a>
<FONT color="green">428</FONT>    <a name="line.428"></a>
<FONT color="green">429</FONT>          return this;<a name="line.429"></a>
<FONT color="green">430</FONT>        }<a name="line.430"></a>
<FONT color="green">431</FONT>    <a name="line.431"></a>
<FONT color="green">432</FONT>        /**<a name="line.432"></a>
<FONT color="green">433</FONT>         * Get the next node in the iteration.<a name="line.433"></a>
<FONT color="green">434</FONT>         *<a name="line.434"></a>
<FONT color="green">435</FONT>         * @return The next node handle in the iteration, or END.<a name="line.435"></a>
<FONT color="green">436</FONT>         */<a name="line.436"></a>
<FONT color="green">437</FONT>        public int next()<a name="line.437"></a>
<FONT color="green">438</FONT>        {<a name="line.438"></a>
<FONT color="green">439</FONT>          _currentNode = (_currentNode == DTM.NULL) ? DTM.NULL<a name="line.439"></a>
<FONT color="green">440</FONT>                                                    : _nextsib2(_currentNode);<a name="line.440"></a>
<FONT color="green">441</FONT>          return returnNode(makeNodeHandle(_currentNode));<a name="line.441"></a>
<FONT color="green">442</FONT>        }<a name="line.442"></a>
<FONT color="green">443</FONT>      }  // end of FollowingSiblingIterator<a name="line.443"></a>
<FONT color="green">444</FONT>    <a name="line.444"></a>
<FONT color="green">445</FONT>      /**<a name="line.445"></a>
<FONT color="green">446</FONT>       * Iterator that returns all following siblings of a given node.<a name="line.446"></a>
<FONT color="green">447</FONT>       */<a name="line.447"></a>
<FONT color="green">448</FONT>      public final class TypedFollowingSiblingIterator<a name="line.448"></a>
<FONT color="green">449</FONT>              extends FollowingSiblingIterator<a name="line.449"></a>
<FONT color="green">450</FONT>      {<a name="line.450"></a>
<FONT color="green">451</FONT>    <a name="line.451"></a>
<FONT color="green">452</FONT>        /** The extended type ID that was requested. */<a name="line.452"></a>
<FONT color="green">453</FONT>        private final int _nodeType;<a name="line.453"></a>
<FONT color="green">454</FONT>    <a name="line.454"></a>
<FONT color="green">455</FONT>        /**<a name="line.455"></a>
<FONT color="green">456</FONT>         * Constructor TypedFollowingSiblingIterator<a name="line.456"></a>
<FONT color="green">457</FONT>         *<a name="line.457"></a>
<FONT color="green">458</FONT>         *<a name="line.458"></a>
<FONT color="green">459</FONT>         * @param type The extended type ID being requested.<a name="line.459"></a>
<FONT color="green">460</FONT>         */<a name="line.460"></a>
<FONT color="green">461</FONT>        public TypedFollowingSiblingIterator(int type)<a name="line.461"></a>
<FONT color="green">462</FONT>        {<a name="line.462"></a>
<FONT color="green">463</FONT>          _nodeType = type;<a name="line.463"></a>
<FONT color="green">464</FONT>        }<a name="line.464"></a>
<FONT color="green">465</FONT>    <a name="line.465"></a>
<FONT color="green">466</FONT>        /**<a name="line.466"></a>
<FONT color="green">467</FONT>         * Get the next node in the iteration.<a name="line.467"></a>
<FONT color="green">468</FONT>         *<a name="line.468"></a>
<FONT color="green">469</FONT>         * @return The next node handle in the iteration, or END.<a name="line.469"></a>
<FONT color="green">470</FONT>         */<a name="line.470"></a>
<FONT color="green">471</FONT>        public int next()<a name="line.471"></a>
<FONT color="green">472</FONT>        {<a name="line.472"></a>
<FONT color="green">473</FONT>          if (_currentNode == DTM.NULL) {<a name="line.473"></a>
<FONT color="green">474</FONT>            return DTM.NULL;<a name="line.474"></a>
<FONT color="green">475</FONT>          }<a name="line.475"></a>
<FONT color="green">476</FONT>    <a name="line.476"></a>
<FONT color="green">477</FONT>          int node = _currentNode;<a name="line.477"></a>
<FONT color="green">478</FONT>          final int nodeType = _nodeType;<a name="line.478"></a>
<FONT color="green">479</FONT>    <a name="line.479"></a>
<FONT color="green">480</FONT>          if (nodeType != DTM.ELEMENT_NODE) {<a name="line.480"></a>
<FONT color="green">481</FONT>            while ((node = _nextsib2(node)) != DTM.NULL &amp;&amp; _exptype2(node) != nodeType) {}<a name="line.481"></a>
<FONT color="green">482</FONT>          }<a name="line.482"></a>
<FONT color="green">483</FONT>          else {<a name="line.483"></a>
<FONT color="green">484</FONT>            while ((node = _nextsib2(node)) != DTM.NULL &amp;&amp; _exptype2(node) &lt; DTM.NTYPES) {}<a name="line.484"></a>
<FONT color="green">485</FONT>          }<a name="line.485"></a>
<FONT color="green">486</FONT>    <a name="line.486"></a>
<FONT color="green">487</FONT>          _currentNode = node;<a name="line.487"></a>
<FONT color="green">488</FONT>    <a name="line.488"></a>
<FONT color="green">489</FONT>          return (node == DTM.NULL)<a name="line.489"></a>
<FONT color="green">490</FONT>                          ? DTM.NULL<a name="line.490"></a>
<FONT color="green">491</FONT>                          : returnNode(makeNodeHandle(node));<a name="line.491"></a>
<FONT color="green">492</FONT>        }<a name="line.492"></a>
<FONT color="green">493</FONT>    <a name="line.493"></a>
<FONT color="green">494</FONT>      }  // end of TypedFollowingSiblingIterator<a name="line.494"></a>
<FONT color="green">495</FONT>    <a name="line.495"></a>
<FONT color="green">496</FONT>      /**<a name="line.496"></a>
<FONT color="green">497</FONT>       * Iterator that returns attribute nodes (of what nodes?)<a name="line.497"></a>
<FONT color="green">498</FONT>       */<a name="line.498"></a>
<FONT color="green">499</FONT>      public final class AttributeIterator extends InternalAxisIteratorBase<a name="line.499"></a>
<FONT color="green">500</FONT>      {<a name="line.500"></a>
<FONT color="green">501</FONT>    <a name="line.501"></a>
<FONT color="green">502</FONT>        // assumes caller will pass element nodes<a name="line.502"></a>
<FONT color="green">503</FONT>    <a name="line.503"></a>
<FONT color="green">504</FONT>        /**<a name="line.504"></a>
<FONT color="green">505</FONT>         * Set start to END should 'close' the iterator,<a name="line.505"></a>
<FONT color="green">506</FONT>         * i.e. subsequent call to next() should return END.<a name="line.506"></a>
<FONT color="green">507</FONT>         *<a name="line.507"></a>
<FONT color="green">508</FONT>         * @param node Sets the root of the iteration.<a name="line.508"></a>
<FONT color="green">509</FONT>         *<a name="line.509"></a>
<FONT color="green">510</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.510"></a>
<FONT color="green">511</FONT>         */<a name="line.511"></a>
<FONT color="green">512</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.512"></a>
<FONT color="green">513</FONT>        {<a name="line.513"></a>
<FONT color="green">514</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.514"></a>
<FONT color="green">515</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.515"></a>
<FONT color="green">516</FONT>            node = getDocument();<a name="line.516"></a>
<FONT color="green">517</FONT>          if (_isRestartable)<a name="line.517"></a>
<FONT color="green">518</FONT>          {<a name="line.518"></a>
<FONT color="green">519</FONT>            _startNode = node;<a name="line.519"></a>
<FONT color="green">520</FONT>            _currentNode = getFirstAttributeIdentity(makeNodeIdentity(node));<a name="line.520"></a>
<FONT color="green">521</FONT>    <a name="line.521"></a>
<FONT color="green">522</FONT>            return resetPosition();<a name="line.522"></a>
<FONT color="green">523</FONT>          }<a name="line.523"></a>
<FONT color="green">524</FONT>    <a name="line.524"></a>
<FONT color="green">525</FONT>          return this;<a name="line.525"></a>
<FONT color="green">526</FONT>        }<a name="line.526"></a>
<FONT color="green">527</FONT>    <a name="line.527"></a>
<FONT color="green">528</FONT>        /**<a name="line.528"></a>
<FONT color="green">529</FONT>         * Get the next node in the iteration.<a name="line.529"></a>
<FONT color="green">530</FONT>         *<a name="line.530"></a>
<FONT color="green">531</FONT>         * @return The next node handle in the iteration, or END.<a name="line.531"></a>
<FONT color="green">532</FONT>         */<a name="line.532"></a>
<FONT color="green">533</FONT>        public int next()<a name="line.533"></a>
<FONT color="green">534</FONT>        {<a name="line.534"></a>
<FONT color="green">535</FONT>    <a name="line.535"></a>
<FONT color="green">536</FONT>          final int node = _currentNode;<a name="line.536"></a>
<FONT color="green">537</FONT>    <a name="line.537"></a>
<FONT color="green">538</FONT>          if (node != NULL) {<a name="line.538"></a>
<FONT color="green">539</FONT>            _currentNode = getNextAttributeIdentity(node);<a name="line.539"></a>
<FONT color="green">540</FONT>            return returnNode(makeNodeHandle(node));<a name="line.540"></a>
<FONT color="green">541</FONT>          }<a name="line.541"></a>
<FONT color="green">542</FONT>    <a name="line.542"></a>
<FONT color="green">543</FONT>          return NULL;<a name="line.543"></a>
<FONT color="green">544</FONT>        }<a name="line.544"></a>
<FONT color="green">545</FONT>      }  // end of AttributeIterator<a name="line.545"></a>
<FONT color="green">546</FONT>    <a name="line.546"></a>
<FONT color="green">547</FONT>      /**<a name="line.547"></a>
<FONT color="green">548</FONT>       * Iterator that returns attribute nodes of a given type<a name="line.548"></a>
<FONT color="green">549</FONT>       */<a name="line.549"></a>
<FONT color="green">550</FONT>      public final class TypedAttributeIterator extends InternalAxisIteratorBase<a name="line.550"></a>
<FONT color="green">551</FONT>      {<a name="line.551"></a>
<FONT color="green">552</FONT>    <a name="line.552"></a>
<FONT color="green">553</FONT>        /** The extended type ID that was requested. */<a name="line.553"></a>
<FONT color="green">554</FONT>        private final int _nodeType;<a name="line.554"></a>
<FONT color="green">555</FONT>    <a name="line.555"></a>
<FONT color="green">556</FONT>        /**<a name="line.556"></a>
<FONT color="green">557</FONT>         * Constructor TypedAttributeIterator<a name="line.557"></a>
<FONT color="green">558</FONT>         *<a name="line.558"></a>
<FONT color="green">559</FONT>         *<a name="line.559"></a>
<FONT color="green">560</FONT>         * @param nodeType The extended type ID that is requested.<a name="line.560"></a>
<FONT color="green">561</FONT>         */<a name="line.561"></a>
<FONT color="green">562</FONT>        public TypedAttributeIterator(int nodeType)<a name="line.562"></a>
<FONT color="green">563</FONT>        {<a name="line.563"></a>
<FONT color="green">564</FONT>          _nodeType = nodeType;<a name="line.564"></a>
<FONT color="green">565</FONT>        }<a name="line.565"></a>
<FONT color="green">566</FONT>    <a name="line.566"></a>
<FONT color="green">567</FONT>        // assumes caller will pass element nodes<a name="line.567"></a>
<FONT color="green">568</FONT>    <a name="line.568"></a>
<FONT color="green">569</FONT>        /**<a name="line.569"></a>
<FONT color="green">570</FONT>         * Set start to END should 'close' the iterator,<a name="line.570"></a>
<FONT color="green">571</FONT>         * i.e. subsequent call to next() should return END.<a name="line.571"></a>
<FONT color="green">572</FONT>         *<a name="line.572"></a>
<FONT color="green">573</FONT>         * @param node Sets the root of the iteration.<a name="line.573"></a>
<FONT color="green">574</FONT>         *<a name="line.574"></a>
<FONT color="green">575</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.575"></a>
<FONT color="green">576</FONT>         */<a name="line.576"></a>
<FONT color="green">577</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.577"></a>
<FONT color="green">578</FONT>        {<a name="line.578"></a>
<FONT color="green">579</FONT>          if (_isRestartable)<a name="line.579"></a>
<FONT color="green">580</FONT>          {<a name="line.580"></a>
<FONT color="green">581</FONT>            _startNode = node;<a name="line.581"></a>
<FONT color="green">582</FONT>    <a name="line.582"></a>
<FONT color="green">583</FONT>            _currentNode = getTypedAttribute(node, _nodeType);<a name="line.583"></a>
<FONT color="green">584</FONT>    <a name="line.584"></a>
<FONT color="green">585</FONT>            return resetPosition();<a name="line.585"></a>
<FONT color="green">586</FONT>          }<a name="line.586"></a>
<FONT color="green">587</FONT>    <a name="line.587"></a>
<FONT color="green">588</FONT>          return this;<a name="line.588"></a>
<FONT color="green">589</FONT>        }<a name="line.589"></a>
<FONT color="green">590</FONT>    <a name="line.590"></a>
<FONT color="green">591</FONT>        /**<a name="line.591"></a>
<FONT color="green">592</FONT>         * Get the next node in the iteration.<a name="line.592"></a>
<FONT color="green">593</FONT>         *<a name="line.593"></a>
<FONT color="green">594</FONT>         * @return The next node handle in the iteration, or END.<a name="line.594"></a>
<FONT color="green">595</FONT>         */<a name="line.595"></a>
<FONT color="green">596</FONT>        public int next()<a name="line.596"></a>
<FONT color="green">597</FONT>        {<a name="line.597"></a>
<FONT color="green">598</FONT>    <a name="line.598"></a>
<FONT color="green">599</FONT>          final int node = _currentNode;<a name="line.599"></a>
<FONT color="green">600</FONT>    <a name="line.600"></a>
<FONT color="green">601</FONT>          // singleton iterator, since there can only be one attribute of<a name="line.601"></a>
<FONT color="green">602</FONT>          // a given type.<a name="line.602"></a>
<FONT color="green">603</FONT>          _currentNode = NULL;<a name="line.603"></a>
<FONT color="green">604</FONT>    <a name="line.604"></a>
<FONT color="green">605</FONT>          return returnNode(node);<a name="line.605"></a>
<FONT color="green">606</FONT>        }<a name="line.606"></a>
<FONT color="green">607</FONT>      }  // end of TypedAttributeIterator<a name="line.607"></a>
<FONT color="green">608</FONT>    <a name="line.608"></a>
<FONT color="green">609</FONT>      /**<a name="line.609"></a>
<FONT color="green">610</FONT>       * Iterator that returns preceding siblings of a given node<a name="line.610"></a>
<FONT color="green">611</FONT>       */<a name="line.611"></a>
<FONT color="green">612</FONT>      public class PrecedingSiblingIterator extends InternalAxisIteratorBase<a name="line.612"></a>
<FONT color="green">613</FONT>      {<a name="line.613"></a>
<FONT color="green">614</FONT>    <a name="line.614"></a>
<FONT color="green">615</FONT>        /**<a name="line.615"></a>
<FONT color="green">616</FONT>         * The node identity of _startNode for this iterator<a name="line.616"></a>
<FONT color="green">617</FONT>         */<a name="line.617"></a>
<FONT color="green">618</FONT>        protected int _startNodeID;<a name="line.618"></a>
<FONT color="green">619</FONT>    <a name="line.619"></a>
<FONT color="green">620</FONT>        /**<a name="line.620"></a>
<FONT color="green">621</FONT>         * True if this iterator has a reversed axis.<a name="line.621"></a>
<FONT color="green">622</FONT>         *<a name="line.622"></a>
<FONT color="green">623</FONT>         * @return true.<a name="line.623"></a>
<FONT color="green">624</FONT>         */<a name="line.624"></a>
<FONT color="green">625</FONT>        public boolean isReverse()<a name="line.625"></a>
<FONT color="green">626</FONT>        {<a name="line.626"></a>
<FONT color="green">627</FONT>          return true;<a name="line.627"></a>
<FONT color="green">628</FONT>        }<a name="line.628"></a>
<FONT color="green">629</FONT>    <a name="line.629"></a>
<FONT color="green">630</FONT>        /**<a name="line.630"></a>
<FONT color="green">631</FONT>         * Set start to END should 'close' the iterator,<a name="line.631"></a>
<FONT color="green">632</FONT>         * i.e. subsequent call to next() should return END.<a name="line.632"></a>
<FONT color="green">633</FONT>         *<a name="line.633"></a>
<FONT color="green">634</FONT>         * @param node Sets the root of the iteration.<a name="line.634"></a>
<FONT color="green">635</FONT>         *<a name="line.635"></a>
<FONT color="green">636</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.636"></a>
<FONT color="green">637</FONT>         */<a name="line.637"></a>
<FONT color="green">638</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.638"></a>
<FONT color="green">639</FONT>        {<a name="line.639"></a>
<FONT color="green">640</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.640"></a>
<FONT color="green">641</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.641"></a>
<FONT color="green">642</FONT>            node = getDocument();<a name="line.642"></a>
<FONT color="green">643</FONT>          if (_isRestartable)<a name="line.643"></a>
<FONT color="green">644</FONT>          {<a name="line.644"></a>
<FONT color="green">645</FONT>            _startNode = node;<a name="line.645"></a>
<FONT color="green">646</FONT>            node = _startNodeID = makeNodeIdentity(node);<a name="line.646"></a>
<FONT color="green">647</FONT>    <a name="line.647"></a>
<FONT color="green">648</FONT>            if(node == NULL)<a name="line.648"></a>
<FONT color="green">649</FONT>            {<a name="line.649"></a>
<FONT color="green">650</FONT>              _currentNode = node;<a name="line.650"></a>
<FONT color="green">651</FONT>              return resetPosition();<a name="line.651"></a>
<FONT color="green">652</FONT>            }<a name="line.652"></a>
<FONT color="green">653</FONT>    <a name="line.653"></a>
<FONT color="green">654</FONT>            int type = _type2(node);<a name="line.654"></a>
<FONT color="green">655</FONT>            if(ExpandedNameTable.ATTRIBUTE == type<a name="line.655"></a>
<FONT color="green">656</FONT>               || ExpandedNameTable.NAMESPACE == type )<a name="line.656"></a>
<FONT color="green">657</FONT>            {<a name="line.657"></a>
<FONT color="green">658</FONT>              _currentNode = node;<a name="line.658"></a>
<FONT color="green">659</FONT>            }<a name="line.659"></a>
<FONT color="green">660</FONT>            else<a name="line.660"></a>
<FONT color="green">661</FONT>            {<a name="line.661"></a>
<FONT color="green">662</FONT>              // Be careful to handle the Document node properly<a name="line.662"></a>
<FONT color="green">663</FONT>              _currentNode = _parent2(node);<a name="line.663"></a>
<FONT color="green">664</FONT>              if(NULL!=_currentNode)<a name="line.664"></a>
<FONT color="green">665</FONT>                _currentNode = _firstch2(_currentNode);<a name="line.665"></a>
<FONT color="green">666</FONT>              else<a name="line.666"></a>
<FONT color="green">667</FONT>                _currentNode = node;<a name="line.667"></a>
<FONT color="green">668</FONT>            }<a name="line.668"></a>
<FONT color="green">669</FONT>    <a name="line.669"></a>
<FONT color="green">670</FONT>            return resetPosition();<a name="line.670"></a>
<FONT color="green">671</FONT>          }<a name="line.671"></a>
<FONT color="green">672</FONT>    <a name="line.672"></a>
<FONT color="green">673</FONT>          return this;<a name="line.673"></a>
<FONT color="green">674</FONT>        }<a name="line.674"></a>
<FONT color="green">675</FONT>    <a name="line.675"></a>
<FONT color="green">676</FONT>        /**<a name="line.676"></a>
<FONT color="green">677</FONT>         * Get the next node in the iteration.<a name="line.677"></a>
<FONT color="green">678</FONT>         *<a name="line.678"></a>
<FONT color="green">679</FONT>         * @return The next node handle in the iteration, or END.<a name="line.679"></a>
<FONT color="green">680</FONT>         */<a name="line.680"></a>
<FONT color="green">681</FONT>        public int next()<a name="line.681"></a>
<FONT color="green">682</FONT>        {<a name="line.682"></a>
<FONT color="green">683</FONT>    <a name="line.683"></a>
<FONT color="green">684</FONT>          if (_currentNode == _startNodeID || _currentNode == DTM.NULL)<a name="line.684"></a>
<FONT color="green">685</FONT>          {<a name="line.685"></a>
<FONT color="green">686</FONT>            return NULL;<a name="line.686"></a>
<FONT color="green">687</FONT>          }<a name="line.687"></a>
<FONT color="green">688</FONT>          else<a name="line.688"></a>
<FONT color="green">689</FONT>          {<a name="line.689"></a>
<FONT color="green">690</FONT>            final int node = _currentNode;<a name="line.690"></a>
<FONT color="green">691</FONT>            _currentNode = _nextsib2(node);<a name="line.691"></a>
<FONT color="green">692</FONT>    <a name="line.692"></a>
<FONT color="green">693</FONT>            return returnNode(makeNodeHandle(node));<a name="line.693"></a>
<FONT color="green">694</FONT>          }<a name="line.694"></a>
<FONT color="green">695</FONT>        }<a name="line.695"></a>
<FONT color="green">696</FONT>      }  // end of PrecedingSiblingIterator<a name="line.696"></a>
<FONT color="green">697</FONT>    <a name="line.697"></a>
<FONT color="green">698</FONT>      /**<a name="line.698"></a>
<FONT color="green">699</FONT>       * Iterator that returns preceding siblings of a given type for<a name="line.699"></a>
<FONT color="green">700</FONT>       * a given node<a name="line.700"></a>
<FONT color="green">701</FONT>       */<a name="line.701"></a>
<FONT color="green">702</FONT>      public final class TypedPrecedingSiblingIterator<a name="line.702"></a>
<FONT color="green">703</FONT>              extends PrecedingSiblingIterator<a name="line.703"></a>
<FONT color="green">704</FONT>      {<a name="line.704"></a>
<FONT color="green">705</FONT>    <a name="line.705"></a>
<FONT color="green">706</FONT>        /** The extended type ID that was requested. */<a name="line.706"></a>
<FONT color="green">707</FONT>        private final int _nodeType;<a name="line.707"></a>
<FONT color="green">708</FONT>    <a name="line.708"></a>
<FONT color="green">709</FONT>        /**<a name="line.709"></a>
<FONT color="green">710</FONT>         * Constructor TypedPrecedingSiblingIterator<a name="line.710"></a>
<FONT color="green">711</FONT>         *<a name="line.711"></a>
<FONT color="green">712</FONT>         *<a name="line.712"></a>
<FONT color="green">713</FONT>         * @param type The extended type ID being requested.<a name="line.713"></a>
<FONT color="green">714</FONT>         */<a name="line.714"></a>
<FONT color="green">715</FONT>        public TypedPrecedingSiblingIterator(int type)<a name="line.715"></a>
<FONT color="green">716</FONT>        {<a name="line.716"></a>
<FONT color="green">717</FONT>          _nodeType = type;<a name="line.717"></a>
<FONT color="green">718</FONT>        }<a name="line.718"></a>
<FONT color="green">719</FONT>    <a name="line.719"></a>
<FONT color="green">720</FONT>        /**<a name="line.720"></a>
<FONT color="green">721</FONT>         * Get the next node in the iteration.<a name="line.721"></a>
<FONT color="green">722</FONT>         *<a name="line.722"></a>
<FONT color="green">723</FONT>         * @return The next node handle in the iteration, or END.<a name="line.723"></a>
<FONT color="green">724</FONT>         */<a name="line.724"></a>
<FONT color="green">725</FONT>        public int next()<a name="line.725"></a>
<FONT color="green">726</FONT>        {<a name="line.726"></a>
<FONT color="green">727</FONT>          int node = _currentNode;<a name="line.727"></a>
<FONT color="green">728</FONT>    <a name="line.728"></a>
<FONT color="green">729</FONT>          final int nodeType = _nodeType;<a name="line.729"></a>
<FONT color="green">730</FONT>          final int startNodeID = _startNodeID;<a name="line.730"></a>
<FONT color="green">731</FONT>    <a name="line.731"></a>
<FONT color="green">732</FONT>          if (nodeType != DTM.ELEMENT_NODE) {<a name="line.732"></a>
<FONT color="green">733</FONT>            while (node != NULL &amp;&amp; node != startNodeID &amp;&amp; _exptype2(node) != nodeType) {<a name="line.733"></a>
<FONT color="green">734</FONT>              node = _nextsib2(node);<a name="line.734"></a>
<FONT color="green">735</FONT>            }<a name="line.735"></a>
<FONT color="green">736</FONT>          }<a name="line.736"></a>
<FONT color="green">737</FONT>          else {<a name="line.737"></a>
<FONT color="green">738</FONT>            while (node != NULL &amp;&amp; node != startNodeID &amp;&amp; _exptype2(node) &lt; DTM.NTYPES) {<a name="line.738"></a>
<FONT color="green">739</FONT>              node = _nextsib2(node);<a name="line.739"></a>
<FONT color="green">740</FONT>            }<a name="line.740"></a>
<FONT color="green">741</FONT>          }<a name="line.741"></a>
<FONT color="green">742</FONT>    <a name="line.742"></a>
<FONT color="green">743</FONT>          if (node == DTM.NULL || node == startNodeID) {<a name="line.743"></a>
<FONT color="green">744</FONT>            _currentNode = NULL;<a name="line.744"></a>
<FONT color="green">745</FONT>            return NULL;<a name="line.745"></a>
<FONT color="green">746</FONT>          }<a name="line.746"></a>
<FONT color="green">747</FONT>          else {<a name="line.747"></a>
<FONT color="green">748</FONT>            _currentNode = _nextsib2(node);<a name="line.748"></a>
<FONT color="green">749</FONT>            return returnNode(makeNodeHandle(node));<a name="line.749"></a>
<FONT color="green">750</FONT>          }<a name="line.750"></a>
<FONT color="green">751</FONT>        }<a name="line.751"></a>
<FONT color="green">752</FONT>    <a name="line.752"></a>
<FONT color="green">753</FONT>        /**<a name="line.753"></a>
<FONT color="green">754</FONT>         * Return the index of the last node in this iterator.<a name="line.754"></a>
<FONT color="green">755</FONT>         */<a name="line.755"></a>
<FONT color="green">756</FONT>        public int getLast()<a name="line.756"></a>
<FONT color="green">757</FONT>        {<a name="line.757"></a>
<FONT color="green">758</FONT>          if (_last != -1)<a name="line.758"></a>
<FONT color="green">759</FONT>            return _last;<a name="line.759"></a>
<FONT color="green">760</FONT>    <a name="line.760"></a>
<FONT color="green">761</FONT>          setMark();<a name="line.761"></a>
<FONT color="green">762</FONT>    <a name="line.762"></a>
<FONT color="green">763</FONT>          int node = _currentNode;<a name="line.763"></a>
<FONT color="green">764</FONT>          final int nodeType = _nodeType;<a name="line.764"></a>
<FONT color="green">765</FONT>          final int startNodeID = _startNodeID;<a name="line.765"></a>
<FONT color="green">766</FONT>    <a name="line.766"></a>
<FONT color="green">767</FONT>          int last = 0;<a name="line.767"></a>
<FONT color="green">768</FONT>          if (nodeType != DTM.ELEMENT_NODE) {<a name="line.768"></a>
<FONT color="green">769</FONT>            while (node != NULL &amp;&amp; node != startNodeID) {<a name="line.769"></a>
<FONT color="green">770</FONT>              if (_exptype2(node) == nodeType) {<a name="line.770"></a>
<FONT color="green">771</FONT>                last++;<a name="line.771"></a>
<FONT color="green">772</FONT>              }<a name="line.772"></a>
<FONT color="green">773</FONT>              node = _nextsib2(node);<a name="line.773"></a>
<FONT color="green">774</FONT>            }<a name="line.774"></a>
<FONT color="green">775</FONT>          }<a name="line.775"></a>
<FONT color="green">776</FONT>          else {<a name="line.776"></a>
<FONT color="green">777</FONT>            while (node != NULL &amp;&amp; node != startNodeID) {<a name="line.777"></a>
<FONT color="green">778</FONT>              if (_exptype2(node) &gt;= DTM.NTYPES) {<a name="line.778"></a>
<FONT color="green">779</FONT>                last++;<a name="line.779"></a>
<FONT color="green">780</FONT>              }<a name="line.780"></a>
<FONT color="green">781</FONT>              node = _nextsib2(node);<a name="line.781"></a>
<FONT color="green">782</FONT>            }<a name="line.782"></a>
<FONT color="green">783</FONT>          }<a name="line.783"></a>
<FONT color="green">784</FONT>    <a name="line.784"></a>
<FONT color="green">785</FONT>          gotoMark();<a name="line.785"></a>
<FONT color="green">786</FONT>    <a name="line.786"></a>
<FONT color="green">787</FONT>          return (_last = last);<a name="line.787"></a>
<FONT color="green">788</FONT>        }<a name="line.788"></a>
<FONT color="green">789</FONT>      }  // end of TypedPrecedingSiblingIterator<a name="line.789"></a>
<FONT color="green">790</FONT>    <a name="line.790"></a>
<FONT color="green">791</FONT>      /**<a name="line.791"></a>
<FONT color="green">792</FONT>       * Iterator that returns preceding nodes of a given node.<a name="line.792"></a>
<FONT color="green">793</FONT>       * This includes the node set {root+1, start-1}, but excludes<a name="line.793"></a>
<FONT color="green">794</FONT>       * all ancestors, attributes, and namespace nodes.<a name="line.794"></a>
<FONT color="green">795</FONT>       */<a name="line.795"></a>
<FONT color="green">796</FONT>      public class PrecedingIterator extends InternalAxisIteratorBase<a name="line.796"></a>
<FONT color="green">797</FONT>      {<a name="line.797"></a>
<FONT color="green">798</FONT>    <a name="line.798"></a>
<FONT color="green">799</FONT>        /** The max ancestors, but it can grow... */<a name="line.799"></a>
<FONT color="green">800</FONT>        private final int _maxAncestors = 8;<a name="line.800"></a>
<FONT color="green">801</FONT>    <a name="line.801"></a>
<FONT color="green">802</FONT>        /**<a name="line.802"></a>
<FONT color="green">803</FONT>         * The stack of start node + ancestors up to the root of the tree,<a name="line.803"></a>
<FONT color="green">804</FONT>         *  which we must avoid.<a name="line.804"></a>
<FONT color="green">805</FONT>         */<a name="line.805"></a>
<FONT color="green">806</FONT>        protected int[] _stack = new int[_maxAncestors];<a name="line.806"></a>
<FONT color="green">807</FONT>    <a name="line.807"></a>
<FONT color="green">808</FONT>        /** (not sure yet... -sb) */<a name="line.808"></a>
<FONT color="green">809</FONT>        protected int _sp, _oldsp;<a name="line.809"></a>
<FONT color="green">810</FONT>    <a name="line.810"></a>
<FONT color="green">811</FONT>        protected int _markedsp, _markedNode, _markedDescendant;<a name="line.811"></a>
<FONT color="green">812</FONT>    <a name="line.812"></a>
<FONT color="green">813</FONT>        /* _currentNode precedes candidates.  This is the identity, not the handle! */<a name="line.813"></a>
<FONT color="green">814</FONT>    <a name="line.814"></a>
<FONT color="green">815</FONT>        /**<a name="line.815"></a>
<FONT color="green">816</FONT>         * True if this iterator has a reversed axis.<a name="line.816"></a>
<FONT color="green">817</FONT>         *<a name="line.817"></a>
<FONT color="green">818</FONT>         * @return true since this iterator is a reversed axis.<a name="line.818"></a>
<FONT color="green">819</FONT>         */<a name="line.819"></a>
<FONT color="green">820</FONT>        public boolean isReverse()<a name="line.820"></a>
<FONT color="green">821</FONT>        {<a name="line.821"></a>
<FONT color="green">822</FONT>          return true;<a name="line.822"></a>
<FONT color="green">823</FONT>        }<a name="line.823"></a>
<FONT color="green">824</FONT>    <a name="line.824"></a>
<FONT color="green">825</FONT>        /**<a name="line.825"></a>
<FONT color="green">826</FONT>         * Returns a deep copy of this iterator.   The cloned iterator is not reset.<a name="line.826"></a>
<FONT color="green">827</FONT>         *<a name="line.827"></a>
<FONT color="green">828</FONT>         * @return a deep copy of this iterator.<a name="line.828"></a>
<FONT color="green">829</FONT>         */<a name="line.829"></a>
<FONT color="green">830</FONT>        public DTMAxisIterator cloneIterator()<a name="line.830"></a>
<FONT color="green">831</FONT>        {<a name="line.831"></a>
<FONT color="green">832</FONT>          _isRestartable = false;<a name="line.832"></a>
<FONT color="green">833</FONT>    <a name="line.833"></a>
<FONT color="green">834</FONT>          try<a name="line.834"></a>
<FONT color="green">835</FONT>          {<a name="line.835"></a>
<FONT color="green">836</FONT>            final PrecedingIterator clone = (PrecedingIterator) super.clone();<a name="line.836"></a>
<FONT color="green">837</FONT>            final int[] stackCopy = new int[_stack.length];<a name="line.837"></a>
<FONT color="green">838</FONT>            System.arraycopy(_stack, 0, stackCopy, 0, _stack.length);<a name="line.838"></a>
<FONT color="green">839</FONT>    <a name="line.839"></a>
<FONT color="green">840</FONT>            clone._stack = stackCopy;<a name="line.840"></a>
<FONT color="green">841</FONT>    <a name="line.841"></a>
<FONT color="green">842</FONT>            // return clone.reset();<a name="line.842"></a>
<FONT color="green">843</FONT>            return clone;<a name="line.843"></a>
<FONT color="green">844</FONT>          }<a name="line.844"></a>
<FONT color="green">845</FONT>          catch (CloneNotSupportedException e)<a name="line.845"></a>
<FONT color="green">846</FONT>          {<a name="line.846"></a>
<FONT color="green">847</FONT>            throw new DTMException(XMLMessages.createXMLMessage(XMLErrorResources.ER_ITERATOR_CLONE_NOT_SUPPORTED, null)); //"Iterator clone not supported.");<a name="line.847"></a>
<FONT color="green">848</FONT>          }<a name="line.848"></a>
<FONT color="green">849</FONT>        }<a name="line.849"></a>
<FONT color="green">850</FONT>    <a name="line.850"></a>
<FONT color="green">851</FONT>        /**<a name="line.851"></a>
<FONT color="green">852</FONT>         * Set start to END should 'close' the iterator,<a name="line.852"></a>
<FONT color="green">853</FONT>         * i.e. subsequent call to next() should return END.<a name="line.853"></a>
<FONT color="green">854</FONT>         *<a name="line.854"></a>
<FONT color="green">855</FONT>         * @param node Sets the root of the iteration.<a name="line.855"></a>
<FONT color="green">856</FONT>         *<a name="line.856"></a>
<FONT color="green">857</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.857"></a>
<FONT color="green">858</FONT>         */<a name="line.858"></a>
<FONT color="green">859</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.859"></a>
<FONT color="green">860</FONT>        {<a name="line.860"></a>
<FONT color="green">861</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.861"></a>
<FONT color="green">862</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.862"></a>
<FONT color="green">863</FONT>            node = getDocument();<a name="line.863"></a>
<FONT color="green">864</FONT>          if (_isRestartable)<a name="line.864"></a>
<FONT color="green">865</FONT>          {<a name="line.865"></a>
<FONT color="green">866</FONT>            node = makeNodeIdentity(node);<a name="line.866"></a>
<FONT color="green">867</FONT>    <a name="line.867"></a>
<FONT color="green">868</FONT>            // iterator is not a clone<a name="line.868"></a>
<FONT color="green">869</FONT>            int parent, index;<a name="line.869"></a>
<FONT color="green">870</FONT>    <a name="line.870"></a>
<FONT color="green">871</FONT>           if (_type2(node) == DTM.ATTRIBUTE_NODE)<a name="line.871"></a>
<FONT color="green">872</FONT>             node = _parent2(node);<a name="line.872"></a>
<FONT color="green">873</FONT>    <a name="line.873"></a>
<FONT color="green">874</FONT>            _startNode = node;<a name="line.874"></a>
<FONT color="green">875</FONT>            _stack[index = 0] = node;<a name="line.875"></a>
<FONT color="green">876</FONT>    <a name="line.876"></a>
<FONT color="green">877</FONT>            parent=node;<a name="line.877"></a>
<FONT color="green">878</FONT>            while ((parent = _parent2(parent)) != NULL)<a name="line.878"></a>
<FONT color="green">879</FONT>            {<a name="line.879"></a>
<FONT color="green">880</FONT>              if (++index == _stack.length)<a name="line.880"></a>
<FONT color="green">881</FONT>              {<a name="line.881"></a>
<FONT color="green">882</FONT>                final int[] stack = new int[index*2];<a name="line.882"></a>
<FONT color="green">883</FONT>                System.arraycopy(_stack, 0, stack, 0, index);<a name="line.883"></a>
<FONT color="green">884</FONT>                _stack = stack;<a name="line.884"></a>
<FONT color="green">885</FONT>              }<a name="line.885"></a>
<FONT color="green">886</FONT>              _stack[index] = parent;<a name="line.886"></a>
<FONT color="green">887</FONT>            }<a name="line.887"></a>
<FONT color="green">888</FONT>    <a name="line.888"></a>
<FONT color="green">889</FONT>            if(index&gt;0)<a name="line.889"></a>
<FONT color="green">890</FONT>              --index; // Pop actual root node (if not start) back off the stack<a name="line.890"></a>
<FONT color="green">891</FONT>    <a name="line.891"></a>
<FONT color="green">892</FONT>            _currentNode=_stack[index]; // Last parent before root node<a name="line.892"></a>
<FONT color="green">893</FONT>    <a name="line.893"></a>
<FONT color="green">894</FONT>            _oldsp = _sp = index;<a name="line.894"></a>
<FONT color="green">895</FONT>    <a name="line.895"></a>
<FONT color="green">896</FONT>            return resetPosition();<a name="line.896"></a>
<FONT color="green">897</FONT>          }<a name="line.897"></a>
<FONT color="green">898</FONT>    <a name="line.898"></a>
<FONT color="green">899</FONT>          return this;<a name="line.899"></a>
<FONT color="green">900</FONT>        }<a name="line.900"></a>
<FONT color="green">901</FONT>    <a name="line.901"></a>
<FONT color="green">902</FONT>        /**<a name="line.902"></a>
<FONT color="green">903</FONT>         * Get the next node in the iteration.<a name="line.903"></a>
<FONT color="green">904</FONT>         *<a name="line.904"></a>
<FONT color="green">905</FONT>         * @return The next node handle in the iteration, or END.<a name="line.905"></a>
<FONT color="green">906</FONT>         */<a name="line.906"></a>
<FONT color="green">907</FONT>        public int next()<a name="line.907"></a>
<FONT color="green">908</FONT>        {<a name="line.908"></a>
<FONT color="green">909</FONT>            // Bugzilla 8324: We were forgetting to skip Attrs and NS nodes.<a name="line.909"></a>
<FONT color="green">910</FONT>            // Also recoded the loop controls for clarity and to flatten out<a name="line.910"></a>
<FONT color="green">911</FONT>            // the tail-recursion.<a name="line.911"></a>
<FONT color="green">912</FONT>            for(++_currentNode; _sp&gt;=0; ++_currentNode)<a name="line.912"></a>
<FONT color="green">913</FONT>            {<a name="line.913"></a>
<FONT color="green">914</FONT>              if(_currentNode &lt; _stack[_sp])<a name="line.914"></a>
<FONT color="green">915</FONT>              {<a name="line.915"></a>
<FONT color="green">916</FONT>                int type = _type2(_currentNode);<a name="line.916"></a>
<FONT color="green">917</FONT>                if(type != ATTRIBUTE_NODE &amp;&amp; type != NAMESPACE_NODE)<a name="line.917"></a>
<FONT color="green">918</FONT>                  return returnNode(makeNodeHandle(_currentNode));<a name="line.918"></a>
<FONT color="green">919</FONT>              }<a name="line.919"></a>
<FONT color="green">920</FONT>              else<a name="line.920"></a>
<FONT color="green">921</FONT>                --_sp;<a name="line.921"></a>
<FONT color="green">922</FONT>            }<a name="line.922"></a>
<FONT color="green">923</FONT>            return NULL;<a name="line.923"></a>
<FONT color="green">924</FONT>        }<a name="line.924"></a>
<FONT color="green">925</FONT>    <a name="line.925"></a>
<FONT color="green">926</FONT>        // redefine DTMAxisIteratorBase's reset<a name="line.926"></a>
<FONT color="green">927</FONT>    <a name="line.927"></a>
<FONT color="green">928</FONT>        /**<a name="line.928"></a>
<FONT color="green">929</FONT>         * Resets the iterator to the last start node.<a name="line.929"></a>
<FONT color="green">930</FONT>         *<a name="line.930"></a>
<FONT color="green">931</FONT>         * @return A DTMAxisIterator, which may or may not be the same as this<a name="line.931"></a>
<FONT color="green">932</FONT>         *         iterator.<a name="line.932"></a>
<FONT color="green">933</FONT>         */<a name="line.933"></a>
<FONT color="green">934</FONT>        public DTMAxisIterator reset()<a name="line.934"></a>
<FONT color="green">935</FONT>        {<a name="line.935"></a>
<FONT color="green">936</FONT>    <a name="line.936"></a>
<FONT color="green">937</FONT>          _sp = _oldsp;<a name="line.937"></a>
<FONT color="green">938</FONT>    <a name="line.938"></a>
<FONT color="green">939</FONT>          return resetPosition();<a name="line.939"></a>
<FONT color="green">940</FONT>        }<a name="line.940"></a>
<FONT color="green">941</FONT>    <a name="line.941"></a>
<FONT color="green">942</FONT>        public void setMark() {<a name="line.942"></a>
<FONT color="green">943</FONT>            _markedsp = _sp;<a name="line.943"></a>
<FONT color="green">944</FONT>            _markedNode = _currentNode;<a name="line.944"></a>
<FONT color="green">945</FONT>            _markedDescendant = _stack[0];<a name="line.945"></a>
<FONT color="green">946</FONT>        }<a name="line.946"></a>
<FONT color="green">947</FONT>    <a name="line.947"></a>
<FONT color="green">948</FONT>        public void gotoMark() {<a name="line.948"></a>
<FONT color="green">949</FONT>            _sp = _markedsp;<a name="line.949"></a>
<FONT color="green">950</FONT>            _currentNode = _markedNode;<a name="line.950"></a>
<FONT color="green">951</FONT>        }<a name="line.951"></a>
<FONT color="green">952</FONT>      }  // end of PrecedingIterator<a name="line.952"></a>
<FONT color="green">953</FONT>    <a name="line.953"></a>
<FONT color="green">954</FONT>      /**<a name="line.954"></a>
<FONT color="green">955</FONT>       * Iterator that returns preceding nodes of agiven type for a<a name="line.955"></a>
<FONT color="green">956</FONT>       * given node. This includes the node set {root+1, start-1}, but<a name="line.956"></a>
<FONT color="green">957</FONT>       * excludes all ancestors.<a name="line.957"></a>
<FONT color="green">958</FONT>       */<a name="line.958"></a>
<FONT color="green">959</FONT>      public final class TypedPrecedingIterator extends PrecedingIterator<a name="line.959"></a>
<FONT color="green">960</FONT>      {<a name="line.960"></a>
<FONT color="green">961</FONT>    <a name="line.961"></a>
<FONT color="green">962</FONT>        /** The extended type ID that was requested. */<a name="line.962"></a>
<FONT color="green">963</FONT>        private final int _nodeType;<a name="line.963"></a>
<FONT color="green">964</FONT>    <a name="line.964"></a>
<FONT color="green">965</FONT>        /**<a name="line.965"></a>
<FONT color="green">966</FONT>         * Constructor TypedPrecedingIterator<a name="line.966"></a>
<FONT color="green">967</FONT>         *<a name="line.967"></a>
<FONT color="green">968</FONT>         *<a name="line.968"></a>
<FONT color="green">969</FONT>         * @param type The extended type ID being requested.<a name="line.969"></a>
<FONT color="green">970</FONT>         */<a name="line.970"></a>
<FONT color="green">971</FONT>        public TypedPrecedingIterator(int type)<a name="line.971"></a>
<FONT color="green">972</FONT>        {<a name="line.972"></a>
<FONT color="green">973</FONT>          _nodeType = type;<a name="line.973"></a>
<FONT color="green">974</FONT>        }<a name="line.974"></a>
<FONT color="green">975</FONT>    <a name="line.975"></a>
<FONT color="green">976</FONT>        /**<a name="line.976"></a>
<FONT color="green">977</FONT>         * Get the next node in the iteration.<a name="line.977"></a>
<FONT color="green">978</FONT>         *<a name="line.978"></a>
<FONT color="green">979</FONT>         * @return The next node handle in the iteration, or END.<a name="line.979"></a>
<FONT color="green">980</FONT>         */<a name="line.980"></a>
<FONT color="green">981</FONT>        public int next()<a name="line.981"></a>
<FONT color="green">982</FONT>        {<a name="line.982"></a>
<FONT color="green">983</FONT>          int node = _currentNode;<a name="line.983"></a>
<FONT color="green">984</FONT>          final int nodeType = _nodeType;<a name="line.984"></a>
<FONT color="green">985</FONT>    <a name="line.985"></a>
<FONT color="green">986</FONT>          if (nodeType &gt;= DTM.NTYPES) {<a name="line.986"></a>
<FONT color="green">987</FONT>            while (true) {<a name="line.987"></a>
<FONT color="green">988</FONT>              node++;<a name="line.988"></a>
<FONT color="green">989</FONT>    <a name="line.989"></a>
<FONT color="green">990</FONT>              if (_sp &lt; 0) {<a name="line.990"></a>
<FONT color="green">991</FONT>                node = NULL;<a name="line.991"></a>
<FONT color="green">992</FONT>                break;<a name="line.992"></a>
<FONT color="green">993</FONT>              }<a name="line.993"></a>
<FONT color="green">994</FONT>              else if (node &gt;= _stack[_sp]) {<a name="line.994"></a>
<FONT color="green">995</FONT>                if (--_sp &lt; 0) {<a name="line.995"></a>
<FONT color="green">996</FONT>                  node = NULL;<a name="line.996"></a>
<FONT color="green">997</FONT>                  break;<a name="line.997"></a>
<FONT color="green">998</FONT>                }<a name="line.998"></a>
<FONT color="green">999</FONT>              }<a name="line.999"></a>
<FONT color="green">1000</FONT>              else if (_exptype2(node) == nodeType) {<a name="line.1000"></a>
<FONT color="green">1001</FONT>                break;<a name="line.1001"></a>
<FONT color="green">1002</FONT>              }<a name="line.1002"></a>
<FONT color="green">1003</FONT>            }<a name="line.1003"></a>
<FONT color="green">1004</FONT>          }<a name="line.1004"></a>
<FONT color="green">1005</FONT>          else {<a name="line.1005"></a>
<FONT color="green">1006</FONT>            int expType;<a name="line.1006"></a>
<FONT color="green">1007</FONT>    <a name="line.1007"></a>
<FONT color="green">1008</FONT>            while (true) {<a name="line.1008"></a>
<FONT color="green">1009</FONT>              node++;<a name="line.1009"></a>
<FONT color="green">1010</FONT>    <a name="line.1010"></a>
<FONT color="green">1011</FONT>              if (_sp &lt; 0) {<a name="line.1011"></a>
<FONT color="green">1012</FONT>                node = NULL;<a name="line.1012"></a>
<FONT color="green">1013</FONT>                break;<a name="line.1013"></a>
<FONT color="green">1014</FONT>              }<a name="line.1014"></a>
<FONT color="green">1015</FONT>              else if (node &gt;= _stack[_sp]) {<a name="line.1015"></a>
<FONT color="green">1016</FONT>                if (--_sp &lt; 0) {<a name="line.1016"></a>
<FONT color="green">1017</FONT>                  node = NULL;<a name="line.1017"></a>
<FONT color="green">1018</FONT>                  break;<a name="line.1018"></a>
<FONT color="green">1019</FONT>                }<a name="line.1019"></a>
<FONT color="green">1020</FONT>              }<a name="line.1020"></a>
<FONT color="green">1021</FONT>              else {<a name="line.1021"></a>
<FONT color="green">1022</FONT>                expType = _exptype2(node);<a name="line.1022"></a>
<FONT color="green">1023</FONT>                if (expType &lt; DTM.NTYPES) {<a name="line.1023"></a>
<FONT color="green">1024</FONT>                  if (expType == nodeType) {<a name="line.1024"></a>
<FONT color="green">1025</FONT>                    break;<a name="line.1025"></a>
<FONT color="green">1026</FONT>                  }<a name="line.1026"></a>
<FONT color="green">1027</FONT>                }<a name="line.1027"></a>
<FONT color="green">1028</FONT>                else {<a name="line.1028"></a>
<FONT color="green">1029</FONT>                  if (m_extendedTypes[expType].getNodeType() == nodeType) {<a name="line.1029"></a>
<FONT color="green">1030</FONT>                    break;<a name="line.1030"></a>
<FONT color="green">1031</FONT>                  }<a name="line.1031"></a>
<FONT color="green">1032</FONT>                }<a name="line.1032"></a>
<FONT color="green">1033</FONT>              }<a name="line.1033"></a>
<FONT color="green">1034</FONT>            }<a name="line.1034"></a>
<FONT color="green">1035</FONT>          }<a name="line.1035"></a>
<FONT color="green">1036</FONT>    <a name="line.1036"></a>
<FONT color="green">1037</FONT>          _currentNode = node;<a name="line.1037"></a>
<FONT color="green">1038</FONT>    <a name="line.1038"></a>
<FONT color="green">1039</FONT>          return (node == NULL) ? NULL : returnNode(makeNodeHandle(node));<a name="line.1039"></a>
<FONT color="green">1040</FONT>        }<a name="line.1040"></a>
<FONT color="green">1041</FONT>      }  // end of TypedPrecedingIterator<a name="line.1041"></a>
<FONT color="green">1042</FONT>    <a name="line.1042"></a>
<FONT color="green">1043</FONT>      /**<a name="line.1043"></a>
<FONT color="green">1044</FONT>       * Iterator that returns following nodes of for a given node.<a name="line.1044"></a>
<FONT color="green">1045</FONT>       */<a name="line.1045"></a>
<FONT color="green">1046</FONT>      public class FollowingIterator extends InternalAxisIteratorBase<a name="line.1046"></a>
<FONT color="green">1047</FONT>      {<a name="line.1047"></a>
<FONT color="green">1048</FONT>        //DTMAxisTraverser m_traverser; // easier for now<a name="line.1048"></a>
<FONT color="green">1049</FONT>    <a name="line.1049"></a>
<FONT color="green">1050</FONT>        public FollowingIterator()<a name="line.1050"></a>
<FONT color="green">1051</FONT>        {<a name="line.1051"></a>
<FONT color="green">1052</FONT>          //m_traverser = getAxisTraverser(Axis.FOLLOWING);<a name="line.1052"></a>
<FONT color="green">1053</FONT>        }<a name="line.1053"></a>
<FONT color="green">1054</FONT>    <a name="line.1054"></a>
<FONT color="green">1055</FONT>        /**<a name="line.1055"></a>
<FONT color="green">1056</FONT>         * Set start to END should 'close' the iterator,<a name="line.1056"></a>
<FONT color="green">1057</FONT>         * i.e. subsequent call to next() should return END.<a name="line.1057"></a>
<FONT color="green">1058</FONT>         *<a name="line.1058"></a>
<FONT color="green">1059</FONT>         * @param node Sets the root of the iteration.<a name="line.1059"></a>
<FONT color="green">1060</FONT>         *<a name="line.1060"></a>
<FONT color="green">1061</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.1061"></a>
<FONT color="green">1062</FONT>         */<a name="line.1062"></a>
<FONT color="green">1063</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.1063"></a>
<FONT color="green">1064</FONT>        {<a name="line.1064"></a>
<FONT color="green">1065</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.1065"></a>
<FONT color="green">1066</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.1066"></a>
<FONT color="green">1067</FONT>            node = getDocument();<a name="line.1067"></a>
<FONT color="green">1068</FONT>          if (_isRestartable)<a name="line.1068"></a>
<FONT color="green">1069</FONT>          {<a name="line.1069"></a>
<FONT color="green">1070</FONT>            _startNode = node;<a name="line.1070"></a>
<FONT color="green">1071</FONT>    <a name="line.1071"></a>
<FONT color="green">1072</FONT>            //_currentNode = m_traverser.first(node);<a name="line.1072"></a>
<FONT color="green">1073</FONT>    <a name="line.1073"></a>
<FONT color="green">1074</FONT>            node = makeNodeIdentity(node);<a name="line.1074"></a>
<FONT color="green">1075</FONT>    <a name="line.1075"></a>
<FONT color="green">1076</FONT>            int first;<a name="line.1076"></a>
<FONT color="green">1077</FONT>            int type = _type2(node);<a name="line.1077"></a>
<FONT color="green">1078</FONT>    <a name="line.1078"></a>
<FONT color="green">1079</FONT>            if ((DTM.ATTRIBUTE_NODE == type) || (DTM.NAMESPACE_NODE == type))<a name="line.1079"></a>
<FONT color="green">1080</FONT>            {<a name="line.1080"></a>
<FONT color="green">1081</FONT>              node = _parent2(node);<a name="line.1081"></a>
<FONT color="green">1082</FONT>              first = _firstch2(node);<a name="line.1082"></a>
<FONT color="green">1083</FONT>    <a name="line.1083"></a>
<FONT color="green">1084</FONT>              if (NULL != first) {<a name="line.1084"></a>
<FONT color="green">1085</FONT>                _currentNode = makeNodeHandle(first);<a name="line.1085"></a>
<FONT color="green">1086</FONT>                return resetPosition();<a name="line.1086"></a>
<FONT color="green">1087</FONT>              }<a name="line.1087"></a>
<FONT color="green">1088</FONT>            }<a name="line.1088"></a>
<FONT color="green">1089</FONT>    <a name="line.1089"></a>
<FONT color="green">1090</FONT>            do<a name="line.1090"></a>
<FONT color="green">1091</FONT>            {<a name="line.1091"></a>
<FONT color="green">1092</FONT>              first = _nextsib2(node);<a name="line.1092"></a>
<FONT color="green">1093</FONT>    <a name="line.1093"></a>
<FONT color="green">1094</FONT>              if (NULL == first)<a name="line.1094"></a>
<FONT color="green">1095</FONT>                node = _parent2(node);<a name="line.1095"></a>
<FONT color="green">1096</FONT>            }<a name="line.1096"></a>
<FONT color="green">1097</FONT>            while (NULL == first &amp;&amp; NULL != node);<a name="line.1097"></a>
<FONT color="green">1098</FONT>    <a name="line.1098"></a>
<FONT color="green">1099</FONT>            _currentNode = makeNodeHandle(first);<a name="line.1099"></a>
<FONT color="green">1100</FONT>    <a name="line.1100"></a>
<FONT color="green">1101</FONT>            // _currentNode precedes possible following(node) nodes<a name="line.1101"></a>
<FONT color="green">1102</FONT>            return resetPosition();<a name="line.1102"></a>
<FONT color="green">1103</FONT>          }<a name="line.1103"></a>
<FONT color="green">1104</FONT>    <a name="line.1104"></a>
<FONT color="green">1105</FONT>          return this;<a name="line.1105"></a>
<FONT color="green">1106</FONT>        }<a name="line.1106"></a>
<FONT color="green">1107</FONT>    <a name="line.1107"></a>
<FONT color="green">1108</FONT>        /**<a name="line.1108"></a>
<FONT color="green">1109</FONT>         * Get the next node in the iteration.<a name="line.1109"></a>
<FONT color="green">1110</FONT>         *<a name="line.1110"></a>
<FONT color="green">1111</FONT>         * @return The next node handle in the iteration, or END.<a name="line.1111"></a>
<FONT color="green">1112</FONT>         */<a name="line.1112"></a>
<FONT color="green">1113</FONT>        public int next()<a name="line.1113"></a>
<FONT color="green">1114</FONT>        {<a name="line.1114"></a>
<FONT color="green">1115</FONT>    <a name="line.1115"></a>
<FONT color="green">1116</FONT>          int node = _currentNode;<a name="line.1116"></a>
<FONT color="green">1117</FONT>    <a name="line.1117"></a>
<FONT color="green">1118</FONT>          //_currentNode = m_traverser.next(_startNode, _currentNode);<a name="line.1118"></a>
<FONT color="green">1119</FONT>          int current = makeNodeIdentity(node);<a name="line.1119"></a>
<FONT color="green">1120</FONT>    <a name="line.1120"></a>
<FONT color="green">1121</FONT>          while (true)<a name="line.1121"></a>
<FONT color="green">1122</FONT>          {<a name="line.1122"></a>
<FONT color="green">1123</FONT>            current++;<a name="line.1123"></a>
<FONT color="green">1124</FONT>    <a name="line.1124"></a>
<FONT color="green">1125</FONT>            int type = _type2(current);<a name="line.1125"></a>
<FONT color="green">1126</FONT>            if (NULL == type) {<a name="line.1126"></a>
<FONT color="green">1127</FONT>              _currentNode = NULL;<a name="line.1127"></a>
<FONT color="green">1128</FONT>              return returnNode(node);<a name="line.1128"></a>
<FONT color="green">1129</FONT>            }<a name="line.1129"></a>
<FONT color="green">1130</FONT>    <a name="line.1130"></a>
<FONT color="green">1131</FONT>            if (ATTRIBUTE_NODE == type || NAMESPACE_NODE == type)<a name="line.1131"></a>
<FONT color="green">1132</FONT>              continue;<a name="line.1132"></a>
<FONT color="green">1133</FONT>    <a name="line.1133"></a>
<FONT color="green">1134</FONT>            _currentNode = makeNodeHandle(current);<a name="line.1134"></a>
<FONT color="green">1135</FONT>            return returnNode(node);<a name="line.1135"></a>
<FONT color="green">1136</FONT>          }<a name="line.1136"></a>
<FONT color="green">1137</FONT>        }<a name="line.1137"></a>
<FONT color="green">1138</FONT>    <a name="line.1138"></a>
<FONT color="green">1139</FONT>      }  // end of FollowingIterator<a name="line.1139"></a>
<FONT color="green">1140</FONT>    <a name="line.1140"></a>
<FONT color="green">1141</FONT>      /**<a name="line.1141"></a>
<FONT color="green">1142</FONT>       * Iterator that returns following nodes of a given type for a given node.<a name="line.1142"></a>
<FONT color="green">1143</FONT>       */<a name="line.1143"></a>
<FONT color="green">1144</FONT>      public final class TypedFollowingIterator extends FollowingIterator<a name="line.1144"></a>
<FONT color="green">1145</FONT>      {<a name="line.1145"></a>
<FONT color="green">1146</FONT>    <a name="line.1146"></a>
<FONT color="green">1147</FONT>        /** The extended type ID that was requested. */<a name="line.1147"></a>
<FONT color="green">1148</FONT>        private final int _nodeType;<a name="line.1148"></a>
<FONT color="green">1149</FONT>    <a name="line.1149"></a>
<FONT color="green">1150</FONT>        /**<a name="line.1150"></a>
<FONT color="green">1151</FONT>         * Constructor TypedFollowingIterator<a name="line.1151"></a>
<FONT color="green">1152</FONT>         *<a name="line.1152"></a>
<FONT color="green">1153</FONT>         *<a name="line.1153"></a>
<FONT color="green">1154</FONT>         * @param type The extended type ID being requested.<a name="line.1154"></a>
<FONT color="green">1155</FONT>         */<a name="line.1155"></a>
<FONT color="green">1156</FONT>        public TypedFollowingIterator(int type)<a name="line.1156"></a>
<FONT color="green">1157</FONT>        {<a name="line.1157"></a>
<FONT color="green">1158</FONT>          _nodeType = type;<a name="line.1158"></a>
<FONT color="green">1159</FONT>        }<a name="line.1159"></a>
<FONT color="green">1160</FONT>    <a name="line.1160"></a>
<FONT color="green">1161</FONT>        /**<a name="line.1161"></a>
<FONT color="green">1162</FONT>         * Get the next node in the iteration.<a name="line.1162"></a>
<FONT color="green">1163</FONT>         *<a name="line.1163"></a>
<FONT color="green">1164</FONT>         * @return The next node handle in the iteration, or END.<a name="line.1164"></a>
<FONT color="green">1165</FONT>         */<a name="line.1165"></a>
<FONT color="green">1166</FONT>        public int next()<a name="line.1166"></a>
<FONT color="green">1167</FONT>        {<a name="line.1167"></a>
<FONT color="green">1168</FONT>          int current;<a name="line.1168"></a>
<FONT color="green">1169</FONT>          int node;<a name="line.1169"></a>
<FONT color="green">1170</FONT>          int type;<a name="line.1170"></a>
<FONT color="green">1171</FONT>    <a name="line.1171"></a>
<FONT color="green">1172</FONT>          final int nodeType = _nodeType;<a name="line.1172"></a>
<FONT color="green">1173</FONT>          int currentNodeID = makeNodeIdentity(_currentNode);<a name="line.1173"></a>
<FONT color="green">1174</FONT>    <a name="line.1174"></a>
<FONT color="green">1175</FONT>          if (nodeType &gt;= DTM.NTYPES) {<a name="line.1175"></a>
<FONT color="green">1176</FONT>            do {<a name="line.1176"></a>
<FONT color="green">1177</FONT>              node = currentNodeID;<a name="line.1177"></a>
<FONT color="green">1178</FONT>              current = node;<a name="line.1178"></a>
<FONT color="green">1179</FONT>    <a name="line.1179"></a>
<FONT color="green">1180</FONT>              do {<a name="line.1180"></a>
<FONT color="green">1181</FONT>                current++;<a name="line.1181"></a>
<FONT color="green">1182</FONT>                type = _type2(current);<a name="line.1182"></a>
<FONT color="green">1183</FONT>              }<a name="line.1183"></a>
<FONT color="green">1184</FONT>              while (type != NULL &amp;&amp; (ATTRIBUTE_NODE == type || NAMESPACE_NODE == type));<a name="line.1184"></a>
<FONT color="green">1185</FONT>    <a name="line.1185"></a>
<FONT color="green">1186</FONT>              currentNodeID = (type != NULL) ? current : NULL;<a name="line.1186"></a>
<FONT color="green">1187</FONT>            }<a name="line.1187"></a>
<FONT color="green">1188</FONT>            while (node != DTM.NULL &amp;&amp; _exptype2(node) != nodeType);<a name="line.1188"></a>
<FONT color="green">1189</FONT>          }<a name="line.1189"></a>
<FONT color="green">1190</FONT>          else {<a name="line.1190"></a>
<FONT color="green">1191</FONT>            do {<a name="line.1191"></a>
<FONT color="green">1192</FONT>              node = currentNodeID;<a name="line.1192"></a>
<FONT color="green">1193</FONT>              current = node;<a name="line.1193"></a>
<FONT color="green">1194</FONT>    <a name="line.1194"></a>
<FONT color="green">1195</FONT>              do {<a name="line.1195"></a>
<FONT color="green">1196</FONT>                current++;<a name="line.1196"></a>
<FONT color="green">1197</FONT>                type = _type2(current);<a name="line.1197"></a>
<FONT color="green">1198</FONT>              }<a name="line.1198"></a>
<FONT color="green">1199</FONT>              while (type != NULL &amp;&amp; (ATTRIBUTE_NODE == type || NAMESPACE_NODE == type));<a name="line.1199"></a>
<FONT color="green">1200</FONT>    <a name="line.1200"></a>
<FONT color="green">1201</FONT>              currentNodeID = (type != NULL) ? current : NULL;<a name="line.1201"></a>
<FONT color="green">1202</FONT>            }<a name="line.1202"></a>
<FONT color="green">1203</FONT>            while (node != DTM.NULL<a name="line.1203"></a>
<FONT color="green">1204</FONT>                   &amp;&amp; (_exptype2(node) != nodeType &amp;&amp; _type2(node) != nodeType));<a name="line.1204"></a>
<FONT color="green">1205</FONT>          }<a name="line.1205"></a>
<FONT color="green">1206</FONT>    <a name="line.1206"></a>
<FONT color="green">1207</FONT>          _currentNode = makeNodeHandle(currentNodeID);<a name="line.1207"></a>
<FONT color="green">1208</FONT>          return (node == DTM.NULL ? DTM.NULL :returnNode(makeNodeHandle(node)));<a name="line.1208"></a>
<FONT color="green">1209</FONT>        }<a name="line.1209"></a>
<FONT color="green">1210</FONT>      }  // end of TypedFollowingIterator<a name="line.1210"></a>
<FONT color="green">1211</FONT>    <a name="line.1211"></a>
<FONT color="green">1212</FONT>      /**<a name="line.1212"></a>
<FONT color="green">1213</FONT>       * Iterator that returns the ancestors of a given node in document<a name="line.1213"></a>
<FONT color="green">1214</FONT>       * order.  (NOTE!  This was changed from the XSLTC code!)<a name="line.1214"></a>
<FONT color="green">1215</FONT>       */<a name="line.1215"></a>
<FONT color="green">1216</FONT>      public class AncestorIterator extends InternalAxisIteratorBase<a name="line.1216"></a>
<FONT color="green">1217</FONT>      {<a name="line.1217"></a>
<FONT color="green">1218</FONT>        // The initial size of the ancestor array<a name="line.1218"></a>
<FONT color="green">1219</FONT>        private static final int m_blocksize = 32;<a name="line.1219"></a>
<FONT color="green">1220</FONT>    <a name="line.1220"></a>
<FONT color="green">1221</FONT>        // The array for ancestor nodes. This array will grow dynamically.<a name="line.1221"></a>
<FONT color="green">1222</FONT>        int[] m_ancestors = new int[m_blocksize];<a name="line.1222"></a>
<FONT color="green">1223</FONT>    <a name="line.1223"></a>
<FONT color="green">1224</FONT>        // Number of ancestor nodes in the array<a name="line.1224"></a>
<FONT color="green">1225</FONT>        int m_size = 0;<a name="line.1225"></a>
<FONT color="green">1226</FONT>    <a name="line.1226"></a>
<FONT color="green">1227</FONT>        int m_ancestorsPos;<a name="line.1227"></a>
<FONT color="green">1228</FONT>    <a name="line.1228"></a>
<FONT color="green">1229</FONT>        int m_markedPos;<a name="line.1229"></a>
<FONT color="green">1230</FONT>    <a name="line.1230"></a>
<FONT color="green">1231</FONT>        /** The real start node for this axes, since _startNode will be adjusted. */<a name="line.1231"></a>
<FONT color="green">1232</FONT>        int m_realStartNode;<a name="line.1232"></a>
<FONT color="green">1233</FONT>    <a name="line.1233"></a>
<FONT color="green">1234</FONT>        /**<a name="line.1234"></a>
<FONT color="green">1235</FONT>         * Get start to END should 'close' the iterator,<a name="line.1235"></a>
<FONT color="green">1236</FONT>         * i.e. subsequent call to next() should return END.<a name="line.1236"></a>
<FONT color="green">1237</FONT>         *<a name="line.1237"></a>
<FONT color="green">1238</FONT>         * @return The root node of the iteration.<a name="line.1238"></a>
<FONT color="green">1239</FONT>         */<a name="line.1239"></a>
<FONT color="green">1240</FONT>        public int getStartNode()<a name="line.1240"></a>
<FONT color="green">1241</FONT>        {<a name="line.1241"></a>
<FONT color="green">1242</FONT>          return m_realStartNode;<a name="line.1242"></a>
<FONT color="green">1243</FONT>        }<a name="line.1243"></a>
<FONT color="green">1244</FONT>    <a name="line.1244"></a>
<FONT color="green">1245</FONT>        /**<a name="line.1245"></a>
<FONT color="green">1246</FONT>         * True if this iterator has a reversed axis.<a name="line.1246"></a>
<FONT color="green">1247</FONT>         *<a name="line.1247"></a>
<FONT color="green">1248</FONT>         * @return true since this iterator is a reversed axis.<a name="line.1248"></a>
<FONT color="green">1249</FONT>         */<a name="line.1249"></a>
<FONT color="green">1250</FONT>        public final boolean isReverse()<a name="line.1250"></a>
<FONT color="green">1251</FONT>        {<a name="line.1251"></a>
<FONT color="green">1252</FONT>          return true;<a name="line.1252"></a>
<FONT color="green">1253</FONT>        }<a name="line.1253"></a>
<FONT color="green">1254</FONT>    <a name="line.1254"></a>
<FONT color="green">1255</FONT>        /**<a name="line.1255"></a>
<FONT color="green">1256</FONT>         * Returns a deep copy of this iterator.  The cloned iterator is not reset.<a name="line.1256"></a>
<FONT color="green">1257</FONT>         *<a name="line.1257"></a>
<FONT color="green">1258</FONT>         * @return a deep copy of this iterator.<a name="line.1258"></a>
<FONT color="green">1259</FONT>         */<a name="line.1259"></a>
<FONT color="green">1260</FONT>        public DTMAxisIterator cloneIterator()<a name="line.1260"></a>
<FONT color="green">1261</FONT>        {<a name="line.1261"></a>
<FONT color="green">1262</FONT>          _isRestartable = false;  // must set to false for any clone<a name="line.1262"></a>
<FONT color="green">1263</FONT>    <a name="line.1263"></a>
<FONT color="green">1264</FONT>          try<a name="line.1264"></a>
<FONT color="green">1265</FONT>          {<a name="line.1265"></a>
<FONT color="green">1266</FONT>            final AncestorIterator clone = (AncestorIterator) super.clone();<a name="line.1266"></a>
<FONT color="green">1267</FONT>    <a name="line.1267"></a>
<FONT color="green">1268</FONT>            clone._startNode = _startNode;<a name="line.1268"></a>
<FONT color="green">1269</FONT>    <a name="line.1269"></a>
<FONT color="green">1270</FONT>            // return clone.reset();<a name="line.1270"></a>
<FONT color="green">1271</FONT>            return clone;<a name="line.1271"></a>
<FONT color="green">1272</FONT>          }<a name="line.1272"></a>
<FONT color="green">1273</FONT>          catch (CloneNotSupportedException e)<a name="line.1273"></a>
<FONT color="green">1274</FONT>          {<a name="line.1274"></a>
<FONT color="green">1275</FONT>            throw new DTMException(XMLMessages.createXMLMessage(XMLErrorResources.ER_ITERATOR_CLONE_NOT_SUPPORTED, null)); //"Iterator clone not supported.");<a name="line.1275"></a>
<FONT color="green">1276</FONT>          }<a name="line.1276"></a>
<FONT color="green">1277</FONT>        }<a name="line.1277"></a>
<FONT color="green">1278</FONT>    <a name="line.1278"></a>
<FONT color="green">1279</FONT>        /**<a name="line.1279"></a>
<FONT color="green">1280</FONT>         * Set start to END should 'close' the iterator,<a name="line.1280"></a>
<FONT color="green">1281</FONT>         * i.e. subsequent call to next() should return END.<a name="line.1281"></a>
<FONT color="green">1282</FONT>         *<a name="line.1282"></a>
<FONT color="green">1283</FONT>         * @param node Sets the root of the iteration.<a name="line.1283"></a>
<FONT color="green">1284</FONT>         *<a name="line.1284"></a>
<FONT color="green">1285</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.1285"></a>
<FONT color="green">1286</FONT>         */<a name="line.1286"></a>
<FONT color="green">1287</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.1287"></a>
<FONT color="green">1288</FONT>        {<a name="line.1288"></a>
<FONT color="green">1289</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.1289"></a>
<FONT color="green">1290</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.1290"></a>
<FONT color="green">1291</FONT>            node = getDocument();<a name="line.1291"></a>
<FONT color="green">1292</FONT>          m_realStartNode = node;<a name="line.1292"></a>
<FONT color="green">1293</FONT>    <a name="line.1293"></a>
<FONT color="green">1294</FONT>          if (_isRestartable)<a name="line.1294"></a>
<FONT color="green">1295</FONT>          {<a name="line.1295"></a>
<FONT color="green">1296</FONT>            int nodeID = makeNodeIdentity(node);<a name="line.1296"></a>
<FONT color="green">1297</FONT>            m_size = 0;<a name="line.1297"></a>
<FONT color="green">1298</FONT>    <a name="line.1298"></a>
<FONT color="green">1299</FONT>            if (nodeID == DTM.NULL) {<a name="line.1299"></a>
<FONT color="green">1300</FONT>              _currentNode = DTM.NULL;<a name="line.1300"></a>
<FONT color="green">1301</FONT>              m_ancestorsPos = 0;<a name="line.1301"></a>
<FONT color="green">1302</FONT>              return this;<a name="line.1302"></a>
<FONT color="green">1303</FONT>            }<a name="line.1303"></a>
<FONT color="green">1304</FONT>    <a name="line.1304"></a>
<FONT color="green">1305</FONT>            // Start from the current node's parent if<a name="line.1305"></a>
<FONT color="green">1306</FONT>            // _includeSelf is false.<a name="line.1306"></a>
<FONT color="green">1307</FONT>            if (!_includeSelf) {<a name="line.1307"></a>
<FONT color="green">1308</FONT>              nodeID = _parent2(nodeID);<a name="line.1308"></a>
<FONT color="green">1309</FONT>              node = makeNodeHandle(nodeID);<a name="line.1309"></a>
<FONT color="green">1310</FONT>            }<a name="line.1310"></a>
<FONT color="green">1311</FONT>    <a name="line.1311"></a>
<FONT color="green">1312</FONT>            _startNode = node;<a name="line.1312"></a>
<FONT color="green">1313</FONT>    <a name="line.1313"></a>
<FONT color="green">1314</FONT>            while (nodeID != END) {<a name="line.1314"></a>
<FONT color="green">1315</FONT>              //m_ancestors.addElement(node);<a name="line.1315"></a>
<FONT color="green">1316</FONT>              if (m_size &gt;= m_ancestors.length)<a name="line.1316"></a>
<FONT color="green">1317</FONT>              {<a name="line.1317"></a>
<FONT color="green">1318</FONT>                int[] newAncestors = new int[m_size * 2];<a name="line.1318"></a>
<FONT color="green">1319</FONT>                System.arraycopy(m_ancestors, 0, newAncestors, 0, m_ancestors.length);<a name="line.1319"></a>
<FONT color="green">1320</FONT>                m_ancestors = newAncestors;<a name="line.1320"></a>
<FONT color="green">1321</FONT>              }<a name="line.1321"></a>
<FONT color="green">1322</FONT>    <a name="line.1322"></a>
<FONT color="green">1323</FONT>              m_ancestors[m_size++] = node;<a name="line.1323"></a>
<FONT color="green">1324</FONT>              nodeID = _parent2(nodeID);<a name="line.1324"></a>
<FONT color="green">1325</FONT>              node = makeNodeHandle(nodeID);<a name="line.1325"></a>
<FONT color="green">1326</FONT>            }<a name="line.1326"></a>
<FONT color="green">1327</FONT>    <a name="line.1327"></a>
<FONT color="green">1328</FONT>            m_ancestorsPos = m_size - 1;<a name="line.1328"></a>
<FONT color="green">1329</FONT>    <a name="line.1329"></a>
<FONT color="green">1330</FONT>            _currentNode = (m_ancestorsPos&gt;=0)<a name="line.1330"></a>
<FONT color="green">1331</FONT>                                   ? m_ancestors[m_ancestorsPos]<a name="line.1331"></a>
<FONT color="green">1332</FONT>                                   : DTM.NULL;<a name="line.1332"></a>
<FONT color="green">1333</FONT>    <a name="line.1333"></a>
<FONT color="green">1334</FONT>            return resetPosition();<a name="line.1334"></a>
<FONT color="green">1335</FONT>          }<a name="line.1335"></a>
<FONT color="green">1336</FONT>    <a name="line.1336"></a>
<FONT color="green">1337</FONT>          return this;<a name="line.1337"></a>
<FONT color="green">1338</FONT>        }<a name="line.1338"></a>
<FONT color="green">1339</FONT>    <a name="line.1339"></a>
<FONT color="green">1340</FONT>        /**<a name="line.1340"></a>
<FONT color="green">1341</FONT>         * Resets the iterator to the last start node.<a name="line.1341"></a>
<FONT color="green">1342</FONT>         *<a name="line.1342"></a>
<FONT color="green">1343</FONT>         * @return A DTMAxisIterator, which may or may not be the same as this<a name="line.1343"></a>
<FONT color="green">1344</FONT>         *         iterator.<a name="line.1344"></a>
<FONT color="green">1345</FONT>         */<a name="line.1345"></a>
<FONT color="green">1346</FONT>        public DTMAxisIterator reset()<a name="line.1346"></a>
<FONT color="green">1347</FONT>        {<a name="line.1347"></a>
<FONT color="green">1348</FONT>    <a name="line.1348"></a>
<FONT color="green">1349</FONT>          m_ancestorsPos = m_size - 1;<a name="line.1349"></a>
<FONT color="green">1350</FONT>    <a name="line.1350"></a>
<FONT color="green">1351</FONT>          _currentNode = (m_ancestorsPos &gt;= 0) ? m_ancestors[m_ancestorsPos]<a name="line.1351"></a>
<FONT color="green">1352</FONT>                                             : DTM.NULL;<a name="line.1352"></a>
<FONT color="green">1353</FONT>    <a name="line.1353"></a>
<FONT color="green">1354</FONT>          return resetPosition();<a name="line.1354"></a>
<FONT color="green">1355</FONT>        }<a name="line.1355"></a>
<FONT color="green">1356</FONT>    <a name="line.1356"></a>
<FONT color="green">1357</FONT>        /**<a name="line.1357"></a>
<FONT color="green">1358</FONT>         * Get the next node in the iteration.<a name="line.1358"></a>
<FONT color="green">1359</FONT>         *<a name="line.1359"></a>
<FONT color="green">1360</FONT>         * @return The next node handle in the iteration, or END.<a name="line.1360"></a>
<FONT color="green">1361</FONT>         */<a name="line.1361"></a>
<FONT color="green">1362</FONT>        public int next()<a name="line.1362"></a>
<FONT color="green">1363</FONT>        {<a name="line.1363"></a>
<FONT color="green">1364</FONT>    <a name="line.1364"></a>
<FONT color="green">1365</FONT>          int next = _currentNode;<a name="line.1365"></a>
<FONT color="green">1366</FONT>    <a name="line.1366"></a>
<FONT color="green">1367</FONT>          int pos = --m_ancestorsPos;<a name="line.1367"></a>
<FONT color="green">1368</FONT>    <a name="line.1368"></a>
<FONT color="green">1369</FONT>          _currentNode = (pos &gt;= 0) ? m_ancestors[m_ancestorsPos]<a name="line.1369"></a>
<FONT color="green">1370</FONT>                                    : DTM.NULL;<a name="line.1370"></a>
<FONT color="green">1371</FONT>    <a name="line.1371"></a>
<FONT color="green">1372</FONT>          return returnNode(next);<a name="line.1372"></a>
<FONT color="green">1373</FONT>        }<a name="line.1373"></a>
<FONT color="green">1374</FONT>    <a name="line.1374"></a>
<FONT color="green">1375</FONT>        public void setMark() {<a name="line.1375"></a>
<FONT color="green">1376</FONT>            m_markedPos = m_ancestorsPos;<a name="line.1376"></a>
<FONT color="green">1377</FONT>        }<a name="line.1377"></a>
<FONT color="green">1378</FONT>    <a name="line.1378"></a>
<FONT color="green">1379</FONT>        public void gotoMark() {<a name="line.1379"></a>
<FONT color="green">1380</FONT>            m_ancestorsPos = m_markedPos;<a name="line.1380"></a>
<FONT color="green">1381</FONT>            _currentNode = m_ancestorsPos&gt;=0 ? m_ancestors[m_ancestorsPos]<a name="line.1381"></a>
<FONT color="green">1382</FONT>                                             : DTM.NULL;<a name="line.1382"></a>
<FONT color="green">1383</FONT>        }<a name="line.1383"></a>
<FONT color="green">1384</FONT>      }  // end of AncestorIterator<a name="line.1384"></a>
<FONT color="green">1385</FONT>    <a name="line.1385"></a>
<FONT color="green">1386</FONT>      /**<a name="line.1386"></a>
<FONT color="green">1387</FONT>       * Typed iterator that returns the ancestors of a given node.<a name="line.1387"></a>
<FONT color="green">1388</FONT>       */<a name="line.1388"></a>
<FONT color="green">1389</FONT>      public final class TypedAncestorIterator extends AncestorIterator<a name="line.1389"></a>
<FONT color="green">1390</FONT>      {<a name="line.1390"></a>
<FONT color="green">1391</FONT>    <a name="line.1391"></a>
<FONT color="green">1392</FONT>        /** The extended type ID that was requested. */<a name="line.1392"></a>
<FONT color="green">1393</FONT>        private final int _nodeType;<a name="line.1393"></a>
<FONT color="green">1394</FONT>    <a name="line.1394"></a>
<FONT color="green">1395</FONT>        /**<a name="line.1395"></a>
<FONT color="green">1396</FONT>         * Constructor TypedAncestorIterator<a name="line.1396"></a>
<FONT color="green">1397</FONT>         *<a name="line.1397"></a>
<FONT color="green">1398</FONT>         *<a name="line.1398"></a>
<FONT color="green">1399</FONT>         * @param type The extended type ID being requested.<a name="line.1399"></a>
<FONT color="green">1400</FONT>         */<a name="line.1400"></a>
<FONT color="green">1401</FONT>        public TypedAncestorIterator(int type)<a name="line.1401"></a>
<FONT color="green">1402</FONT>        {<a name="line.1402"></a>
<FONT color="green">1403</FONT>          _nodeType = type;<a name="line.1403"></a>
<FONT color="green">1404</FONT>        }<a name="line.1404"></a>
<FONT color="green">1405</FONT>    <a name="line.1405"></a>
<FONT color="green">1406</FONT>        /**<a name="line.1406"></a>
<FONT color="green">1407</FONT>         * Set start to END should 'close' the iterator,<a name="line.1407"></a>
<FONT color="green">1408</FONT>         * i.e. subsequent call to next() should return END.<a name="line.1408"></a>
<FONT color="green">1409</FONT>         *<a name="line.1409"></a>
<FONT color="green">1410</FONT>         * @param node Sets the root of the iteration.<a name="line.1410"></a>
<FONT color="green">1411</FONT>         *<a name="line.1411"></a>
<FONT color="green">1412</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.1412"></a>
<FONT color="green">1413</FONT>         */<a name="line.1413"></a>
<FONT color="green">1414</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.1414"></a>
<FONT color="green">1415</FONT>        {<a name="line.1415"></a>
<FONT color="green">1416</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.1416"></a>
<FONT color="green">1417</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.1417"></a>
<FONT color="green">1418</FONT>            node = getDocument();<a name="line.1418"></a>
<FONT color="green">1419</FONT>          m_realStartNode = node;<a name="line.1419"></a>
<FONT color="green">1420</FONT>    <a name="line.1420"></a>
<FONT color="green">1421</FONT>          if (_isRestartable)<a name="line.1421"></a>
<FONT color="green">1422</FONT>          {<a name="line.1422"></a>
<FONT color="green">1423</FONT>            int nodeID = makeNodeIdentity(node);<a name="line.1423"></a>
<FONT color="green">1424</FONT>            m_size = 0;<a name="line.1424"></a>
<FONT color="green">1425</FONT>    <a name="line.1425"></a>
<FONT color="green">1426</FONT>            if (nodeID == DTM.NULL) {<a name="line.1426"></a>
<FONT color="green">1427</FONT>              _currentNode = DTM.NULL;<a name="line.1427"></a>
<FONT color="green">1428</FONT>              m_ancestorsPos = 0;<a name="line.1428"></a>
<FONT color="green">1429</FONT>              return this;<a name="line.1429"></a>
<FONT color="green">1430</FONT>            }<a name="line.1430"></a>
<FONT color="green">1431</FONT>    <a name="line.1431"></a>
<FONT color="green">1432</FONT>            final int nodeType = _nodeType;<a name="line.1432"></a>
<FONT color="green">1433</FONT>    <a name="line.1433"></a>
<FONT color="green">1434</FONT>            if (!_includeSelf) {<a name="line.1434"></a>
<FONT color="green">1435</FONT>              nodeID = _parent2(nodeID);<a name="line.1435"></a>
<FONT color="green">1436</FONT>              node = makeNodeHandle(nodeID);<a name="line.1436"></a>
<FONT color="green">1437</FONT>            }<a name="line.1437"></a>
<FONT color="green">1438</FONT>    <a name="line.1438"></a>
<FONT color="green">1439</FONT>            _startNode = node;<a name="line.1439"></a>
<FONT color="green">1440</FONT>    <a name="line.1440"></a>
<FONT color="green">1441</FONT>            if (nodeType &gt;= DTM.NTYPES) {<a name="line.1441"></a>
<FONT color="green">1442</FONT>              while (nodeID != END) {<a name="line.1442"></a>
<FONT color="green">1443</FONT>                int eType = _exptype2(nodeID);<a name="line.1443"></a>
<FONT color="green">1444</FONT>    <a name="line.1444"></a>
<FONT color="green">1445</FONT>                if (eType == nodeType) {<a name="line.1445"></a>
<FONT color="green">1446</FONT>                  if (m_size &gt;= m_ancestors.length)<a name="line.1446"></a>
<FONT color="green">1447</FONT>                  {<a name="line.1447"></a>
<FONT color="green">1448</FONT>                    int[] newAncestors = new int[m_size * 2];<a name="line.1448"></a>
<FONT color="green">1449</FONT>                    System.arraycopy(m_ancestors, 0, newAncestors, 0, m_ancestors.length);<a name="line.1449"></a>
<FONT color="green">1450</FONT>                    m_ancestors = newAncestors;<a name="line.1450"></a>
<FONT color="green">1451</FONT>                  }<a name="line.1451"></a>
<FONT color="green">1452</FONT>                  m_ancestors[m_size++] = makeNodeHandle(nodeID);<a name="line.1452"></a>
<FONT color="green">1453</FONT>                }<a name="line.1453"></a>
<FONT color="green">1454</FONT>                nodeID = _parent2(nodeID);<a name="line.1454"></a>
<FONT color="green">1455</FONT>              }<a name="line.1455"></a>
<FONT color="green">1456</FONT>            }<a name="line.1456"></a>
<FONT color="green">1457</FONT>            else {<a name="line.1457"></a>
<FONT color="green">1458</FONT>              while (nodeID != END) {<a name="line.1458"></a>
<FONT color="green">1459</FONT>                int eType = _exptype2(nodeID);<a name="line.1459"></a>
<FONT color="green">1460</FONT>    <a name="line.1460"></a>
<FONT color="green">1461</FONT>                if ((eType &lt; DTM.NTYPES &amp;&amp; eType == nodeType)<a name="line.1461"></a>
<FONT color="green">1462</FONT>                    || (eType &gt;= DTM.NTYPES<a name="line.1462"></a>
<FONT color="green">1463</FONT>                        &amp;&amp; m_extendedTypes[eType].getNodeType() == nodeType)) {<a name="line.1463"></a>
<FONT color="green">1464</FONT>                  if (m_size &gt;= m_ancestors.length)<a name="line.1464"></a>
<FONT color="green">1465</FONT>                  {<a name="line.1465"></a>
<FONT color="green">1466</FONT>                    int[] newAncestors = new int[m_size * 2];<a name="line.1466"></a>
<FONT color="green">1467</FONT>                    System.arraycopy(m_ancestors, 0, newAncestors, 0, m_ancestors.length);<a name="line.1467"></a>
<FONT color="green">1468</FONT>                    m_ancestors = newAncestors;<a name="line.1468"></a>
<FONT color="green">1469</FONT>                  }<a name="line.1469"></a>
<FONT color="green">1470</FONT>                  m_ancestors[m_size++] = makeNodeHandle(nodeID);<a name="line.1470"></a>
<FONT color="green">1471</FONT>                }<a name="line.1471"></a>
<FONT color="green">1472</FONT>                nodeID = _parent2(nodeID);<a name="line.1472"></a>
<FONT color="green">1473</FONT>              }<a name="line.1473"></a>
<FONT color="green">1474</FONT>            }<a name="line.1474"></a>
<FONT color="green">1475</FONT>            m_ancestorsPos = m_size - 1;<a name="line.1475"></a>
<FONT color="green">1476</FONT>    <a name="line.1476"></a>
<FONT color="green">1477</FONT>            _currentNode = (m_ancestorsPos&gt;=0)<a name="line.1477"></a>
<FONT color="green">1478</FONT>                                   ? m_ancestors[m_ancestorsPos]<a name="line.1478"></a>
<FONT color="green">1479</FONT>                                   : DTM.NULL;<a name="line.1479"></a>
<FONT color="green">1480</FONT>    <a name="line.1480"></a>
<FONT color="green">1481</FONT>            return resetPosition();<a name="line.1481"></a>
<FONT color="green">1482</FONT>          }<a name="line.1482"></a>
<FONT color="green">1483</FONT>    <a name="line.1483"></a>
<FONT color="green">1484</FONT>          return this;<a name="line.1484"></a>
<FONT color="green">1485</FONT>        }<a name="line.1485"></a>
<FONT color="green">1486</FONT>    <a name="line.1486"></a>
<FONT color="green">1487</FONT>        /**<a name="line.1487"></a>
<FONT color="green">1488</FONT>         * Return the node at the given position.<a name="line.1488"></a>
<FONT color="green">1489</FONT>         */<a name="line.1489"></a>
<FONT color="green">1490</FONT>        public int getNodeByPosition(int position)<a name="line.1490"></a>
<FONT color="green">1491</FONT>        {<a name="line.1491"></a>
<FONT color="green">1492</FONT>          if (position &gt; 0 &amp;&amp; position &lt;= m_size) {<a name="line.1492"></a>
<FONT color="green">1493</FONT>            return m_ancestors[position-1];<a name="line.1493"></a>
<FONT color="green">1494</FONT>          }<a name="line.1494"></a>
<FONT color="green">1495</FONT>          else<a name="line.1495"></a>
<FONT color="green">1496</FONT>            return DTM.NULL;<a name="line.1496"></a>
<FONT color="green">1497</FONT>        }<a name="line.1497"></a>
<FONT color="green">1498</FONT>    <a name="line.1498"></a>
<FONT color="green">1499</FONT>        /**<a name="line.1499"></a>
<FONT color="green">1500</FONT>         * Returns the position of the last node within the iteration, as<a name="line.1500"></a>
<FONT color="green">1501</FONT>         * defined by XPath.<a name="line.1501"></a>
<FONT color="green">1502</FONT>         */<a name="line.1502"></a>
<FONT color="green">1503</FONT>        public int getLast() {<a name="line.1503"></a>
<FONT color="green">1504</FONT>          return m_size;<a name="line.1504"></a>
<FONT color="green">1505</FONT>        }<a name="line.1505"></a>
<FONT color="green">1506</FONT>      }  // end of TypedAncestorIterator<a name="line.1506"></a>
<FONT color="green">1507</FONT>    <a name="line.1507"></a>
<FONT color="green">1508</FONT>      /**<a name="line.1508"></a>
<FONT color="green">1509</FONT>       * Iterator that returns the descendants of a given node.<a name="line.1509"></a>
<FONT color="green">1510</FONT>       */<a name="line.1510"></a>
<FONT color="green">1511</FONT>      public class DescendantIterator extends InternalAxisIteratorBase<a name="line.1511"></a>
<FONT color="green">1512</FONT>      {<a name="line.1512"></a>
<FONT color="green">1513</FONT>    <a name="line.1513"></a>
<FONT color="green">1514</FONT>        /**<a name="line.1514"></a>
<FONT color="green">1515</FONT>         * Set start to END should 'close' the iterator,<a name="line.1515"></a>
<FONT color="green">1516</FONT>         * i.e. subsequent call to next() should return END.<a name="line.1516"></a>
<FONT color="green">1517</FONT>         *<a name="line.1517"></a>
<FONT color="green">1518</FONT>         * @param node Sets the root of the iteration.<a name="line.1518"></a>
<FONT color="green">1519</FONT>         *<a name="line.1519"></a>
<FONT color="green">1520</FONT>         * @return A DTMAxisIterator set to the start of the iteration.<a name="line.1520"></a>
<FONT color="green">1521</FONT>         */<a name="line.1521"></a>
<FONT color="green">1522</FONT>        public DTMAxisIterator setStartNode(int node)<a name="line.1522"></a>
<FONT color="green">1523</FONT>        {<a name="line.1523"></a>
<FONT color="green">1524</FONT>    //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.1524"></a>
<FONT color="green">1525</FONT>          if (node == DTMDefaultBase.ROOTNODE)<a name="line.1525"></a>
<FONT color="green">1526</FONT>            node = getDocument();<a name="line.1526"></a>
<FONT color="green">1527</FONT>          if (_isRestartable)<a name="line.1527"></a>
<FONT color="green">1528</FONT>          {<a name="line.1528"></a>
<FONT color="green">1529</FONT>            node = makeNodeIdentity(node);<a name="line.1529"></a>
<FONT color="green">1530</FONT>            _startNode = node;<a name="line.1530"></a>
<FONT color="green">1531</FONT>    <a name="line.1531"></a>
<FONT color="green">1532</FONT>            if (_includeSelf)<a name="line.1532"></a>
<FONT color="green">1533</FONT>              node--;<a name="line.1533"></a>
<FONT color="green">1534</FONT>    <a name="line.1534"></a>
<FONT color="green">1535</FONT>            _currentNode = node;<a name="line.1535"></a>
<FONT color="green">1536</FONT>    <a name="line.1536"></a>
<FONT color="green">1537</FONT>            return resetPosition();<a name="line.1537"></a>
<FONT color="green">1538</FONT>          }<a name="line.1538"></a>
<FONT color="green">1539</FONT>    <a name="line.1539"></a>
<FONT color="green">1540</FONT>          return this;<a name="line.1540"></a>
<FONT color="green">1541</FONT>        }<a name="line.1541"></a>
<FONT color="green">1542</FONT>    <a name="line.1542"></a>
<FONT color="green">1543</FONT>        /**<a name="line.1543"></a>
<FONT color="green">1544</FONT>         * Tell if this node identity is a descendant.  Assumes that<a name="line.1544"></a>
<FONT color="green">1545</FONT>         * the node info for the element has already been obtained.<a name="line.1545"></a>
<FONT color="green">1546</FONT>         *<a name="line.1546"></a>
<FONT color="green">1547</FONT>         * This one-sided test works only if the parent has been<a name="line.1547"></a>
<FONT color="green">1548</FONT>         * previously tested and is known to be a descendent. It fails if<a name="line.1548"></a>
<FONT color="green">1549</FONT>         * the parent is the _startNode's next sibling, or indeed any node<a name="line.1549"></a>
<FONT color="green">1550</FONT>         * that follows _startNode in document order.  That may suffice<a name="line.1550"></a>
<FONT color="green">1551</FONT>         * for this iterator, but it's not really an isDescendent() test.<a name="line.1551"></a>
<FONT color="green">1552</FONT>         * %REVIEW% rename?<a name="line.1552"></a>
<FONT color="green">1553</FONT>         *<a name="line.1553"></a>
<FONT color="green">1554</FONT>         * @param identity The index number of the node in question.<a name="line.1554"></a>
<FONT color="green">1555</FONT>         * @return true if the index is a descendant of _startNode.<a name="line.1555"></a>
<FONT color="green">1556</FONT>         */<a name="line.1556"></a>
<FONT color="green">1557</FONT>        protected final boolean isDescendant(int identity)<a name="line.1557"></a>
<FONT color="green">1558</FONT>        {<a name="line.1558"></a>
<FONT color="green">1559</FONT>          return (_parent2(identity) &gt;= _startNode) || (_startNode == identity);<a name="line.1559"></a>
<FONT color="green">1560</FONT>        }<a name="line.1560"></a>
<FONT color="green">1561</FONT>    <a name="line.1561"></a>
<FONT color="green">1562</FONT>        /**<a name="line.1562"></a>
<FONT color="green">1563</FONT>         * Get the next node in the iteration.<a name="line.1563"></a>
<FONT color="green">1564</FONT>         *<a name="line.1564"></a>
<FONT color="green">1565</FONT>         * @return The next node handle in the iteration, or END.<a name="line.1565"></a>
<FONT color="green">1566</FONT>         */<a name="line.1566"></a>
<FONT color="green">1567</FONT>        public int next()<a name="line.1567"></a>
<FONT color="green">1568</FONT>        {<a name="line.1568"></a>
<FONT color="green">1569</FONT>          final int startNode = _startNode;<a name="line.1569"></a>
<FONT color="green">1570</FONT>          if (startNode == NULL) {<a name="line.1570"></a>
<FONT color="green">1571</FONT>            return NULL;<a name="line.1571"></a>
<FONT color="green">1572</FONT>          }<a name="line.1572"></a>
<FONT color="green">1573</FONT>    <a name="line.1573"></a>
<FONT color="green">1574</FONT>          if (_includeSelf &amp;&amp; (_currentNode + 1) == startNode)<a name="line.1574"></a>
<FONT color="green">1575</FONT>              return returnNode(makeNodeHandle(++_currentNode)); // | m_dtmIdent);<a name="line.1575"></a>
<FONT color="green">1576</FONT>    <a name="line.1576"></a>
<FONT color="green">1577</FONT>          int node = _currentNode;<a name="line.1577"></a>
<FONT color="green">1578</FONT>          int type;<a name="line.1578"></a>
<FONT color="green">1579</FONT>    <a name="line.1579"></a>
<FONT color="green">1580</FONT>          // %OPT% If the startNode is the root node, do not need<a name="line.1580"></a>
<FONT color="green">1581</FONT>          // to do the isDescendant() check.<a name="line.1581"></a>
<FONT color="green">1582</FONT>          if (startNode == ROOTNODE) {<a name="line.1582"></a>
<FONT color="green">1583</FONT>            int eType;<a name="line.1583"></a>
<FONT color="green">1584</FONT>            do {<a name="line.1584"></a>
<FONT color="green">1585</FONT>              node++;<a name="line.1585"></a>
<FONT color="green">1586</FONT>              eType = _exptype2(node);<a name="line.1586"></a>
<FONT color="green">1587</FONT>    <a name="line.1587"></a>
<FONT color="green">1588</FONT>              if (NULL == eType) {<a name="line.1588"></a>
<FONT color="green">1589</FONT>                _currentNode = NULL;<a name="line.1589"></a>
<FONT color="green">1590</FONT>                return END;<a name="line.1590"></a>
<FONT color="green">1591</FONT>              }<a name="line.1591"></a>
<FONT color="green">1592</FONT>            } while (eType == TEXT_NODE<a name="line.1592"></a>
<FONT color="green">1593</FONT>                     || (type = m_extendedTypes[eType].getNodeType()) == ATTRIBUTE_NODE<a name="line.1593"></a>
<FONT color="green">1594</FONT>                     || type == NAMESPACE_NODE);<a name="line.1594"></a>
<FONT color="green">1595</FONT>          }<a name="line.1595"></a>
<FONT color="green">1596</FONT>          else {<a name="line.1596"></a>
<FONT color="green">1597</FONT>            do {<a name="line.1597"></a>
<FONT color="green">1598</FONT>              node++;<a name="line.1598"></a>
<FONT color="green">1599</FONT>              type = _type2(node);<a name="line.1599"></a>
<FONT color="green">1600</FONT>    <a name="line.1600"></a>
<FONT color="green">1601</FONT>              if (NULL == type ||!isDescendant(node)) {<a name="line.1601"></a>
<FONT color="green">1602</FONT>                _currentNode = NULL;<a name="line.1602"></a>
<FONT color="green">1603</FONT>                return END;<a name="line.1603"></a>
<FONT color="green">1604</FONT>              }<a name="line.1604"></a>
<FONT color="green">1605</FONT>            } while(ATTRIBUTE_NODE == type || TEXT_NODE == type<a name="line.1605"></a>
<FONT color="green">1606</FONT>                     || NAMESPACE_NODE == type);<a name="line.1606"></a>
<FONT color="green">1607</FONT>          }<a name="line.1607"></a>
<FONT color="green">1608</FONT>    <a name="line.1608"></a>
<FONT color="green">1609</FONT>          _currentNode = node;<a name="line.1609"></a>
<FONT color="green">1610</FONT>          return returnNode(makeNodeHandle(node));  // make handle.<a name="line.1610"></a>
<FONT color="green">1611</FONT>        }<a name="line.1611"></a>
<FONT color="green">1612</FONT>    <a name="line.1612"></a>
<FONT color="green">1613</FONT>        /**<a name="line.1613"></a>
<FONT color="green">1614</FONT>         * Reset.<a name="line.1614"></a>
<FONT color="green">1615</FONT>         *<a name="line.1615"></a>
<FONT color="green">1616</FONT>         */<a name="line.1616"></a>
<FONT color="green">1617</FONT>      public DTMAxisIterator reset()<a name="line.1617"></a>
<FONT color="green">1618</FONT>      {<a name="line.1618"></a>
<FONT color="green">1619</FONT>    <a name="line.1619"></a>
<FONT color="green">1620</FONT>        final boolean temp = _isRestartable;<a name="line.1620"></a>
<FONT color="green">1621</FONT>    <a name="line.1621"></a>
<FONT color="green">1622</FONT>        _isRestartable = true;<a name="line.1622"></a>
<FONT color="green">1623</FONT>    <a name="line.1623"></a>
<FONT color="green">1624</FONT>        setStartNode(makeNodeHandle(_startNode));<a name="line.1624"></a>
<FONT color="green">1625</FONT>    <a name="line.1625"></a>
<FONT color="green">1626</FONT>        _isRestartable = temp;<a name="line.1626"></a>
<FONT color="green">1627</FONT>    <a name="line.1627"></a>
<FONT color="green">1628</FONT>        return this;<a name="line.1628"></a>
<FONT color="green">1629</FONT>      }<a name="line.1629"></a>
<FONT color="green">1630</FONT>    <a name="line.1630"></a>
<FONT color="green">1631</FONT>      }  // end of DescendantIterator<a name="line.1631"></a>
<FONT color="green">1632</FONT>    <a name="line.1632"></a>
<FONT color="green">1633</FONT>      /**<a name="line.1633"></a>
<FONT color="green">1634</FONT>       * Typed iterator that returns the descendants of a given node.<a name="line.1634"></a>
<FONT color="green">1635</FONT>       */<a name="line.1635"></a>
<FONT color="green">1636</FONT>      public final class TypedDescendantIterator extends DescendantIterator<a name="line.1636"></a>
<FONT color="green">1637</FONT>      {<a name="line.1637"></a>
<FONT color="green">1638</FONT>    <a name="line.1638"></a>
<FONT color="green">1639</FONT>        /** The extended type ID that was requested. */<a name="line.1639"></a>
<FONT color="green">1640</FONT>        private final int _nodeType;<a name="line.1640"></a>
<FONT color="green">1641</FONT>    <a name="line.1641"></a>
<FONT color="green">1642</FONT>        /**<a name="line.1642"></a>
<FONT color="green">1643</FONT>         * Constructor TypedDescendantIterator<a name="line.1643"></a>
<FONT color="green">1644</FONT>         *<a name="line.1644"></a>
<FONT color="green">1645</FONT>         *<a name="line.1645"></a>
<FONT color="green">1646</FONT>         * @param nodeType Extended type ID being requested.<a name="line.1646"></a>
<FONT color="green">1647</FONT>         */<a name="line.1647"></a>
<FONT color="green">1648</FONT>        public TypedDescendantIterator(int nodeType)<a name="line.1648"></a>
<FONT color="green">1649</FONT>        {<a name="line.1649"></a>
<FONT color="green">1650</FONT>          _nodeType = nodeType;<a name="line.1650"></a>
<FONT color="green">1651</FONT>        }<a name="line.1651"></a>
<FONT color="green">1652</FONT>    <a name="line.1652"></a>
<FONT color="green">1653</FONT>        /**<a name="line.1653"></a>
<FONT color="green">1654</FONT>         * Get the next node in the iteration.<a name="line.1654"></a>
<FONT color="green">1655</FONT>         *<a name="line.1655"></a>
<FONT color="green">1656</FONT>         * @return The next node handle in the iteration, or END.<a name="line.1656"></a>
<FONT color="green">1657</FONT>         */<a name="line.1657"></a>
<FONT color="green">1658</FONT>        public int next()<a name="line.1658"></a>
<FONT color="green">1659</FONT>        {<a name="line.1659"></a>
<FONT color="green">1660</FONT>          final int startNode = _startNode;<a name="line.1660"></a>
<FONT color="green">1661</FONT>          if (_startNode == NULL) {<a name="line.1661"></a>
<FONT color="green">1662</FONT>            return NULL;<a name="line.1662"></a>
<FONT color="green">1663</FONT>          }<a name="line.1663"></a>
<FONT color="green">1664</FONT>    <a name="line.1664"></a>
<FONT color="green">1665</FONT>          int node = _currentNode;<a name="line.1665"></a>
<FONT color="green">1666</FONT>    <a name="line.1666"></a>
<FONT color="green">1667</FONT>          int expType;<a name="line.1667"></a>
<FONT color="green">1668</FONT>          final int nodeType = _nodeType;<a name="line.1668"></a>
<FONT color="green">1669</FONT>    <a name="line.1669"></a>
<FONT color="green">1670</FONT>          if (nodeType != DTM.ELEMENT_NODE)<a name="line.1670"></a>
<FONT color="green">1671</FONT>          {<a name="line.1671"></a>
<FONT color="green">1672</FONT>            do<a name="line.1672"></a>
<FONT color="green">1673</FONT>            {<a name="line.1673"></a>
<FONT color="green">1674</FONT>              node++;<a name="line.1674"></a>
<FONT color="green">1675</FONT>              expType = _exptype2(node);<a name="line.1675"></a>
<FONT color="green">1676</FONT>    <a name="line.1676"></a>
<FONT color="green">1677</FONT>              if (NULL == expType || _parent2(node) &lt; startNode &amp;&amp; startNode != node) {<a name="line.1677"></a>
<FONT color="green">1678</FONT>                _currentNode = NULL;<a name="line.1678"></a>
<FONT color="green">1679</FONT>                return END;<a name="line.1679"></a>
<FONT color="green">1680</FONT>              }<a name="line.1680"></a>
<FONT color="green">1681</FONT>            }<a name="line.1681"></a>
<FONT color="green">1682</FONT>            while (expType != nodeType);<a name="line.1682"></a>
<FONT color="green">1683</FONT>          }<a name="line.1683"></a>
<FONT color="green">1684</FONT>          // %OPT% If the start node is root (e.g. in the case of //node),<a name="line.1684"></a>
<FONT color="green">1685</FONT>          // we can save the isDescendant() check, because all nodes are<a name="line.1685"></a>
<FONT color="green">1686</FONT>          // descendants of root.<a name="line.1686"></a>
<FONT color="green">1687</FONT>          else if (startNode == DTMDefaultBase.ROOTNODE)<a name="line.1687"></a>
<FONT color="green">1688</FONT>          {<a name="line.1688"></a>
<FONT color="green">1689</FONT>            do<a name="line.1689"></a>
<FONT color="green">1690</FONT>            {<a name="line.1690"></a>
<FONT color="green">1691</FONT>              node++;<a name="line.1691"></a>
<FONT color="green">1692</FONT>              expType = _exptype2(node);<a name="line.1692"></a>
<FONT color="green">1693</FONT>    <a name="line.1693"></a>
<FONT color="green">1694</FONT>              if (NULL == expType) {<a name="line.1694"></a>
<FONT color="green">1695</FONT>                _currentNode = NULL;<a name="line.1695"></a>
<FONT color="green">1696</FONT>                return END;<a name="line.1696"></a>
<FONT color="green">1697</FONT>              }<a name="line.1697"></a>
<FONT color="green">1698</FONT>            } while (expType &lt; DTM.NTYPES<a name="line.1698"></a>
<FONT color="green">1699</FONT>                    || m_extendedTypes[expType].getNodeType() != DTM.ELEMENT_NODE);<a name="line.1699"></a>
<FONT color="green">1700</FONT>          }<a name="line.1700"></a>
<FONT color="green">1701</FONT>          else<a name="line.1701"></a>
<FONT color="green">1702</FONT>          {<a name="line.1702"></a>
<FONT color="green">1703</FONT>            do<a name="line.1703"></a>
<FONT color="green">1704</FONT>            {<a name="line.1704"></a>
<FONT color="green">1705</FONT>              node++;<a name="line.1705"></a>
<FONT color="green">1706</FONT>              expType = _exptype2(node);<a name="line.1706"></a>
<FONT color="green">1707</FONT>    <a name="line.1707"></a>
<FONT color="green">1708</FONT>              if (NULL == expType || _parent2(node) &lt; startNode &amp;&amp; startNode != node) {<a name="line.1708"></a>
<FONT color="green">1709</FONT>                _currentNode = NULL;<a name="line.1709"></a>
<FONT color="green">1710</FONT>                return END;<a name="line.1710"></a>
<FONT color="green">1711</FONT>              }<a name="line.1711"></a>
<FONT color="green">1712</FONT>            }<a name="line.1712"></a>
<FONT color="green">1713</FONT>            while (expType &lt; DTM.NTYPES<a name="line.1713"></a>
<FONT color="green">1714</FONT>                   || m_extendedTypes[expType].getNodeType() != DTM.ELEMENT_NODE);<a name="line.1714"></a>
<FONT color="green">1715</FONT>          }<a name="line.1715"></a>
<FONT color="green">1716</FONT>    <a name="line.1716"></a>
<FONT color="green">1717</FONT>          _currentNode = node;<a name="line.1717"></a>
<FONT color="green">1718</FONT>          return returnNode(makeNodeHandle(node));<a name="line.1718"></a>
<FONT color="green">1719</FONT>        }<a name="line.1719"></a>
<FONT color="green">1720</FONT>      }  // end of TypedDescendantIterator<a name="line.1720"></a>
<FONT color="green">1721</FONT>    <a name="line.1721"></a>
<FONT color="green">1722</FONT>      /**<a name="line.1722"></a>
<FONT color="green">1723</FONT>       * Iterator that returns a given node only if it is of a given type.<a name="line.1723"></a>
<FONT color="green">1724</FONT>       */<a name="line.1724"></a>
<FONT color="green">1725</FONT>      public final class TypedSingletonIterator extends SingletonIterator<a name="line.1725"></a>
<FONT color="green">1726</FONT>      {<a name="line.1726"></a>
<FONT color="green">1727</FONT>    <a name="line.1727"></a>
<FONT color="green">1728</FONT>        /** The extended type ID that was requested. */<a name="line.1728"></a>
<FONT color="green">1729</FONT>        private final int _nodeType;<a name="line.1729"></a>
<FONT color="green">1730</FONT>    <a name="line.1730"></a>
<FONT color="green">1731</FONT>        /**<a name="line.1731"></a>
<FONT color="green">1732</FONT>         * Constructor TypedSingletonIterator<a name="line.1732"></a>
<FONT color="green">1733</FONT>         *<a name="line.1733"></a>
<FONT color="green">1734</FONT>         *<a name="line.1734"></a>
<FONT color="green">1735</FONT>         * @param nodeType The extended type ID being requested.<a name="line.1735"></a>
<FONT color="green">1736</FONT>         */<a name="line.1736"></a>
<FONT color="green">1737</FONT>        public TypedSingletonIterator(int nodeType)<a name="line.1737"></a>
<FONT color="green">1738</FONT>        {<a name="line.1738"></a>
<FONT color="green">1739</FONT>          _nodeType = nodeType;<a name="line.1739"></a>
<FONT color="green">1740</FONT>        }<a name="line.1740"></a>
<FONT color="green">1741</FONT>    <a name="line.1741"></a>
<FONT color="green">1742</FONT>        /**<a name="line.1742"></a>
<FONT color="green">1743</FONT>         * Get the next node in the iteration.<a name="line.1743"></a>
<FONT color="green">1744</FONT>         *<a name="line.1744"></a>
<FONT color="green">1745</FONT>         * @return The next node handle in the iteration, or END.<a name="line.1745"></a>
<FONT color="green">1746</FONT>         */<a name="line.1746"></a>
<FONT color="green">1747</FONT>        public int next()<a name="line.1747"></a>
<FONT color="green">1748</FONT>        {<a name="line.1748"></a>
<FONT color="green">1749</FONT>    <a name="line.1749"></a>
<FONT color="green">1750</FONT>          final int result = _currentNode;<a name="line.1750"></a>
<FONT color="green">1751</FONT>          if (result == END)<a name="line.1751"></a>
<FONT color="green">1752</FONT>            return DTM.NULL;<a name="line.1752"></a>
<FONT color="green">1753</FONT>    <a name="line.1753"></a>
<FONT color="green">1754</FONT>          _currentNode = END;<a name="line.1754"></a>
<FONT color="green">1755</FONT>    <a name="line.1755"></a>
<FONT color="green">1756</FONT>          if (_nodeType &gt;= DTM.NTYPES) {<a name="line.1756"></a>
<FONT color="green">1757</FONT>            if (_exptype2(makeNodeIdentity(result)) == _nodeType) {<a name="line.1757"></a>
<FONT color="green">1758</FONT>              return returnNode(result);<a name="line.1758"></a>
<FONT color="green">1759</FONT>            }<a name="line.1759"></a>
<FONT color="green">1760</FONT>          }<a name="line.1760"></a>
<FONT color="green">1761</FONT>          else {<a name="line.1761"></a>
<FONT color="green">1762</FONT>            if (_type2(makeNodeIdentity(result)) == _nodeType) {<a name="line.1762"></a>
<FONT color="green">1763</FONT>              return returnNode(result);<a name="line.1763"></a>
<FONT color="green">1764</FONT>            }<a name="line.1764"></a>
<FONT color="green">1765</FONT>          }<a name="line.1765"></a>
<FONT color="green">1766</FONT>    <a name="line.1766"></a>
<FONT color="green">1767</FONT>          return NULL;<a name="line.1767"></a>
<FONT color="green">1768</FONT>        }<a name="line.1768"></a>
<FONT color="green">1769</FONT>      }  // end of TypedSingletonIterator<a name="line.1769"></a>
<FONT color="green">1770</FONT>    <a name="line.1770"></a>
<FONT color="green">1771</FONT>      /*******************************************************************<a name="line.1771"></a>
<FONT color="green">1772</FONT>       *                End of nested iterators<a name="line.1772"></a>
<FONT color="green">1773</FONT>       *******************************************************************/<a name="line.1773"></a>
<FONT color="green">1774</FONT>    <a name="line.1774"></a>
<FONT color="green">1775</FONT>    <a name="line.1775"></a>
<FONT color="green">1776</FONT>      // %OPT% Array references which are used to cache the map0 arrays in<a name="line.1776"></a>
<FONT color="green">1777</FONT>      // SuballocatedIntVectors. Using the cached arrays reduces the level<a name="line.1777"></a>
<FONT color="green">1778</FONT>      // of indirection and results in better performance than just calling<a name="line.1778"></a>
<FONT color="green">1779</FONT>      // SuballocatedIntVector.elementAt().<a name="line.1779"></a>
<FONT color="green">1780</FONT>      private int[] m_exptype_map0;<a name="line.1780"></a>
<FONT color="green">1781</FONT>      private int[] m_nextsib_map0;<a name="line.1781"></a>
<FONT color="green">1782</FONT>      private int[] m_firstch_map0;<a name="line.1782"></a>
<FONT color="green">1783</FONT>      private int[] m_parent_map0;<a name="line.1783"></a>
<FONT color="green">1784</FONT>    <a name="line.1784"></a>
<FONT color="green">1785</FONT>      // Double array references to the map arrays in SuballocatedIntVectors.<a name="line.1785"></a>
<FONT color="green">1786</FONT>      private int[][] m_exptype_map;<a name="line.1786"></a>
<FONT color="green">1787</FONT>      private int[][] m_nextsib_map;<a name="line.1787"></a>
<FONT color="green">1788</FONT>      private int[][] m_firstch_map;<a name="line.1788"></a>
<FONT color="green">1789</FONT>      private int[][] m_parent_map;<a name="line.1789"></a>
<FONT color="green">1790</FONT>    <a name="line.1790"></a>
<FONT color="green">1791</FONT>      // %OPT% Cache the array of extended types in this class<a name="line.1791"></a>
<FONT color="green">1792</FONT>      protected ExtendedType[] m_extendedTypes;<a name="line.1792"></a>
<FONT color="green">1793</FONT>    <a name="line.1793"></a>
<FONT color="green">1794</FONT>      // A Vector which is used to store the values of attribute, namespace,<a name="line.1794"></a>
<FONT color="green">1795</FONT>      // comment and PI nodes.<a name="line.1795"></a>
<FONT color="green">1796</FONT>      //<a name="line.1796"></a>
<FONT color="green">1797</FONT>      // %OPT% These values are unlikely to be equal. Storing<a name="line.1797"></a>
<FONT color="green">1798</FONT>      // them in a plain Vector is more efficient than storing in the<a name="line.1798"></a>
<FONT color="green">1799</FONT>      // DTMStringPool because we can save the cost for hash calculation.<a name="line.1799"></a>
<FONT color="green">1800</FONT>      //<a name="line.1800"></a>
<FONT color="green">1801</FONT>      // %REVISIT% Do we need a custom class (e.g. StringVector) here?<a name="line.1801"></a>
<FONT color="green">1802</FONT>      protected Vector m_values;<a name="line.1802"></a>
<FONT color="green">1803</FONT>    <a name="line.1803"></a>
<FONT color="green">1804</FONT>      // The current index into the m_values Vector.<a name="line.1804"></a>
<FONT color="green">1805</FONT>      private int m_valueIndex = 0;<a name="line.1805"></a>
<FONT color="green">1806</FONT>    <a name="line.1806"></a>
<FONT color="green">1807</FONT>      // The maximum value of the current node index.<a name="line.1807"></a>
<FONT color="green">1808</FONT>      private int m_maxNodeIndex;<a name="line.1808"></a>
<FONT color="green">1809</FONT>    <a name="line.1809"></a>
<FONT color="green">1810</FONT>      // Cache the shift and mask values for the SuballocatedIntVectors.<a name="line.1810"></a>
<FONT color="green">1811</FONT>      protected int m_SHIFT;<a name="line.1811"></a>
<FONT color="green">1812</FONT>      protected int m_MASK;<a name="line.1812"></a>
<FONT color="green">1813</FONT>      protected int m_blocksize;<a name="line.1813"></a>
<FONT color="green">1814</FONT>    <a name="line.1814"></a>
<FONT color="green">1815</FONT>      /** %OPT% If the offset and length of a Text node are within certain limits,<a name="line.1815"></a>
<FONT color="green">1816</FONT>       * we store a bitwise encoded value into an int, using 10 bits (max. 1024)<a name="line.1816"></a>
<FONT color="green">1817</FONT>       * for length and 21 bits for offset. We can save two SuballocatedIntVector<a name="line.1817"></a>
<FONT color="green">1818</FONT>       * calls for each getStringValueX() and dispatchCharacterEvents() call by<a name="line.1818"></a>
<FONT color="green">1819</FONT>       * doing this.<a name="line.1819"></a>
<FONT color="green">1820</FONT>       */<a name="line.1820"></a>
<FONT color="green">1821</FONT>      // The number of bits for the length of a Text node.<a name="line.1821"></a>
<FONT color="green">1822</FONT>      protected final static int TEXT_LENGTH_BITS = 10;<a name="line.1822"></a>
<FONT color="green">1823</FONT>    <a name="line.1823"></a>
<FONT color="green">1824</FONT>      // The number of bits for the offset of a Text node.<a name="line.1824"></a>
<FONT color="green">1825</FONT>      protected final static int TEXT_OFFSET_BITS = 21;<a name="line.1825"></a>
<FONT color="green">1826</FONT>    <a name="line.1826"></a>
<FONT color="green">1827</FONT>      // The maximum length value<a name="line.1827"></a>
<FONT color="green">1828</FONT>      protected final static int TEXT_LENGTH_MAX = (1&lt;&lt;TEXT_LENGTH_BITS) - 1;<a name="line.1828"></a>
<FONT color="green">1829</FONT>    <a name="line.1829"></a>
<FONT color="green">1830</FONT>      // The maximum offset value<a name="line.1830"></a>
<FONT color="green">1831</FONT>      protected final static int TEXT_OFFSET_MAX = (1&lt;&lt;TEXT_OFFSET_BITS) - 1;<a name="line.1831"></a>
<FONT color="green">1832</FONT>    <a name="line.1832"></a>
<FONT color="green">1833</FONT>      // True if we want to build the ID index table.<a name="line.1833"></a>
<FONT color="green">1834</FONT>      protected boolean m_buildIdIndex = true;<a name="line.1834"></a>
<FONT color="green">1835</FONT>    <a name="line.1835"></a>
<FONT color="green">1836</FONT>      // Constant for empty String<a name="line.1836"></a>
<FONT color="green">1837</FONT>      private static final String EMPTY_STR = "";<a name="line.1837"></a>
<FONT color="green">1838</FONT>    <a name="line.1838"></a>
<FONT color="green">1839</FONT>      // Constant for empty XMLString<a name="line.1839"></a>
<FONT color="green">1840</FONT>      private static final XMLString EMPTY_XML_STR = new XMLStringDefault("");<a name="line.1840"></a>
<FONT color="green">1841</FONT>    <a name="line.1841"></a>
<FONT color="green">1842</FONT>      /**<a name="line.1842"></a>
<FONT color="green">1843</FONT>       * Construct a SAX2DTM2 object using the default block size.<a name="line.1843"></a>
<FONT color="green">1844</FONT>       */<a name="line.1844"></a>
<FONT color="green">1845</FONT>      public SAX2DTM2(DTMManager mgr, Source source, int dtmIdentity,<a name="line.1845"></a>
<FONT color="green">1846</FONT>                     DTMWSFilter whiteSpaceFilter,<a name="line.1846"></a>
<FONT color="green">1847</FONT>                     XMLStringFactory xstringfactory,<a name="line.1847"></a>
<FONT color="green">1848</FONT>                     boolean doIndexing)<a name="line.1848"></a>
<FONT color="green">1849</FONT>      {<a name="line.1849"></a>
<FONT color="green">1850</FONT>    <a name="line.1850"></a>
<FONT color="green">1851</FONT>        this(mgr, source, dtmIdentity, whiteSpaceFilter,<a name="line.1851"></a>
<FONT color="green">1852</FONT>              xstringfactory, doIndexing, DEFAULT_BLOCKSIZE, true, true, false);<a name="line.1852"></a>
<FONT color="green">1853</FONT>      }<a name="line.1853"></a>
<FONT color="green">1854</FONT>    <a name="line.1854"></a>
<FONT color="green">1855</FONT>      /**<a name="line.1855"></a>
<FONT color="green">1856</FONT>       * Construct a SAX2DTM2 object using the given block size.<a name="line.1856"></a>
<FONT color="green">1857</FONT>       */<a name="line.1857"></a>
<FONT color="green">1858</FONT>      public SAX2DTM2(DTMManager mgr, Source source, int dtmIdentity,<a name="line.1858"></a>
<FONT color="green">1859</FONT>                     DTMWSFilter whiteSpaceFilter,<a name="line.1859"></a>
<FONT color="green">1860</FONT>                     XMLStringFactory xstringfactory,<a name="line.1860"></a>
<FONT color="green">1861</FONT>                     boolean doIndexing,<a name="line.1861"></a>
<FONT color="green">1862</FONT>                     int blocksize,<a name="line.1862"></a>
<FONT color="green">1863</FONT>                     boolean usePrevsib,<a name="line.1863"></a>
<FONT color="green">1864</FONT>                     boolean buildIdIndex,<a name="line.1864"></a>
<FONT color="green">1865</FONT>                     boolean newNameTable)<a name="line.1865"></a>
<FONT color="green">1866</FONT>      {<a name="line.1866"></a>
<FONT color="green">1867</FONT>    <a name="line.1867"></a>
<FONT color="green">1868</FONT>        super(mgr, source, dtmIdentity, whiteSpaceFilter,<a name="line.1868"></a>
<FONT color="green">1869</FONT>              xstringfactory, doIndexing, blocksize, usePrevsib, newNameTable);<a name="line.1869"></a>
<FONT color="green">1870</FONT>    <a name="line.1870"></a>
<FONT color="green">1871</FONT>        // Initialize the values of m_SHIFT and m_MASK.<a name="line.1871"></a>
<FONT color="green">1872</FONT>        int shift;<a name="line.1872"></a>
<FONT color="green">1873</FONT>        for(shift=0; (blocksize&gt;&gt;&gt;=1) != 0; ++shift);<a name="line.1873"></a>
<FONT color="green">1874</FONT>    <a name="line.1874"></a>
<FONT color="green">1875</FONT>        m_blocksize = 1&lt;&lt;shift;<a name="line.1875"></a>
<FONT color="green">1876</FONT>        m_SHIFT = shift;<a name="line.1876"></a>
<FONT color="green">1877</FONT>        m_MASK = m_blocksize - 1;<a name="line.1877"></a>
<FONT color="green">1878</FONT>    <a name="line.1878"></a>
<FONT color="green">1879</FONT>        m_buildIdIndex = buildIdIndex;<a name="line.1879"></a>
<FONT color="green">1880</FONT>    <a name="line.1880"></a>
<FONT color="green">1881</FONT>        // Some documents do not have attribute nodes. That is why<a name="line.1881"></a>
<FONT color="green">1882</FONT>        // we set the initial size of this Vector to be small and set<a name="line.1882"></a>
<FONT color="green">1883</FONT>        // the increment to a bigger number.<a name="line.1883"></a>
<FONT color="green">1884</FONT>        m_values = new Vector(32, 512);<a name="line.1884"></a>
<FONT color="green">1885</FONT>    <a name="line.1885"></a>
<FONT color="green">1886</FONT>        m_maxNodeIndex = 1 &lt;&lt; DTMManager.IDENT_DTM_NODE_BITS;<a name="line.1886"></a>
<FONT color="green">1887</FONT>    <a name="line.1887"></a>
<FONT color="green">1888</FONT>        // Set the map0 values in the constructor.<a name="line.1888"></a>
<FONT color="green">1889</FONT>        m_exptype_map0 = m_exptype.getMap0();<a name="line.1889"></a>
<FONT color="green">1890</FONT>        m_nextsib_map0 = m_nextsib.getMap0();<a name="line.1890"></a>
<FONT color="green">1891</FONT>        m_firstch_map0 = m_firstch.getMap0();<a name="line.1891"></a>
<FONT color="green">1892</FONT>        m_parent_map0  = m_parent.getMap0();<a name="line.1892"></a>
<FONT color="green">1893</FONT>      }<a name="line.1893"></a>
<FONT color="green">1894</FONT>    <a name="line.1894"></a>
<FONT color="green">1895</FONT>      /**<a name="line.1895"></a>
<FONT color="green">1896</FONT>       * Override DTMDefaultBase._exptype() by dropping the incremental code.<a name="line.1896"></a>
<FONT color="green">1897</FONT>       *<a name="line.1897"></a>
<FONT color="green">1898</FONT>       * &lt;p&gt;This one is less efficient than _exptype2. It is only used during<a name="line.1898"></a>
<FONT color="green">1899</FONT>       * DTM building. _exptype2 is used after the document is fully built.<a name="line.1899"></a>
<FONT color="green">1900</FONT>       */<a name="line.1900"></a>
<FONT color="green">1901</FONT>      public final int _exptype(int identity)<a name="line.1901"></a>
<FONT color="green">1902</FONT>      {<a name="line.1902"></a>
<FONT color="green">1903</FONT>        return m_exptype.elementAt(identity);<a name="line.1903"></a>
<FONT color="green">1904</FONT>      }<a name="line.1904"></a>
<FONT color="green">1905</FONT>    <a name="line.1905"></a>
<FONT color="green">1906</FONT>      /************************************************************************<a name="line.1906"></a>
<FONT color="green">1907</FONT>       *             DTM base accessor interfaces<a name="line.1907"></a>
<FONT color="green">1908</FONT>       *<a name="line.1908"></a>
<FONT color="green">1909</FONT>       * %OPT% The code in the following interfaces (e.g. _exptype2, etc.) are<a name="line.1909"></a>
<FONT color="green">1910</FONT>       * very important to the DTM performance. To have the best performace,<a name="line.1910"></a>
<FONT color="green">1911</FONT>       * these several interfaces have direct access to the internal arrays of<a name="line.1911"></a>
<FONT color="green">1912</FONT>       * the SuballocatedIntVectors. The final modifier also has a noticeable<a name="line.1912"></a>
<FONT color="green">1913</FONT>       * impact on performance.<a name="line.1913"></a>
<FONT color="green">1914</FONT>       ***********************************************************************/<a name="line.1914"></a>
<FONT color="green">1915</FONT>    <a name="line.1915"></a>
<FONT color="green">1916</FONT>      /**<a name="line.1916"></a>
<FONT color="green">1917</FONT>       * The optimized version of DTMDefaultBase._exptype().<a name="line.1917"></a>
<FONT color="green">1918</FONT>       *<a name="line.1918"></a>
<FONT color="green">1919</FONT>       * @param identity A node identity, which &lt;em&gt;must not&lt;/em&gt; be equal to<a name="line.1919"></a>
<FONT color="green">1920</FONT>       *        &lt;code&gt;DTM.NULL&lt;/code&gt;<a name="line.1920"></a>
<FONT color="green">1921</FONT>       */<a name="line.1921"></a>
<FONT color="green">1922</FONT>      public final int _exptype2(int identity)<a name="line.1922"></a>
<FONT color="green">1923</FONT>      {<a name="line.1923"></a>
<FONT color="green">1924</FONT>        //return m_exptype.elementAt(identity);<a name="line.1924"></a>
<FONT color="green">1925</FONT>    <a name="line.1925"></a>
<FONT color="green">1926</FONT>        if (identity &lt; m_blocksize)<a name="line.1926"></a>
<FONT color="green">1927</FONT>          return m_exptype_map0[identity];<a name="line.1927"></a>
<FONT color="green">1928</FONT>        else<a name="line.1928"></a>
<FONT color="green">1929</FONT>          return m_exptype_map[identity&gt;&gt;&gt;m_SHIFT][identity&amp;m_MASK];<a name="line.1929"></a>
<FONT color="green">1930</FONT>      }<a name="line.1930"></a>
<FONT color="green">1931</FONT>    <a name="line.1931"></a>
<FONT color="green">1932</FONT>      /**<a name="line.1932"></a>
<FONT color="green">1933</FONT>       * The optimized version of DTMDefaultBase._nextsib().<a name="line.1933"></a>
<FONT color="green">1934</FONT>       *<a name="line.1934"></a>
<FONT color="green">1935</FONT>       * @param identity A node identity, which &lt;em&gt;must not&lt;/em&gt; be equal to<a name="line.1935"></a>
<FONT color="green">1936</FONT>       *        &lt;code&gt;DTM.NULL&lt;/code&gt;<a name="line.1936"></a>
<FONT color="green">1937</FONT>       */<a name="line.1937"></a>
<FONT color="green">1938</FONT>      public final int _nextsib2(int identity)<a name="line.1938"></a>
<FONT color="green">1939</FONT>      {<a name="line.1939"></a>
<FONT color="green">1940</FONT>        //return m_nextsib.elementAt(identity);<a name="line.1940"></a>
<FONT color="green">1941</FONT>    <a name="line.1941"></a>
<FONT color="green">1942</FONT>        if (identity &lt; m_blocksize)<a name="line.1942"></a>
<FONT color="green">1943</FONT>          return m_nextsib_map0[identity];<a name="line.1943"></a>
<FONT color="green">1944</FONT>        else<a name="line.1944"></a>
<FONT color="green">1945</FONT>          return m_nextsib_map[identity&gt;&gt;&gt;m_SHIFT][identity&amp;m_MASK];<a name="line.1945"></a>
<FONT color="green">1946</FONT>      }<a name="line.1946"></a>
<FONT color="green">1947</FONT>    <a name="line.1947"></a>
<FONT color="green">1948</FONT>      /**<a name="line.1948"></a>
<FONT color="green">1949</FONT>       * The optimized version of DTMDefaultBase._firstch().<a name="line.1949"></a>
<FONT color="green">1950</FONT>       *<a name="line.1950"></a>
<FONT color="green">1951</FONT>       * @param identity A node identity, which &lt;em&gt;must not&lt;/em&gt; be equal to<a name="line.1951"></a>
<FONT color="green">1952</FONT>       *        &lt;code&gt;DTM.NULL&lt;/code&gt;<a name="line.1952"></a>
<FONT color="green">1953</FONT>       */<a name="line.1953"></a>
<FONT color="green">1954</FONT>      public final int _firstch2(int identity)<a name="line.1954"></a>
<FONT color="green">1955</FONT>      {<a name="line.1955"></a>
<FONT color="green">1956</FONT>        //return m_firstch.elementAt(identity);<a name="line.1956"></a>
<FONT color="green">1957</FONT>    <a name="line.1957"></a>
<FONT color="green">1958</FONT>        if (identity &lt; m_blocksize)<a name="line.1958"></a>
<FONT color="green">1959</FONT>          return m_firstch_map0[identity];<a name="line.1959"></a>
<FONT color="green">1960</FONT>        else<a name="line.1960"></a>
<FONT color="green">1961</FONT>          return m_firstch_map[identity&gt;&gt;&gt;m_SHIFT][identity&amp;m_MASK];<a name="line.1961"></a>
<FONT color="green">1962</FONT>      }<a name="line.1962"></a>
<FONT color="green">1963</FONT>    <a name="line.1963"></a>
<FONT color="green">1964</FONT>      /**<a name="line.1964"></a>
<FONT color="green">1965</FONT>       * The optimized version of DTMDefaultBase._parent().<a name="line.1965"></a>
<FONT color="green">1966</FONT>       *<a name="line.1966"></a>
<FONT color="green">1967</FONT>       * @param identity A node identity, which &lt;em&gt;must not&lt;/em&gt; be equal to<a name="line.1967"></a>
<FONT color="green">1968</FONT>       *        &lt;code&gt;DTM.NULL&lt;/code&gt;<a name="line.1968"></a>
<FONT color="green">1969</FONT>       */<a name="line.1969"></a>
<FONT color="green">1970</FONT>      public final int _parent2(int identity)<a name="line.1970"></a>
<FONT color="green">1971</FONT>      {<a name="line.1971"></a>
<FONT color="green">1972</FONT>        //return m_parent.elementAt(identity);<a name="line.1972"></a>
<FONT color="green">1973</FONT>    <a name="line.1973"></a>
<FONT color="green">1974</FONT>        if (identity &lt; m_blocksize)<a name="line.1974"></a>
<FONT color="green">1975</FONT>          return m_parent_map0[identity];<a name="line.1975"></a>
<FONT color="green">1976</FONT>        else<a name="line.1976"></a>
<FONT color="green">1977</FONT>          return m_parent_map[identity&gt;&gt;&gt;m_SHIFT][identity&amp;m_MASK];<a name="line.1977"></a>
<FONT color="green">1978</FONT>      }<a name="line.1978"></a>
<FONT color="green">1979</FONT>    <a name="line.1979"></a>
<FONT color="green">1980</FONT>      /**<a name="line.1980"></a>
<FONT color="green">1981</FONT>       * The optimized version of DTMDefaultBase._type().<a name="line.1981"></a>
<FONT color="green">1982</FONT>       *<a name="line.1982"></a>
<FONT color="green">1983</FONT>       * @param identity A node identity, which &lt;em&gt;must not&lt;/em&gt; be equal to<a name="line.1983"></a>
<FONT color="green">1984</FONT>       *        &lt;code&gt;DTM.NULL&lt;/code&gt;<a name="line.1984"></a>
<FONT color="green">1985</FONT>       */<a name="line.1985"></a>
<FONT color="green">1986</FONT>      public final int _type2(int identity)<a name="line.1986"></a>
<FONT color="green">1987</FONT>      {<a name="line.1987"></a>
<FONT color="green">1988</FONT>        //int eType = _exptype2(identity);<a name="line.1988"></a>
<FONT color="green">1989</FONT>        int eType;<a name="line.1989"></a>
<FONT color="green">1990</FONT>        if (identity &lt; m_blocksize)<a name="line.1990"></a>
<FONT color="green">1991</FONT>          eType = m_exptype_map0[identity];<a name="line.1991"></a>
<FONT color="green">1992</FONT>        else<a name="line.1992"></a>
<FONT color="green">1993</FONT>          eType = m_exptype_map[identity&gt;&gt;&gt;m_SHIFT][identity&amp;m_MASK];<a name="line.1993"></a>
<FONT color="green">1994</FONT>    <a name="line.1994"></a>
<FONT color="green">1995</FONT>        if (NULL != eType)<a name="line.1995"></a>
<FONT color="green">1996</FONT>          return m_extendedTypes[eType].getNodeType();<a name="line.1996"></a>
<FONT color="green">1997</FONT>        else<a name="line.1997"></a>
<FONT color="green">1998</FONT>          return NULL;<a name="line.1998"></a>
<FONT color="green">1999</FONT>      }<a name="line.1999"></a>
<FONT color="green">2000</FONT>    <a name="line.2000"></a>
<FONT color="green">2001</FONT>      /**<a name="line.2001"></a>
<FONT color="green">2002</FONT>       * The optimized version of DTMDefaultBase.getExpandedTypeID(int).<a name="line.2002"></a>
<FONT color="green">2003</FONT>       *<a name="line.2003"></a>
<FONT color="green">2004</FONT>       * &lt;p&gt;This one is only used by DOMAdapter.getExpandedTypeID(int), which<a name="line.2004"></a>
<FONT color="green">2005</FONT>       * is mostly called from the compiled translets.<a name="line.2005"></a>
<FONT color="green">2006</FONT>       */<a name="line.2006"></a>
<FONT color="green">2007</FONT>      public final int getExpandedTypeID2(int nodeHandle)<a name="line.2007"></a>
<FONT color="green">2008</FONT>      {<a name="line.2008"></a>
<FONT color="green">2009</FONT>        int nodeID = makeNodeIdentity(nodeHandle);<a name="line.2009"></a>
<FONT color="green">2010</FONT>    <a name="line.2010"></a>
<FONT color="green">2011</FONT>        //return (nodeID != NULL) ? _exptype2(nodeID) : NULL;<a name="line.2011"></a>
<FONT color="green">2012</FONT>    <a name="line.2012"></a>
<FONT color="green">2013</FONT>        if (nodeID != NULL) {<a name="line.2013"></a>
<FONT color="green">2014</FONT>          if (nodeID &lt; m_blocksize)<a name="line.2014"></a>
<FONT color="green">2015</FONT>            return m_exptype_map0[nodeID];<a name="line.2015"></a>
<FONT color="green">2016</FONT>          else<a name="line.2016"></a>
<FONT color="green">2017</FONT>            return m_exptype_map[nodeID&gt;&gt;&gt;m_SHIFT][nodeID&amp;m_MASK];<a name="line.2017"></a>
<FONT color="green">2018</FONT>        }<a name="line.2018"></a>
<FONT color="green">2019</FONT>        else<a name="line.2019"></a>
<FONT color="green">2020</FONT>          return NULL;<a name="line.2020"></a>
<FONT color="green">2021</FONT>      }<a name="line.2021"></a>
<FONT color="green">2022</FONT>    <a name="line.2022"></a>
<FONT color="green">2023</FONT>      /*************************************************************************<a name="line.2023"></a>
<FONT color="green">2024</FONT>       *                 END of DTM base accessor interfaces<a name="line.2024"></a>
<FONT color="green">2025</FONT>       *************************************************************************/<a name="line.2025"></a>
<FONT color="green">2026</FONT>    <a name="line.2026"></a>
<FONT color="green">2027</FONT>    <a name="line.2027"></a>
<FONT color="green">2028</FONT>      /**<a name="line.2028"></a>
<FONT color="green">2029</FONT>       * Return the node type from the expanded type<a name="line.2029"></a>
<FONT color="green">2030</FONT>       */<a name="line.2030"></a>
<FONT color="green">2031</FONT>      public final int _exptype2Type(int exptype)<a name="line.2031"></a>
<FONT color="green">2032</FONT>      {<a name="line.2032"></a>
<FONT color="green">2033</FONT>        if (NULL != exptype)<a name="line.2033"></a>
<FONT color="green">2034</FONT>          return m_extendedTypes[exptype].getNodeType();<a name="line.2034"></a>
<FONT color="green">2035</FONT>        else<a name="line.2035"></a>
<FONT color="green">2036</FONT>          return NULL;<a name="line.2036"></a>
<FONT color="green">2037</FONT>      }<a name="line.2037"></a>
<FONT color="green">2038</FONT>    <a name="line.2038"></a>
<FONT color="green">2039</FONT>      /**<a name="line.2039"></a>
<FONT color="green">2040</FONT>       * Get a prefix either from the uri mapping, or just make<a name="line.2040"></a>
<FONT color="green">2041</FONT>       * one up!<a name="line.2041"></a>
<FONT color="green">2042</FONT>       *<a name="line.2042"></a>
<FONT color="green">2043</FONT>       * @param uri The namespace URI, which may be null.<a name="line.2043"></a>
<FONT color="green">2044</FONT>       *<a name="line.2044"></a>
<FONT color="green">2045</FONT>       * @return The prefix if there is one, or null.<a name="line.2045"></a>
<FONT color="green">2046</FONT>       */<a name="line.2046"></a>
<FONT color="green">2047</FONT>      public int getIdForNamespace(String uri)<a name="line.2047"></a>
<FONT color="green">2048</FONT>      {<a name="line.2048"></a>
<FONT color="green">2049</FONT>         int index = m_values.indexOf(uri);<a name="line.2049"></a>
<FONT color="green">2050</FONT>         if (index &lt; 0)<a name="line.2050"></a>
<FONT color="green">2051</FONT>         {<a name="line.2051"></a>
<FONT color="green">2052</FONT>           m_values.addElement(uri);<a name="line.2052"></a>
<FONT color="green">2053</FONT>           return m_valueIndex++;<a name="line.2053"></a>
<FONT color="green">2054</FONT>         }<a name="line.2054"></a>
<FONT color="green">2055</FONT>         else<a name="line.2055"></a>
<FONT color="green">2056</FONT>           return index;<a name="line.2056"></a>
<FONT color="green">2057</FONT>      }<a name="line.2057"></a>
<FONT color="green">2058</FONT>    <a name="line.2058"></a>
<FONT color="green">2059</FONT>      /**<a name="line.2059"></a>
<FONT color="green">2060</FONT>       * Override SAX2DTM.startElement()<a name="line.2060"></a>
<FONT color="green">2061</FONT>       *<a name="line.2061"></a>
<FONT color="green">2062</FONT>       * &lt;p&gt;Receive notification of the start of an element.<a name="line.2062"></a>
<FONT color="green">2063</FONT>       *<a name="line.2063"></a>
<FONT color="green">2064</FONT>       * &lt;p&gt;By default, do nothing.  Application writers may override this<a name="line.2064"></a>
<FONT color="green">2065</FONT>       * method in a subclass to take specific actions at the start of<a name="line.2065"></a>
<FONT color="green">2066</FONT>       * each element (such as allocating a new tree node or writing<a name="line.2066"></a>
<FONT color="green">2067</FONT>       * output to a file).&lt;/p&gt;<a name="line.2067"></a>
<FONT color="green">2068</FONT>       *<a name="line.2068"></a>
<FONT color="green">2069</FONT>       * @param uri The Namespace URI, or the empty string if the<a name="line.2069"></a>
<FONT color="green">2070</FONT>       *        element has no Namespace URI or if Namespace<a name="line.2070"></a>
<FONT color="green">2071</FONT>       *        processing is not being performed.<a name="line.2071"></a>
<FONT color="green">2072</FONT>       * @param localName The local name (without prefix), or the<a name="line.2072"></a>
<FONT color="green">2073</FONT>       *        empty string if Namespace processing is not being<a name="line.2073"></a>
<FONT color="green">2074</FONT>       *        performed.<a name="line.2074"></a>
<FONT color="green">2075</FONT>       * @param qName The qualified name (with prefix), or the<a name="line.2075"></a>
<FONT color="green">2076</FONT>       *        empty string if qualified names are not available.<a name="line.2076"></a>
<FONT color="green">2077</FONT>       * @param attributes The specified or defaulted attributes.<a name="line.2077"></a>
<FONT color="green">2078</FONT>       * @throws SAXException Any SAX exception, possibly<a name="line.2078"></a>
<FONT color="green">2079</FONT>       *            wrapping another exception.<a name="line.2079"></a>
<FONT color="green">2080</FONT>       * @see org.xml.sax.ContentHandler#startElement<a name="line.2080"></a>
<FONT color="green">2081</FONT>       */<a name="line.2081"></a>
<FONT color="green">2082</FONT>      public void startElement(String uri, String localName, String qName, Attributes attributes)<a name="line.2082"></a>
<FONT color="green">2083</FONT>          throws SAXException<a name="line.2083"></a>
<FONT color="green">2084</FONT>      {<a name="line.2084"></a>
<FONT color="green">2085</FONT>    <a name="line.2085"></a>
<FONT color="green">2086</FONT>        charactersFlush();<a name="line.2086"></a>
<FONT color="green">2087</FONT>    <a name="line.2087"></a>
<FONT color="green">2088</FONT>        int exName = m_expandedNameTable.getExpandedTypeID(uri, localName, DTM.ELEMENT_NODE);<a name="line.2088"></a>
<FONT color="green">2089</FONT>    <a name="line.2089"></a>
<FONT color="green">2090</FONT>        int prefixIndex = (qName.length() != localName.length())<a name="line.2090"></a>
<FONT color="green">2091</FONT>                          ? m_valuesOrPrefixes.stringToIndex(qName) : 0;<a name="line.2091"></a>
<FONT color="green">2092</FONT>    <a name="line.2092"></a>
<FONT color="green">2093</FONT>        int elemNode = addNode(DTM.ELEMENT_NODE, exName,<a name="line.2093"></a>
<FONT color="green">2094</FONT>                               m_parents.peek(), m_previous, prefixIndex, true);<a name="line.2094"></a>
<FONT color="green">2095</FONT>    <a name="line.2095"></a>
<FONT color="green">2096</FONT>        if(m_indexing)<a name="line.2096"></a>
<FONT color="green">2097</FONT>          indexNode(exName, elemNode);<a name="line.2097"></a>
<FONT color="green">2098</FONT>    <a name="line.2098"></a>
<FONT color="green">2099</FONT>        m_parents.push(elemNode);<a name="line.2099"></a>
<FONT color="green">2100</FONT>    <a name="line.2100"></a>
<FONT color="green">2101</FONT>        int startDecls = m_contextIndexes.peek();<a name="line.2101"></a>
<FONT color="green">2102</FONT>        int nDecls = m_prefixMappings.size();<a name="line.2102"></a>
<FONT color="green">2103</FONT>        String prefix;<a name="line.2103"></a>
<FONT color="green">2104</FONT>    <a name="line.2104"></a>
<FONT color="green">2105</FONT>        if(!m_pastFirstElement)<a name="line.2105"></a>
<FONT color="green">2106</FONT>        {<a name="line.2106"></a>
<FONT color="green">2107</FONT>          // SPECIAL CASE: Implied declaration at root element<a name="line.2107"></a>
<FONT color="green">2108</FONT>          prefix="xml";<a name="line.2108"></a>
<FONT color="green">2109</FONT>          String declURL = "http://www.w3.org/XML/1998/namespace";<a name="line.2109"></a>
<FONT color="green">2110</FONT>          exName = m_expandedNameTable.getExpandedTypeID(null, prefix, DTM.NAMESPACE_NODE);<a name="line.2110"></a>
<FONT color="green">2111</FONT>          m_values.addElement(declURL);<a name="line.2111"></a>
<FONT color="green">2112</FONT>          int val = m_valueIndex++;<a name="line.2112"></a>
<FONT color="green">2113</FONT>          addNode(DTM.NAMESPACE_NODE, exName, elemNode,<a name="line.2113"></a>
<FONT color="green">2114</FONT>                         DTM.NULL, val, false);<a name="line.2114"></a>
<FONT color="green">2115</FONT>          m_pastFirstElement=true;<a name="line.2115"></a>
<FONT color="green">2116</FONT>        }<a name="line.2116"></a>
<FONT color="green">2117</FONT>    <a name="line.2117"></a>
<FONT color="green">2118</FONT>        for (int i = startDecls; i &lt; nDecls; i += 2)<a name="line.2118"></a>
<FONT color="green">2119</FONT>        {<a name="line.2119"></a>
<FONT color="green">2120</FONT>          prefix = (String) m_prefixMappings.elementAt(i);<a name="line.2120"></a>
<FONT color="green">2121</FONT>    <a name="line.2121"></a>
<FONT color="green">2122</FONT>          if (prefix == null)<a name="line.2122"></a>
<FONT color="green">2123</FONT>            continue;<a name="line.2123"></a>
<FONT color="green">2124</FONT>    <a name="line.2124"></a>
<FONT color="green">2125</FONT>          String declURL = (String) m_prefixMappings.elementAt(i + 1);<a name="line.2125"></a>
<FONT color="green">2126</FONT>    <a name="line.2126"></a>
<FONT color="green">2127</FONT>          exName = m_expandedNameTable.getExpandedTypeID(null, prefix, DTM.NAMESPACE_NODE);<a name="line.2127"></a>
<FONT color="green">2128</FONT>    <a name="line.2128"></a>
<FONT color="green">2129</FONT>          m_values.addElement(declURL);<a name="line.2129"></a>
<FONT color="green">2130</FONT>          int val = m_valueIndex++;<a name="line.2130"></a>
<FONT color="green">2131</FONT>    <a name="line.2131"></a>
<FONT color="green">2132</FONT>          addNode(DTM.NAMESPACE_NODE, exName, elemNode, DTM.NULL, val, false);<a name="line.2132"></a>
<FONT color="green">2133</FONT>        }<a name="line.2133"></a>
<FONT color="green">2134</FONT>    <a name="line.2134"></a>
<FONT color="green">2135</FONT>        int n = attributes.getLength();<a name="line.2135"></a>
<FONT color="green">2136</FONT>    <a name="line.2136"></a>
<FONT color="green">2137</FONT>        for (int i = 0; i &lt; n; i++)<a name="line.2137"></a>
<FONT color="green">2138</FONT>        {<a name="line.2138"></a>
<FONT color="green">2139</FONT>          String attrUri = attributes.getURI(i);<a name="line.2139"></a>
<FONT color="green">2140</FONT>          String attrQName = attributes.getQName(i);<a name="line.2140"></a>
<FONT color="green">2141</FONT>          String valString = attributes.getValue(i);<a name="line.2141"></a>
<FONT color="green">2142</FONT>    <a name="line.2142"></a>
<FONT color="green">2143</FONT>          int nodeType;<a name="line.2143"></a>
<FONT color="green">2144</FONT>    <a name="line.2144"></a>
<FONT color="green">2145</FONT>          String attrLocalName = attributes.getLocalName(i);<a name="line.2145"></a>
<FONT color="green">2146</FONT>    <a name="line.2146"></a>
<FONT color="green">2147</FONT>          if ((null != attrQName)<a name="line.2147"></a>
<FONT color="green">2148</FONT>                  &amp;&amp; (attrQName.equals("xmlns")<a name="line.2148"></a>
<FONT color="green">2149</FONT>                      || attrQName.startsWith("xmlns:")))<a name="line.2149"></a>
<FONT color="green">2150</FONT>          {<a name="line.2150"></a>
<FONT color="green">2151</FONT>            prefix = getPrefix(attrQName, attrUri);<a name="line.2151"></a>
<FONT color="green">2152</FONT>            if (declAlreadyDeclared(prefix))<a name="line.2152"></a>
<FONT color="green">2153</FONT>              continue;  // go to the next attribute.<a name="line.2153"></a>
<FONT color="green">2154</FONT>    <a name="line.2154"></a>
<FONT color="green">2155</FONT>            nodeType = DTM.NAMESPACE_NODE;<a name="line.2155"></a>
<FONT color="green">2156</FONT>          }<a name="line.2156"></a>
<FONT color="green">2157</FONT>          else<a name="line.2157"></a>
<FONT color="green">2158</FONT>          {<a name="line.2158"></a>
<FONT color="green">2159</FONT>            nodeType = DTM.ATTRIBUTE_NODE;<a name="line.2159"></a>
<FONT color="green">2160</FONT>    <a name="line.2160"></a>
<FONT color="green">2161</FONT>            if (m_buildIdIndex &amp;&amp; attributes.getType(i).equalsIgnoreCase("ID"))<a name="line.2161"></a>
<FONT color="green">2162</FONT>              setIDAttribute(valString, elemNode);<a name="line.2162"></a>
<FONT color="green">2163</FONT>          }<a name="line.2163"></a>
<FONT color="green">2164</FONT>    <a name="line.2164"></a>
<FONT color="green">2165</FONT>          // Bit of a hack... if somehow valString is null, stringToIndex will<a name="line.2165"></a>
<FONT color="green">2166</FONT>          // return -1, which will make things very unhappy.<a name="line.2166"></a>
<FONT color="green">2167</FONT>          if(null == valString)<a name="line.2167"></a>
<FONT color="green">2168</FONT>            valString = "";<a name="line.2168"></a>
<FONT color="green">2169</FONT>    <a name="line.2169"></a>
<FONT color="green">2170</FONT>          m_values.addElement(valString);<a name="line.2170"></a>
<FONT color="green">2171</FONT>          int val = m_valueIndex++;<a name="line.2171"></a>
<FONT color="green">2172</FONT>    <a name="line.2172"></a>
<FONT color="green">2173</FONT>          if (attrLocalName.length() != attrQName.length())<a name="line.2173"></a>
<FONT color="green">2174</FONT>          {<a name="line.2174"></a>
<FONT color="green">2175</FONT>    <a name="line.2175"></a>
<FONT color="green">2176</FONT>            prefixIndex = m_valuesOrPrefixes.stringToIndex(attrQName);<a name="line.2176"></a>
<FONT color="green">2177</FONT>    <a name="line.2177"></a>
<FONT color="green">2178</FONT>            int dataIndex = m_data.size();<a name="line.2178"></a>
<FONT color="green">2179</FONT>    <a name="line.2179"></a>
<FONT color="green">2180</FONT>            m_data.addElement(prefixIndex);<a name="line.2180"></a>
<FONT color="green">2181</FONT>            m_data.addElement(val);<a name="line.2181"></a>
<FONT color="green">2182</FONT>    <a name="line.2182"></a>
<FONT color="green">2183</FONT>            val = -dataIndex;<a name="line.2183"></a>
<FONT color="green">2184</FONT>          }<a name="line.2184"></a>
<FONT color="green">2185</FONT>    <a name="line.2185"></a>
<FONT color="green">2186</FONT>          exName = m_expandedNameTable.getExpandedTypeID(attrUri, attrLocalName, nodeType);<a name="line.2186"></a>
<FONT color="green">2187</FONT>          addNode(nodeType, exName, elemNode, DTM.NULL, val,<a name="line.2187"></a>
<FONT color="green">2188</FONT>                         false);<a name="line.2188"></a>
<FONT color="green">2189</FONT>        }<a name="line.2189"></a>
<FONT color="green">2190</FONT>    <a name="line.2190"></a>
<FONT color="green">2191</FONT>        if (null != m_wsfilter)<a name="line.2191"></a>
<FONT color="green">2192</FONT>        {<a name="line.2192"></a>
<FONT color="green">2193</FONT>          short wsv = m_wsfilter.getShouldStripSpace(makeNodeHandle(elemNode), this);<a name="line.2193"></a>
<FONT color="green">2194</FONT>          boolean shouldStrip = (DTMWSFilter.INHERIT == wsv)<a name="line.2194"></a>
<FONT color="green">2195</FONT>                                ? getShouldStripWhitespace()<a name="line.2195"></a>
<FONT color="green">2196</FONT>                                : (DTMWSFilter.STRIP == wsv);<a name="line.2196"></a>
<FONT color="green">2197</FONT>    <a name="line.2197"></a>
<FONT color="green">2198</FONT>          pushShouldStripWhitespace(shouldStrip);<a name="line.2198"></a>
<FONT color="green">2199</FONT>        }<a name="line.2199"></a>
<FONT color="green">2200</FONT>    <a name="line.2200"></a>
<FONT color="green">2201</FONT>        m_previous = DTM.NULL;<a name="line.2201"></a>
<FONT color="green">2202</FONT>    <a name="line.2202"></a>
<FONT color="green">2203</FONT>        m_contextIndexes.push(m_prefixMappings.size());  // for the children.<a name="line.2203"></a>
<FONT color="green">2204</FONT>      }<a name="line.2204"></a>
<FONT color="green">2205</FONT>    <a name="line.2205"></a>
<FONT color="green">2206</FONT>      /**<a name="line.2206"></a>
<FONT color="green">2207</FONT>       * Receive notification of the end of an element.<a name="line.2207"></a>
<FONT color="green">2208</FONT>       *<a name="line.2208"></a>
<FONT color="green">2209</FONT>       * &lt;p&gt;By default, do nothing.  Application writers may override this<a name="line.2209"></a>
<FONT color="green">2210</FONT>       * method in a subclass to take specific actions at the end of<a name="line.2210"></a>
<FONT color="green">2211</FONT>       * each element (such as finalising a tree node or writing<a name="line.2211"></a>
<FONT color="green">2212</FONT>       * output to a file).&lt;/p&gt;<a name="line.2212"></a>
<FONT color="green">2213</FONT>       *<a name="line.2213"></a>
<FONT color="green">2214</FONT>       * @param uri The Namespace URI, or the empty string if the<a name="line.2214"></a>
<FONT color="green">2215</FONT>       *        element has no Namespace URI or if Namespace<a name="line.2215"></a>
<FONT color="green">2216</FONT>       *        processing is not being performed.<a name="line.2216"></a>
<FONT color="green">2217</FONT>       * @param localName The local name (without prefix), or the<a name="line.2217"></a>
<FONT color="green">2218</FONT>       *        empty string if Namespace processing is not being<a name="line.2218"></a>
<FONT color="green">2219</FONT>       *        performed.<a name="line.2219"></a>
<FONT color="green">2220</FONT>       * @param qName The qualified XML 1.0 name (with prefix), or the<a name="line.2220"></a>
<FONT color="green">2221</FONT>       *        empty string if qualified names are not available.<a name="line.2221"></a>
<FONT color="green">2222</FONT>       * @throws SAXException Any SAX exception, possibly<a name="line.2222"></a>
<FONT color="green">2223</FONT>       *            wrapping another exception.<a name="line.2223"></a>
<FONT color="green">2224</FONT>       * @see org.xml.sax.ContentHandler#endElement<a name="line.2224"></a>
<FONT color="green">2225</FONT>       */<a name="line.2225"></a>
<FONT color="green">2226</FONT>      public void endElement(String uri, String localName, String qName)<a name="line.2226"></a>
<FONT color="green">2227</FONT>              throws SAXException<a name="line.2227"></a>
<FONT color="green">2228</FONT>      {<a name="line.2228"></a>
<FONT color="green">2229</FONT>        charactersFlush();<a name="line.2229"></a>
<FONT color="green">2230</FONT>    <a name="line.2230"></a>
<FONT color="green">2231</FONT>        // If no one noticed, startPrefixMapping is a drag.<a name="line.2231"></a>
<FONT color="green">2232</FONT>        // Pop the context for the last child (the one pushed by startElement)<a name="line.2232"></a>
<FONT color="green">2233</FONT>        m_contextIndexes.quickPop(1);<a name="line.2233"></a>
<FONT color="green">2234</FONT>    <a name="line.2234"></a>
<FONT color="green">2235</FONT>        // Do it again for this one (the one pushed by the last endElement).<a name="line.2235"></a>
<FONT color="green">2236</FONT>        int topContextIndex = m_contextIndexes.peek();<a name="line.2236"></a>
<FONT color="green">2237</FONT>        if (topContextIndex != m_prefixMappings.size()) {<a name="line.2237"></a>
<FONT color="green">2238</FONT>          m_prefixMappings.setSize(topContextIndex);<a name="line.2238"></a>
<FONT color="green">2239</FONT>        }<a name="line.2239"></a>
<FONT color="green">2240</FONT>    <a name="line.2240"></a>
<FONT color="green">2241</FONT>        m_previous = m_parents.pop();<a name="line.2241"></a>
<FONT color="green">2242</FONT>    <a name="line.2242"></a>
<FONT color="green">2243</FONT>        popShouldStripWhitespace();<a name="line.2243"></a>
<FONT color="green">2244</FONT>      }<a name="line.2244"></a>
<FONT color="green">2245</FONT>    <a name="line.2245"></a>
<FONT color="green">2246</FONT>      /**<a name="line.2246"></a>
<FONT color="green">2247</FONT>       * Report an XML comment anywhere in the document.<a name="line.2247"></a>
<FONT color="green">2248</FONT>       *<a name="line.2248"></a>
<FONT color="green">2249</FONT>       * &lt;p&gt;This callback will be used for comments inside or outside the<a name="line.2249"></a>
<FONT color="green">2250</FONT>       * document element, including comments in the external DTD<a name="line.2250"></a>
<FONT color="green">2251</FONT>       * subset (if read).&lt;/p&gt;<a name="line.2251"></a>
<FONT color="green">2252</FONT>       *<a name="line.2252"></a>
<FONT color="green">2253</FONT>       * @param ch An array holding the characters in the comment.<a name="line.2253"></a>
<FONT color="green">2254</FONT>       * @param start The starting position in the array.<a name="line.2254"></a>
<FONT color="green">2255</FONT>       * @param length The number of characters to use from the array.<a name="line.2255"></a>
<FONT color="green">2256</FONT>       * @throws SAXException The application may raise an exception.<a name="line.2256"></a>
<FONT color="green">2257</FONT>       */<a name="line.2257"></a>
<FONT color="green">2258</FONT>      public void comment(char ch[], int start, int length) throws SAXException<a name="line.2258"></a>
<FONT color="green">2259</FONT>      {<a name="line.2259"></a>
<FONT color="green">2260</FONT>    <a name="line.2260"></a>
<FONT color="green">2261</FONT>        if (m_insideDTD)      // ignore comments if we're inside the DTD<a name="line.2261"></a>
<FONT color="green">2262</FONT>          return;<a name="line.2262"></a>
<FONT color="green">2263</FONT>    <a name="line.2263"></a>
<FONT color="green">2264</FONT>        charactersFlush();<a name="line.2264"></a>
<FONT color="green">2265</FONT>    <a name="line.2265"></a>
<FONT color="green">2266</FONT>        // %OPT% Saving the comment string in a Vector has a lower cost than<a name="line.2266"></a>
<FONT color="green">2267</FONT>        // saving it in DTMStringPool.<a name="line.2267"></a>
<FONT color="green">2268</FONT>        m_values.addElement(new String(ch, start, length));<a name="line.2268"></a>
<FONT color="green">2269</FONT>        int dataIndex = m_valueIndex++;<a name="line.2269"></a>
<FONT color="green">2270</FONT>    <a name="line.2270"></a>
<FONT color="green">2271</FONT>        m_previous = addNode(DTM.COMMENT_NODE, DTM.COMMENT_NODE,<a name="line.2271"></a>
<FONT color="green">2272</FONT>                             m_parents.peek(), m_previous, dataIndex, false);<a name="line.2272"></a>
<FONT color="green">2273</FONT>      }<a name="line.2273"></a>
<FONT color="green">2274</FONT>    <a name="line.2274"></a>
<FONT color="green">2275</FONT>      /**<a name="line.2275"></a>
<FONT color="green">2276</FONT>       * Receive notification of the beginning of the document.<a name="line.2276"></a>
<FONT color="green">2277</FONT>       *<a name="line.2277"></a>
<FONT color="green">2278</FONT>       * @throws SAXException Any SAX exception, possibly<a name="line.2278"></a>
<FONT color="green">2279</FONT>       *            wrapping another exception.<a name="line.2279"></a>
<FONT color="green">2280</FONT>       * @see org.xml.sax.ContentHandler#startDocument<a name="line.2280"></a>
<FONT color="green">2281</FONT>       */<a name="line.2281"></a>
<FONT color="green">2282</FONT>      public void startDocument() throws SAXException<a name="line.2282"></a>
<FONT color="green">2283</FONT>      {<a name="line.2283"></a>
<FONT color="green">2284</FONT>    <a name="line.2284"></a>
<FONT color="green">2285</FONT>        int doc = addNode(DTM.DOCUMENT_NODE,<a name="line.2285"></a>
<FONT color="green">2286</FONT>                          DTM.DOCUMENT_NODE,<a name="line.2286"></a>
<FONT color="green">2287</FONT>                          DTM.NULL, DTM.NULL, 0, true);<a name="line.2287"></a>
<FONT color="green">2288</FONT>    <a name="line.2288"></a>
<FONT color="green">2289</FONT>        m_parents.push(doc);<a name="line.2289"></a>
<FONT color="green">2290</FONT>        m_previous = DTM.NULL;<a name="line.2290"></a>
<FONT color="green">2291</FONT>    <a name="line.2291"></a>
<FONT color="green">2292</FONT>        m_contextIndexes.push(m_prefixMappings.size());  // for the next element.<a name="line.2292"></a>
<FONT color="green">2293</FONT>      }<a name="line.2293"></a>
<FONT color="green">2294</FONT>    <a name="line.2294"></a>
<FONT color="green">2295</FONT>      /**<a name="line.2295"></a>
<FONT color="green">2296</FONT>       * Receive notification of the end of the document.<a name="line.2296"></a>
<FONT color="green">2297</FONT>       *<a name="line.2297"></a>
<FONT color="green">2298</FONT>       * @throws SAXException Any SAX exception, possibly<a name="line.2298"></a>
<FONT color="green">2299</FONT>       *            wrapping another exception.<a name="line.2299"></a>
<FONT color="green">2300</FONT>       * @see org.xml.sax.ContentHandler#endDocument<a name="line.2300"></a>
<FONT color="green">2301</FONT>       */<a name="line.2301"></a>
<FONT color="green">2302</FONT>      public void endDocument() throws SAXException<a name="line.2302"></a>
<FONT color="green">2303</FONT>      {<a name="line.2303"></a>
<FONT color="green">2304</FONT>        super.endDocument();<a name="line.2304"></a>
<FONT color="green">2305</FONT>    <a name="line.2305"></a>
<FONT color="green">2306</FONT>        // Add a NULL entry to the end of the node arrays as<a name="line.2306"></a>
<FONT color="green">2307</FONT>        // the end indication.<a name="line.2307"></a>
<FONT color="green">2308</FONT>        m_exptype.addElement(NULL);<a name="line.2308"></a>
<FONT color="green">2309</FONT>        m_parent.addElement(NULL);<a name="line.2309"></a>
<FONT color="green">2310</FONT>        m_nextsib.addElement(NULL);<a name="line.2310"></a>
<FONT color="green">2311</FONT>        m_firstch.addElement(NULL);<a name="line.2311"></a>
<FONT color="green">2312</FONT>    <a name="line.2312"></a>
<FONT color="green">2313</FONT>        // Set the cached references after the document is built.<a name="line.2313"></a>
<FONT color="green">2314</FONT>        m_extendedTypes = m_expandedNameTable.getExtendedTypes();<a name="line.2314"></a>
<FONT color="green">2315</FONT>        m_exptype_map = m_exptype.getMap();<a name="line.2315"></a>
<FONT color="green">2316</FONT>        m_nextsib_map = m_nextsib.getMap();<a name="line.2316"></a>
<FONT color="green">2317</FONT>        m_firstch_map = m_firstch.getMap();<a name="line.2317"></a>
<FONT color="green">2318</FONT>        m_parent_map  = m_parent.getMap();<a name="line.2318"></a>
<FONT color="green">2319</FONT>      }<a name="line.2319"></a>
<FONT color="green">2320</FONT>    <a name="line.2320"></a>
<FONT color="green">2321</FONT>      /**<a name="line.2321"></a>
<FONT color="green">2322</FONT>       * Construct the node map from the node.<a name="line.2322"></a>
<FONT color="green">2323</FONT>       *<a name="line.2323"></a>
<FONT color="green">2324</FONT>       * @param type raw type ID, one of DTM.XXX_NODE.<a name="line.2324"></a>
<FONT color="green">2325</FONT>       * @param expandedTypeID The expended type ID.<a name="line.2325"></a>
<FONT color="green">2326</FONT>       * @param parentIndex The current parent index.<a name="line.2326"></a>
<FONT color="green">2327</FONT>       * @param previousSibling The previous sibling index.<a name="line.2327"></a>
<FONT color="green">2328</FONT>       * @param dataOrPrefix index into m_data table, or string handle.<a name="line.2328"></a>
<FONT color="green">2329</FONT>       * @param canHaveFirstChild true if the node can have a first child, false<a name="line.2329"></a>
<FONT color="green">2330</FONT>       *                          if it is atomic.<a name="line.2330"></a>
<FONT color="green">2331</FONT>       *<a name="line.2331"></a>
<FONT color="green">2332</FONT>       * @return The index identity of the node that was added.<a name="line.2332"></a>
<FONT color="green">2333</FONT>       */<a name="line.2333"></a>
<FONT color="green">2334</FONT>      protected final int addNode(int type, int expandedTypeID,<a name="line.2334"></a>
<FONT color="green">2335</FONT>                            int parentIndex, int previousSibling,<a name="line.2335"></a>
<FONT color="green">2336</FONT>                            int dataOrPrefix, boolean canHaveFirstChild)<a name="line.2336"></a>
<FONT color="green">2337</FONT>      {<a name="line.2337"></a>
<FONT color="green">2338</FONT>        // Common to all nodes:<a name="line.2338"></a>
<FONT color="green">2339</FONT>        int nodeIndex = m_size++;<a name="line.2339"></a>
<FONT color="green">2340</FONT>    <a name="line.2340"></a>
<FONT color="green">2341</FONT>        // Have we overflowed a DTM Identity's addressing range?<a name="line.2341"></a>
<FONT color="green">2342</FONT>        //if(m_dtmIdent.size() == (nodeIndex&gt;&gt;&gt;DTMManager.IDENT_DTM_NODE_BITS))<a name="line.2342"></a>
<FONT color="green">2343</FONT>        if (nodeIndex == m_maxNodeIndex)<a name="line.2343"></a>
<FONT color="green">2344</FONT>        {<a name="line.2344"></a>
<FONT color="green">2345</FONT>          addNewDTMID(nodeIndex);<a name="line.2345"></a>
<FONT color="green">2346</FONT>          m_maxNodeIndex += (1 &lt;&lt; DTMManager.IDENT_DTM_NODE_BITS);<a name="line.2346"></a>
<FONT color="green">2347</FONT>        }<a name="line.2347"></a>
<FONT color="green">2348</FONT>    <a name="line.2348"></a>
<FONT color="green">2349</FONT>        m_firstch.addElement(DTM.NULL);<a name="line.2349"></a>
<FONT color="green">2350</FONT>        m_nextsib.addElement(DTM.NULL);<a name="line.2350"></a>
<FONT color="green">2351</FONT>        m_parent.addElement(parentIndex);<a name="line.2351"></a>
<FONT color="green">2352</FONT>        m_exptype.addElement(expandedTypeID);<a name="line.2352"></a>
<FONT color="green">2353</FONT>        m_dataOrQName.addElement(dataOrPrefix);<a name="line.2353"></a>
<FONT color="green">2354</FONT>    <a name="line.2354"></a>
<FONT color="green">2355</FONT>        if (m_prevsib != null) {<a name="line.2355"></a>
<FONT color="green">2356</FONT>          m_prevsib.addElement(previousSibling);<a name="line.2356"></a>
<FONT color="green">2357</FONT>        }<a name="line.2357"></a>
<FONT color="green">2358</FONT>    <a name="line.2358"></a>
<FONT color="green">2359</FONT>        if (m_locator != null &amp;&amp; m_useSourceLocationProperty) {<a name="line.2359"></a>
<FONT color="green">2360</FONT>          setSourceLocation();<a name="line.2360"></a>
<FONT color="green">2361</FONT>        }<a name="line.2361"></a>
<FONT color="green">2362</FONT>    <a name="line.2362"></a>
<FONT color="green">2363</FONT>        // Note that nextSibling is not processed until charactersFlush()<a name="line.2363"></a>
<FONT color="green">2364</FONT>        // is called, to handle successive characters() events.<a name="line.2364"></a>
<FONT color="green">2365</FONT>    <a name="line.2365"></a>
<FONT color="green">2366</FONT>        // Special handling by type: Declare namespaces, attach first child<a name="line.2366"></a>
<FONT color="green">2367</FONT>        switch(type)<a name="line.2367"></a>
<FONT color="green">2368</FONT>        {<a name="line.2368"></a>
<FONT color="green">2369</FONT>        case DTM.NAMESPACE_NODE:<a name="line.2369"></a>
<FONT color="green">2370</FONT>          declareNamespaceInContext(parentIndex,nodeIndex);<a name="line.2370"></a>
<FONT color="green">2371</FONT>          break;<a name="line.2371"></a>
<FONT color="green">2372</FONT>        case DTM.ATTRIBUTE_NODE:<a name="line.2372"></a>
<FONT color="green">2373</FONT>          break;<a name="line.2373"></a>
<FONT color="green">2374</FONT>        default:<a name="line.2374"></a>
<FONT color="green">2375</FONT>          if (DTM.NULL != previousSibling) {<a name="line.2375"></a>
<FONT color="green">2376</FONT>            m_nextsib.setElementAt(nodeIndex,previousSibling);<a name="line.2376"></a>
<FONT color="green">2377</FONT>          }<a name="line.2377"></a>
<FONT color="green">2378</FONT>          else if (DTM.NULL != parentIndex) {<a name="line.2378"></a>
<FONT color="green">2379</FONT>            m_firstch.setElementAt(nodeIndex,parentIndex);<a name="line.2379"></a>
<FONT color="green">2380</FONT>          }<a name="line.2380"></a>
<FONT color="green">2381</FONT>          break;<a name="line.2381"></a>
<FONT color="green">2382</FONT>        }<a name="line.2382"></a>
<FONT color="green">2383</FONT>    <a name="line.2383"></a>
<FONT color="green">2384</FONT>        return nodeIndex;<a name="line.2384"></a>
<FONT color="green">2385</FONT>      }<a name="line.2385"></a>
<FONT color="green">2386</FONT>    <a name="line.2386"></a>
<FONT color="green">2387</FONT>      /**<a name="line.2387"></a>
<FONT color="green">2388</FONT>       * Check whether accumulated text should be stripped; if not,<a name="line.2388"></a>
<FONT color="green">2389</FONT>       * append the appropriate flavor of text/cdata node.<a name="line.2389"></a>
<FONT color="green">2390</FONT>       */<a name="line.2390"></a>
<FONT color="green">2391</FONT>      protected final void charactersFlush()<a name="line.2391"></a>
<FONT color="green">2392</FONT>      {<a name="line.2392"></a>
<FONT color="green">2393</FONT>    <a name="line.2393"></a>
<FONT color="green">2394</FONT>        if (m_textPendingStart &gt;= 0)  // -1 indicates no-text-in-progress<a name="line.2394"></a>
<FONT color="green">2395</FONT>        {<a name="line.2395"></a>
<FONT color="green">2396</FONT>          int length = m_chars.size() - m_textPendingStart;<a name="line.2396"></a>
<FONT color="green">2397</FONT>          boolean doStrip = false;<a name="line.2397"></a>
<FONT color="green">2398</FONT>    <a name="line.2398"></a>
<FONT color="green">2399</FONT>          if (getShouldStripWhitespace())<a name="line.2399"></a>
<FONT color="green">2400</FONT>          {<a name="line.2400"></a>
<FONT color="green">2401</FONT>            doStrip = m_chars.isWhitespace(m_textPendingStart, length);<a name="line.2401"></a>
<FONT color="green">2402</FONT>          }<a name="line.2402"></a>
<FONT color="green">2403</FONT>    <a name="line.2403"></a>
<FONT color="green">2404</FONT>          if (doStrip) {<a name="line.2404"></a>
<FONT color="green">2405</FONT>            m_chars.setLength(m_textPendingStart);  // Discard accumulated text<a name="line.2405"></a>
<FONT color="green">2406</FONT>          } else {<a name="line.2406"></a>
<FONT color="green">2407</FONT>            // Guard against characters/ignorableWhitespace events that<a name="line.2407"></a>
<FONT color="green">2408</FONT>            // contained no characters.  They should not result in a node.<a name="line.2408"></a>
<FONT color="green">2409</FONT>            if (length &gt; 0) {<a name="line.2409"></a>
<FONT color="green">2410</FONT>              // If the offset and length do not exceed the given limits<a name="line.2410"></a>
<FONT color="green">2411</FONT>              // (offset &lt; 2^21 and length &lt; 2^10), then save both the offset<a name="line.2411"></a>
<FONT color="green">2412</FONT>              // and length in a bitwise encoded value.<a name="line.2412"></a>
<FONT color="green">2413</FONT>              if (length &lt;= TEXT_LENGTH_MAX<a name="line.2413"></a>
<FONT color="green">2414</FONT>                      &amp;&amp; m_textPendingStart &lt;= TEXT_OFFSET_MAX) {<a name="line.2414"></a>
<FONT color="green">2415</FONT>                m_previous = addNode(m_coalescedTextType, DTM.TEXT_NODE,<a name="line.2415"></a>
<FONT color="green">2416</FONT>                                 m_parents.peek(), m_previous,<a name="line.2416"></a>
<FONT color="green">2417</FONT>                                 length + (m_textPendingStart &lt;&lt; TEXT_LENGTH_BITS),<a name="line.2417"></a>
<FONT color="green">2418</FONT>                                 false);<a name="line.2418"></a>
<FONT color="green">2419</FONT>    <a name="line.2419"></a>
<FONT color="green">2420</FONT>              } else {<a name="line.2420"></a>
<FONT color="green">2421</FONT>                // Store offset and length in the m_data array if one exceeds <a name="line.2421"></a>
<FONT color="green">2422</FONT>                // the given limits. Use a negative dataIndex as an indication.<a name="line.2422"></a>
<FONT color="green">2423</FONT>                int dataIndex = m_data.size();<a name="line.2423"></a>
<FONT color="green">2424</FONT>                m_previous = addNode(m_coalescedTextType, DTM.TEXT_NODE,<a name="line.2424"></a>
<FONT color="green">2425</FONT>                                   m_parents.peek(), m_previous, -dataIndex, false);<a name="line.2425"></a>
<FONT color="green">2426</FONT>    <a name="line.2426"></a>
<FONT color="green">2427</FONT>                m_data.addElement(m_textPendingStart);<a name="line.2427"></a>
<FONT color="green">2428</FONT>                m_data.addElement(length);<a name="line.2428"></a>
<FONT color="green">2429</FONT>              }<a name="line.2429"></a>
<FONT color="green">2430</FONT>            }<a name="line.2430"></a>
<FONT color="green">2431</FONT>          }<a name="line.2431"></a>
<FONT color="green">2432</FONT>    <a name="line.2432"></a>
<FONT color="green">2433</FONT>          // Reset for next text block<a name="line.2433"></a>
<FONT color="green">2434</FONT>          m_textPendingStart = -1;<a name="line.2434"></a>
<FONT color="green">2435</FONT>          m_textType = m_coalescedTextType = DTM.TEXT_NODE;<a name="line.2435"></a>
<FONT color="green">2436</FONT>        }<a name="line.2436"></a>
<FONT color="green">2437</FONT>      }<a name="line.2437"></a>
<FONT color="green">2438</FONT>    <a name="line.2438"></a>
<FONT color="green">2439</FONT>      /**<a name="line.2439"></a>
<FONT color="green">2440</FONT>       * Override the processingInstruction() interface in SAX2DTM2.<a name="line.2440"></a>
<FONT color="green">2441</FONT>       * &lt;p&gt;<a name="line.2441"></a>
<FONT color="green">2442</FONT>       * %OPT% This one is different from SAX2DTM.processingInstruction()<a name="line.2442"></a>
<FONT color="green">2443</FONT>       * in that we do not use extended types for PI nodes. The name of<a name="line.2443"></a>
<FONT color="green">2444</FONT>       * the PI is saved in the DTMStringPool.<a name="line.2444"></a>
<FONT color="green">2445</FONT>       *<a name="line.2445"></a>
<FONT color="green">2446</FONT>       * Receive notification of a processing instruction.<a name="line.2446"></a>
<FONT color="green">2447</FONT>       *<a name="line.2447"></a>
<FONT color="green">2448</FONT>       * @param target The processing instruction target.<a name="line.2448"></a>
<FONT color="green">2449</FONT>       * @param data The processing instruction data, or null if<a name="line.2449"></a>
<FONT color="green">2450</FONT>       *             none is supplied.<a name="line.2450"></a>
<FONT color="green">2451</FONT>       * @throws SAXException Any SAX exception, possibly<a name="line.2451"></a>
<FONT color="green">2452</FONT>       *            wrapping another exception.<a name="line.2452"></a>
<FONT color="green">2453</FONT>       * @see org.xml.sax.ContentHandler#processingInstruction<a name="line.2453"></a>
<FONT color="green">2454</FONT>       */<a name="line.2454"></a>
<FONT color="green">2455</FONT>      public void processingInstruction(String target, String data)<a name="line.2455"></a>
<FONT color="green">2456</FONT>              throws SAXException<a name="line.2456"></a>
<FONT color="green">2457</FONT>      {<a name="line.2457"></a>
<FONT color="green">2458</FONT>    <a name="line.2458"></a>
<FONT color="green">2459</FONT>        charactersFlush();<a name="line.2459"></a>
<FONT color="green">2460</FONT>    <a name="line.2460"></a>
<FONT color="green">2461</FONT>        int dataIndex = m_data.size();<a name="line.2461"></a>
<FONT color="green">2462</FONT>        m_previous = addNode(DTM.PROCESSING_INSTRUCTION_NODE,<a name="line.2462"></a>
<FONT color="green">2463</FONT>                             DTM.PROCESSING_INSTRUCTION_NODE,<a name="line.2463"></a>
<FONT color="green">2464</FONT>                             m_parents.peek(), m_previous,<a name="line.2464"></a>
<FONT color="green">2465</FONT>                             -dataIndex, false);<a name="line.2465"></a>
<FONT color="green">2466</FONT>    <a name="line.2466"></a>
<FONT color="green">2467</FONT>        m_data.addElement(m_valuesOrPrefixes.stringToIndex(target));<a name="line.2467"></a>
<FONT color="green">2468</FONT>        m_values.addElement(data);<a name="line.2468"></a>
<FONT color="green">2469</FONT>        m_data.addElement(m_valueIndex++);<a name="line.2469"></a>
<FONT color="green">2470</FONT>    <a name="line.2470"></a>
<FONT color="green">2471</FONT>      }<a name="line.2471"></a>
<FONT color="green">2472</FONT>    <a name="line.2472"></a>
<FONT color="green">2473</FONT>      /**<a name="line.2473"></a>
<FONT color="green">2474</FONT>       * The optimized version of DTMDefaultBase.getFirstAttribute().<a name="line.2474"></a>
<FONT color="green">2475</FONT>       * &lt;p&gt;<a name="line.2475"></a>
<FONT color="green">2476</FONT>       * Given a node handle, get the index of the node's first attribute.<a name="line.2476"></a>
<FONT color="green">2477</FONT>       *<a name="line.2477"></a>
<FONT color="green">2478</FONT>       * @param nodeHandle int Handle of the node.<a name="line.2478"></a>
<FONT color="green">2479</FONT>       * @return Handle of first attribute, or DTM.NULL to indicate none exists.<a name="line.2479"></a>
<FONT color="green">2480</FONT>       */<a name="line.2480"></a>
<FONT color="green">2481</FONT>      public final int getFirstAttribute(int nodeHandle)<a name="line.2481"></a>
<FONT color="green">2482</FONT>      {<a name="line.2482"></a>
<FONT color="green">2483</FONT>        int nodeID = makeNodeIdentity(nodeHandle);<a name="line.2483"></a>
<FONT color="green">2484</FONT>    <a name="line.2484"></a>
<FONT color="green">2485</FONT>        if (nodeID == DTM.NULL)<a name="line.2485"></a>
<FONT color="green">2486</FONT>          return DTM.NULL;<a name="line.2486"></a>
<FONT color="green">2487</FONT>    <a name="line.2487"></a>
<FONT color="green">2488</FONT>        int type = _type2(nodeID);<a name="line.2488"></a>
<FONT color="green">2489</FONT>    <a name="line.2489"></a>
<FONT color="green">2490</FONT>        if (DTM.ELEMENT_NODE == type)<a name="line.2490"></a>
<FONT color="green">2491</FONT>        {<a name="line.2491"></a>
<FONT color="green">2492</FONT>          // Assume that attributes and namespaces immediately follow the element.<a name="line.2492"></a>
<FONT color="green">2493</FONT>          while (true)<a name="line.2493"></a>
<FONT color="green">2494</FONT>          {<a name="line.2494"></a>
<FONT color="green">2495</FONT>            nodeID++;<a name="line.2495"></a>
<FONT color="green">2496</FONT>            // Assume this can not be null.<a name="line.2496"></a>
<FONT color="green">2497</FONT>            type = _type2(nodeID);<a name="line.2497"></a>
<FONT color="green">2498</FONT>    <a name="line.2498"></a>
<FONT color="green">2499</FONT>            if (type == DTM.ATTRIBUTE_NODE)<a name="line.2499"></a>
<FONT color="green">2500</FONT>            {<a name="line.2500"></a>
<FONT color="green">2501</FONT>              return makeNodeHandle(nodeID);<a name="line.2501"></a>
<FONT color="green">2502</FONT>            }<a name="line.2502"></a>
<FONT color="green">2503</FONT>            else if (DTM.NAMESPACE_NODE != type)<a name="line.2503"></a>
<FONT color="green">2504</FONT>            {<a name="line.2504"></a>
<FONT color="green">2505</FONT>              break;<a name="line.2505"></a>
<FONT color="green">2506</FONT>            }<a name="line.2506"></a>
<FONT color="green">2507</FONT>          }<a name="line.2507"></a>
<FONT color="green">2508</FONT>        }<a name="line.2508"></a>
<FONT color="green">2509</FONT>    <a name="line.2509"></a>
<FONT color="green">2510</FONT>        return DTM.NULL;<a name="line.2510"></a>
<FONT color="green">2511</FONT>      }<a name="line.2511"></a>
<FONT color="green">2512</FONT>    <a name="line.2512"></a>
<FONT color="green">2513</FONT>      /**<a name="line.2513"></a>
<FONT color="green">2514</FONT>       * The optimized version of DTMDefaultBase.getFirstAttributeIdentity(int).<a name="line.2514"></a>
<FONT color="green">2515</FONT>       * &lt;p&gt;<a name="line.2515"></a>
<FONT color="green">2516</FONT>       * Given a node identity, get the index of the node's first attribute.<a name="line.2516"></a>
<FONT color="green">2517</FONT>       *<a name="line.2517"></a>
<FONT color="green">2518</FONT>       * @param identity int identity of the node.<a name="line.2518"></a>
<FONT color="green">2519</FONT>       * @return Identity of first attribute, or DTM.NULL to indicate none exists.<a name="line.2519"></a>
<FONT color="green">2520</FONT>       */<a name="line.2520"></a>
<FONT color="green">2521</FONT>      protected int getFirstAttributeIdentity(int identity) {<a name="line.2521"></a>
<FONT color="green">2522</FONT>        if (identity == NULL) {<a name="line.2522"></a>
<FONT color="green">2523</FONT>            return NULL;<a name="line.2523"></a>
<FONT color="green">2524</FONT>        }<a name="line.2524"></a>
<FONT color="green">2525</FONT>        int type = _type2(identity);<a name="line.2525"></a>
<FONT color="green">2526</FONT>    <a name="line.2526"></a>
<FONT color="green">2527</FONT>        if (DTM.ELEMENT_NODE == type)<a name="line.2527"></a>
<FONT color="green">2528</FONT>        {<a name="line.2528"></a>
<FONT color="green">2529</FONT>          // Assume that attributes and namespaces immediately follow the element.<a name="line.2529"></a>
<FONT color="green">2530</FONT>          while (true)<a name="line.2530"></a>
<FONT color="green">2531</FONT>          {<a name="line.2531"></a>
<FONT color="green">2532</FONT>            identity++;<a name="line.2532"></a>
<FONT color="green">2533</FONT>    <a name="line.2533"></a>
<FONT color="green">2534</FONT>            // Assume this can not be null.<a name="line.2534"></a>
<FONT color="green">2535</FONT>            type = _type2(identity);<a name="line.2535"></a>
<FONT color="green">2536</FONT>    <a name="line.2536"></a>
<FONT color="green">2537</FONT>            if (type == DTM.ATTRIBUTE_NODE)<a name="line.2537"></a>
<FONT color="green">2538</FONT>            {<a name="line.2538"></a>
<FONT color="green">2539</FONT>              return identity;<a name="line.2539"></a>
<FONT color="green">2540</FONT>            }<a name="line.2540"></a>
<FONT color="green">2541</FONT>            else if (DTM.NAMESPACE_NODE != type)<a name="line.2541"></a>
<FONT color="green">2542</FONT>            {<a name="line.2542"></a>
<FONT color="green">2543</FONT>              break;<a name="line.2543"></a>
<FONT color="green">2544</FONT>            }<a name="line.2544"></a>
<FONT color="green">2545</FONT>          }<a name="line.2545"></a>
<FONT color="green">2546</FONT>        }<a name="line.2546"></a>
<FONT color="green">2547</FONT>    <a name="line.2547"></a>
<FONT color="green">2548</FONT>        return DTM.NULL;<a name="line.2548"></a>
<FONT color="green">2549</FONT>      }<a name="line.2549"></a>
<FONT color="green">2550</FONT>    <a name="line.2550"></a>
<FONT color="green">2551</FONT>      /**<a name="line.2551"></a>
<FONT color="green">2552</FONT>       * The optimized version of DTMDefaultBase.getNextAttributeIdentity(int).<a name="line.2552"></a>
<FONT color="green">2553</FONT>       * &lt;p&gt;<a name="line.2553"></a>
<FONT color="green">2554</FONT>       * Given a node identity for an attribute, advance to the next attribute.<a name="line.2554"></a>
<FONT color="green">2555</FONT>       *<a name="line.2555"></a>
<FONT color="green">2556</FONT>       * @param identity int identity of the attribute node.  This<a name="line.2556"></a>
<FONT color="green">2557</FONT>       * &lt;strong&gt;must&lt;/strong&gt; be an attribute node.<a name="line.2557"></a>
<FONT color="green">2558</FONT>       *<a name="line.2558"></a>
<FONT color="green">2559</FONT>       * @return int DTM node-identity of the resolved attr,<a name="line.2559"></a>
<FONT color="green">2560</FONT>       * or DTM.NULL to indicate none exists.<a name="line.2560"></a>
<FONT color="green">2561</FONT>       *<a name="line.2561"></a>
<FONT color="green">2562</FONT>       */<a name="line.2562"></a>
<FONT color="green">2563</FONT>      protected int getNextAttributeIdentity(int identity) {<a name="line.2563"></a>
<FONT color="green">2564</FONT>        // Assume that attributes and namespace nodes immediately follow the element<a name="line.2564"></a>
<FONT color="green">2565</FONT>        while (true) {<a name="line.2565"></a>
<FONT color="green">2566</FONT>          identity++;<a name="line.2566"></a>
<FONT color="green">2567</FONT>          int type = _type2(identity);<a name="line.2567"></a>
<FONT color="green">2568</FONT>    <a name="line.2568"></a>
<FONT color="green">2569</FONT>          if (type == DTM.ATTRIBUTE_NODE) {<a name="line.2569"></a>
<FONT color="green">2570</FONT>            return identity;<a name="line.2570"></a>
<FONT color="green">2571</FONT>          } else if (type != DTM.NAMESPACE_NODE) {<a name="line.2571"></a>
<FONT color="green">2572</FONT>            break;<a name="line.2572"></a>
<FONT color="green">2573</FONT>          }<a name="line.2573"></a>
<FONT color="green">2574</FONT>        }<a name="line.2574"></a>
<FONT color="green">2575</FONT>    <a name="line.2575"></a>
<FONT color="green">2576</FONT>        return DTM.NULL;<a name="line.2576"></a>
<FONT color="green">2577</FONT>      }<a name="line.2577"></a>
<FONT color="green">2578</FONT>    <a name="line.2578"></a>
<FONT color="green">2579</FONT>      /**<a name="line.2579"></a>
<FONT color="green">2580</FONT>       * The optimized version of DTMDefaultBase.getTypedAttribute(int, int).<a name="line.2580"></a>
<FONT color="green">2581</FONT>       * &lt;p&gt;<a name="line.2581"></a>
<FONT color="green">2582</FONT>       * Given a node handle and an expanded type ID, get the index of the node's<a name="line.2582"></a>
<FONT color="green">2583</FONT>       * attribute of that type, if any.<a name="line.2583"></a>
<FONT color="green">2584</FONT>       *<a name="line.2584"></a>
<FONT color="green">2585</FONT>       * @param nodeHandle int Handle of the node.<a name="line.2585"></a>
<FONT color="green">2586</FONT>       * @param attType int expanded type ID of the required attribute.<a name="line.2586"></a>
<FONT color="green">2587</FONT>       * @return Handle of attribute of the required type, or DTM.NULL to indicate<a name="line.2587"></a>
<FONT color="green">2588</FONT>       * none exists.<a name="line.2588"></a>
<FONT color="green">2589</FONT>       */<a name="line.2589"></a>
<FONT color="green">2590</FONT>      protected final int getTypedAttribute(int nodeHandle, int attType)<a name="line.2590"></a>
<FONT color="green">2591</FONT>      {<a name="line.2591"></a>
<FONT color="green">2592</FONT>    <a name="line.2592"></a>
<FONT color="green">2593</FONT>        int nodeID = makeNodeIdentity(nodeHandle);<a name="line.2593"></a>
<FONT color="green">2594</FONT>    <a name="line.2594"></a>
<FONT color="green">2595</FONT>        if (nodeID == DTM.NULL)<a name="line.2595"></a>
<FONT color="green">2596</FONT>          return DTM.NULL;<a name="line.2596"></a>
<FONT color="green">2597</FONT>    <a name="line.2597"></a>
<FONT color="green">2598</FONT>        int type = _type2(nodeID);<a name="line.2598"></a>
<FONT color="green">2599</FONT>    <a name="line.2599"></a>
<FONT color="green">2600</FONT>        if (DTM.ELEMENT_NODE == type)<a name="line.2600"></a>
<FONT color="green">2601</FONT>        {<a name="line.2601"></a>
<FONT color="green">2602</FONT>          int expType;<a name="line.2602"></a>
<FONT color="green">2603</FONT>          while (true)<a name="line.2603"></a>
<FONT color="green">2604</FONT>          {<a name="line.2604"></a>
<FONT color="green">2605</FONT>            nodeID++;<a name="line.2605"></a>
<FONT color="green">2606</FONT>            expType = _exptype2(nodeID);<a name="line.2606"></a>
<FONT color="green">2607</FONT>    <a name="line.2607"></a>
<FONT color="green">2608</FONT>            if (expType != DTM.NULL)<a name="line.2608"></a>
<FONT color="green">2609</FONT>              type = m_extendedTypes[expType].getNodeType();<a name="line.2609"></a>
<FONT color="green">2610</FONT>            else<a name="line.2610"></a>
<FONT color="green">2611</FONT>              return DTM.NULL;<a name="line.2611"></a>
<FONT color="green">2612</FONT>    <a name="line.2612"></a>
<FONT color="green">2613</FONT>            if (type == DTM.ATTRIBUTE_NODE)<a name="line.2613"></a>
<FONT color="green">2614</FONT>            {<a name="line.2614"></a>
<FONT color="green">2615</FONT>              if (expType == attType) return makeNodeHandle(nodeID);<a name="line.2615"></a>
<FONT color="green">2616</FONT>            }<a name="line.2616"></a>
<FONT color="green">2617</FONT>            else if (DTM.NAMESPACE_NODE != type)<a name="line.2617"></a>
<FONT color="green">2618</FONT>            {<a name="line.2618"></a>
<FONT color="green">2619</FONT>              break;<a name="line.2619"></a>
<FONT color="green">2620</FONT>            }<a name="line.2620"></a>
<FONT color="green">2621</FONT>          }<a name="line.2621"></a>
<FONT color="green">2622</FONT>        }<a name="line.2622"></a>
<FONT color="green">2623</FONT>    <a name="line.2623"></a>
<FONT color="green">2624</FONT>        return DTM.NULL;<a name="line.2624"></a>
<FONT color="green">2625</FONT>      }<a name="line.2625"></a>
<FONT color="green">2626</FONT>    <a name="line.2626"></a>
<FONT color="green">2627</FONT>      /**<a name="line.2627"></a>
<FONT color="green">2628</FONT>       * Override SAX2DTM.getLocalName() in SAX2DTM2.<a name="line.2628"></a>
<FONT color="green">2629</FONT>       * &lt;p&gt;Processing for PIs is different.<a name="line.2629"></a>
<FONT color="green">2630</FONT>       *<a name="line.2630"></a>
<FONT color="green">2631</FONT>       * Given a node handle, return its XPath- style localname. (As defined in<a name="line.2631"></a>
<FONT color="green">2632</FONT>       * Namespaces, this is the portion of the name after any colon character).<a name="line.2632"></a>
<FONT color="green">2633</FONT>       *<a name="line.2633"></a>
<FONT color="green">2634</FONT>       * @param nodeHandle the id of the node.<a name="line.2634"></a>
<FONT color="green">2635</FONT>       * @return String Local name of this node.<a name="line.2635"></a>
<FONT color="green">2636</FONT>       */<a name="line.2636"></a>
<FONT color="green">2637</FONT>      public String getLocalName(int nodeHandle)<a name="line.2637"></a>
<FONT color="green">2638</FONT>      {<a name="line.2638"></a>
<FONT color="green">2639</FONT>        int expType = _exptype(makeNodeIdentity(nodeHandle));<a name="line.2639"></a>
<FONT color="green">2640</FONT>    <a name="line.2640"></a>
<FONT color="green">2641</FONT>        if (expType == DTM.PROCESSING_INSTRUCTION_NODE)<a name="line.2641"></a>
<FONT color="green">2642</FONT>        {<a name="line.2642"></a>
<FONT color="green">2643</FONT>          int dataIndex = _dataOrQName(makeNodeIdentity(nodeHandle));<a name="line.2643"></a>
<FONT color="green">2644</FONT>          dataIndex = m_data.elementAt(-dataIndex);<a name="line.2644"></a>
<FONT color="green">2645</FONT>          return m_valuesOrPrefixes.indexToString(dataIndex);<a name="line.2645"></a>
<FONT color="green">2646</FONT>        }<a name="line.2646"></a>
<FONT color="green">2647</FONT>        else<a name="line.2647"></a>
<FONT color="green">2648</FONT>          return m_expandedNameTable.getLocalName(expType);<a name="line.2648"></a>
<FONT color="green">2649</FONT>      }<a name="line.2649"></a>
<FONT color="green">2650</FONT>    <a name="line.2650"></a>
<FONT color="green">2651</FONT>      /**<a name="line.2651"></a>
<FONT color="green">2652</FONT>       * The optimized version of SAX2DTM.getNodeNameX().<a name="line.2652"></a>
<FONT color="green">2653</FONT>       * &lt;p&gt;<a name="line.2653"></a>
<FONT color="green">2654</FONT>       * Given a node handle, return the XPath node name. This should be the name<a name="line.2654"></a>
<FONT color="green">2655</FONT>       * as described by the XPath data model, NOT the DOM- style name.<a name="line.2655"></a>
<FONT color="green">2656</FONT>       *<a name="line.2656"></a>
<FONT color="green">2657</FONT>       * @param nodeHandle the id of the node.<a name="line.2657"></a>
<FONT color="green">2658</FONT>       * @return String Name of this node, which may be an empty string.<a name="line.2658"></a>
<FONT color="green">2659</FONT>       */<a name="line.2659"></a>
<FONT color="green">2660</FONT>      public final String getNodeNameX(int nodeHandle)<a name="line.2660"></a>
<FONT color="green">2661</FONT>      {<a name="line.2661"></a>
<FONT color="green">2662</FONT>    <a name="line.2662"></a>
<FONT color="green">2663</FONT>        int nodeID = makeNodeIdentity(nodeHandle);<a name="line.2663"></a>
<FONT color="green">2664</FONT>        int eType = _exptype2(nodeID);<a name="line.2664"></a>
<FONT color="green">2665</FONT>    <a name="line.2665"></a>
<FONT color="green">2666</FONT>        if (eType == DTM.PROCESSING_INSTRUCTION_NODE)<a name="line.2666"></a>
<FONT color="green">2667</FONT>        {<a name="line.2667"></a>
<FONT color="green">2668</FONT>          int dataIndex = _dataOrQName(nodeID);<a name="line.2668"></a>
<FONT color="green">2669</FONT>          dataIndex = m_data.elementAt(-dataIndex);<a name="line.2669"></a>
<FONT color="green">2670</FONT>          return m_valuesOrPrefixes.indexToString(dataIndex);<a name="line.2670"></a>
<FONT color="green">2671</FONT>        }<a name="line.2671"></a>
<FONT color="green">2672</FONT>    <a name="line.2672"></a>
<FONT color="green">2673</FONT>        final ExtendedType extType = m_extendedTypes[eType];<a name="line.2673"></a>
<FONT color="green">2674</FONT>    <a name="line.2674"></a>
<FONT color="green">2675</FONT>        if (extType.getNamespace().length() == 0)<a name="line.2675"></a>
<FONT color="green">2676</FONT>        {<a name="line.2676"></a>
<FONT color="green">2677</FONT>          return extType.getLocalName();<a name="line.2677"></a>
<FONT color="green">2678</FONT>        }<a name="line.2678"></a>
<FONT color="green">2679</FONT>        else<a name="line.2679"></a>
<FONT color="green">2680</FONT>        {<a name="line.2680"></a>
<FONT color="green">2681</FONT>          int qnameIndex = m_dataOrQName.elementAt(nodeID);<a name="line.2681"></a>
<FONT color="green">2682</FONT>    <a name="line.2682"></a>
<FONT color="green">2683</FONT>          if (qnameIndex == 0)<a name="line.2683"></a>
<FONT color="green">2684</FONT>            return extType.getLocalName();<a name="line.2684"></a>
<FONT color="green">2685</FONT>    <a name="line.2685"></a>
<FONT color="green">2686</FONT>          if (qnameIndex &lt; 0)<a name="line.2686"></a>
<FONT color="green">2687</FONT>          {<a name="line.2687"></a>
<FONT color="green">2688</FONT>            qnameIndex = -qnameIndex;<a name="line.2688"></a>
<FONT color="green">2689</FONT>            qnameIndex = m_data.elementAt(qnameIndex);<a name="line.2689"></a>
<FONT color="green">2690</FONT>          }<a name="line.2690"></a>
<FONT color="green">2691</FONT>    <a name="line.2691"></a>
<FONT color="green">2692</FONT>          return m_valuesOrPrefixes.indexToString(qnameIndex);<a name="line.2692"></a>
<FONT color="green">2693</FONT>        }<a name="line.2693"></a>
<FONT color="green">2694</FONT>      }<a name="line.2694"></a>
<FONT color="green">2695</FONT>    <a name="line.2695"></a>
<FONT color="green">2696</FONT>      /**<a name="line.2696"></a>
<FONT color="green">2697</FONT>       * The optimized version of SAX2DTM.getNodeName().<a name="line.2697"></a>
<FONT color="green">2698</FONT>       * &lt;p&gt;<a name="line.2698"></a>
<FONT color="green">2699</FONT>       * Given a node handle, return its DOM-style node name. This will include<a name="line.2699"></a>
<FONT color="green">2700</FONT>       * names such as #text or #document.<a name="line.2700"></a>
<FONT color="green">2701</FONT>       *<a name="line.2701"></a>
<FONT color="green">2702</FONT>       * @param nodeHandle the id of the node.<a name="line.2702"></a>
<FONT color="green">2703</FONT>       * @return String Name of this node, which may be an empty string.<a name="line.2703"></a>
<FONT color="green">2704</FONT>       * %REVIEW% Document when empty string is possible...<a name="line.2704"></a>
<FONT color="green">2705</FONT>       * %REVIEW-COMMENT% It should never be empty, should it?<a name="line.2705"></a>
<FONT color="green">2706</FONT>       */<a name="line.2706"></a>
<FONT color="green">2707</FONT>      public String getNodeName(int nodeHandle)<a name="line.2707"></a>
<FONT color="green">2708</FONT>      {<a name="line.2708"></a>
<FONT color="green">2709</FONT>    <a name="line.2709"></a>
<FONT color="green">2710</FONT>        int nodeID = makeNodeIdentity(nodeHandle);<a name="line.2710"></a>
<FONT color="green">2711</FONT>        int eType = _exptype2(nodeID);<a name="line.2711"></a>
<FONT color="green">2712</FONT>    <a name="line.2712"></a>
<FONT color="green">2713</FONT>        final ExtendedType extType = m_extendedTypes[eType];<a name="line.2713"></a>
<FONT color="green">2714</FONT>        if (extType.getNamespace().length() == 0)<a name="line.2714"></a>
<FONT color="green">2715</FONT>        {<a name="line.2715"></a>
<FONT color="green">2716</FONT>          int type = extType.getNodeType();<a name="line.2716"></a>
<FONT color="green">2717</FONT>    <a name="line.2717"></a>
<FONT color="green">2718</FONT>          String localName = extType.getLocalName();<a name="line.2718"></a>
<FONT color="green">2719</FONT>          if (type == DTM.NAMESPACE_NODE)<a name="line.2719"></a>
<FONT color="green">2720</FONT>          {<a name="line.2720"></a>
<FONT color="green">2721</FONT>            if (localName.length() == 0)<a name="line.2721"></a>
<FONT color="green">2722</FONT>              return "xmlns";<a name="line.2722"></a>
<FONT color="green">2723</FONT>            else<a name="line.2723"></a>
<FONT color="green">2724</FONT>              return "xmlns:" + localName;<a name="line.2724"></a>
<FONT color="green">2725</FONT>          }<a name="line.2725"></a>
<FONT color="green">2726</FONT>          else if (type == DTM.PROCESSING_INSTRUCTION_NODE)<a name="line.2726"></a>
<FONT color="green">2727</FONT>          {<a name="line.2727"></a>
<FONT color="green">2728</FONT>            int dataIndex = _dataOrQName(nodeID);<a name="line.2728"></a>
<FONT color="green">2729</FONT>            dataIndex = m_data.elementAt(-dataIndex);<a name="line.2729"></a>
<FONT color="green">2730</FONT>            return m_valuesOrPrefixes.indexToString(dataIndex);<a name="line.2730"></a>
<FONT color="green">2731</FONT>          }<a name="line.2731"></a>
<FONT color="green">2732</FONT>          else if (localName.length() == 0)<a name="line.2732"></a>
<FONT color="green">2733</FONT>          {<a name="line.2733"></a>
<FONT color="green">2734</FONT>            return getFixedNames(type);<a name="line.2734"></a>
<FONT color="green">2735</FONT>          }<a name="line.2735"></a>
<FONT color="green">2736</FONT>          else<a name="line.2736"></a>
<FONT color="green">2737</FONT>            return localName;<a name="line.2737"></a>
<FONT color="green">2738</FONT>        }<a name="line.2738"></a>
<FONT color="green">2739</FONT>        else<a name="line.2739"></a>
<FONT color="green">2740</FONT>        {<a name="line.2740"></a>
<FONT color="green">2741</FONT>          int qnameIndex = m_dataOrQName.elementAt(nodeID);<a name="line.2741"></a>
<FONT color="green">2742</FONT>    <a name="line.2742"></a>
<FONT color="green">2743</FONT>          if (qnameIndex == 0)<a name="line.2743"></a>
<FONT color="green">2744</FONT>            return extType.getLocalName();<a name="line.2744"></a>
<FONT color="green">2745</FONT>    <a name="line.2745"></a>
<FONT color="green">2746</FONT>          if (qnameIndex &lt; 0)<a name="line.2746"></a>
<FONT color="green">2747</FONT>          {<a name="line.2747"></a>
<FONT color="green">2748</FONT>            qnameIndex = -qnameIndex;<a name="line.2748"></a>
<FONT color="green">2749</FONT>            qnameIndex = m_data.elementAt(qnameIndex);<a name="line.2749"></a>
<FONT color="green">2750</FONT>          }<a name="line.2750"></a>
<FONT color="green">2751</FONT>    <a name="line.2751"></a>
<FONT color="green">2752</FONT>          return m_valuesOrPrefixes.indexToString(qnameIndex);<a name="line.2752"></a>
<FONT color="green">2753</FONT>        }<a name="line.2753"></a>
<FONT color="green">2754</FONT>      }<a name="line.2754"></a>
<FONT color="green">2755</FONT>    <a name="line.2755"></a>
<FONT color="green">2756</FONT>      /**<a name="line.2756"></a>
<FONT color="green">2757</FONT>       * Override SAX2DTM.getStringValue(int)<a name="line.2757"></a>
<FONT color="green">2758</FONT>       * &lt;p&gt;<a name="line.2758"></a>
<FONT color="green">2759</FONT>       * This method is only used by Xalan-J Interpretive. It is not used by XSLTC.<a name="line.2759"></a>
<FONT color="green">2760</FONT>       * &lt;p&gt;<a name="line.2760"></a>
<FONT color="green">2761</FONT>       * If the caller supplies an XMLStringFactory, the getStringValue() interface<a name="line.2761"></a>
<FONT color="green">2762</FONT>       * in SAX2DTM will be called. Otherwise just calls getStringValueX() and<a name="line.2762"></a>
<FONT color="green">2763</FONT>       * wraps the returned String in an XMLString.<a name="line.2763"></a>
<FONT color="green">2764</FONT>       *<a name="line.2764"></a>
<FONT color="green">2765</FONT>       * Get the string-value of a node as a String object<a name="line.2765"></a>
<FONT color="green">2766</FONT>       * (see http://www.w3.org/TR/xpath#data-model<a name="line.2766"></a>
<FONT color="green">2767</FONT>       * for the definition of a node's string-value).<a name="line.2767"></a>
<FONT color="green">2768</FONT>       *<a name="line.2768"></a>
<FONT color="green">2769</FONT>       * @param nodeHandle The node ID.<a name="line.2769"></a>
<FONT color="green">2770</FONT>       *<a name="line.2770"></a>
<FONT color="green">2771</FONT>       * @return A string object that represents the string-value of the given node.<a name="line.2771"></a>
<FONT color="green">2772</FONT>       */<a name="line.2772"></a>
<FONT color="green">2773</FONT>      public XMLString getStringValue(int nodeHandle)<a name="line.2773"></a>
<FONT color="green">2774</FONT>      {<a name="line.2774"></a>
<FONT color="green">2775</FONT>        int identity = makeNodeIdentity(nodeHandle);<a name="line.2775"></a>
<FONT color="green">2776</FONT>        if (identity == DTM.NULL)<a name="line.2776"></a>
<FONT color="green">2777</FONT>          return EMPTY_XML_STR;<a name="line.2777"></a>
<FONT color="green">2778</FONT>    <a name="line.2778"></a>
<FONT color="green">2779</FONT>        int type= _type2(identity);<a name="line.2779"></a>
<FONT color="green">2780</FONT>    <a name="line.2780"></a>
<FONT color="green">2781</FONT>        if (type == DTM.ELEMENT_NODE || type == DTM.DOCUMENT_NODE)<a name="line.2781"></a>
<FONT color="green">2782</FONT>        {<a name="line.2782"></a>
<FONT color="green">2783</FONT>          int startNode = identity;<a name="line.2783"></a>
<FONT color="green">2784</FONT>          identity = _firstch2(identity);<a name="line.2784"></a>
<FONT color="green">2785</FONT>          if (DTM.NULL != identity)<a name="line.2785"></a>
<FONT color="green">2786</FONT>          {<a name="line.2786"></a>
<FONT color="green">2787</FONT>            int offset = -1;<a name="line.2787"></a>
<FONT color="green">2788</FONT>            int length = 0;<a name="line.2788"></a>
<FONT color="green">2789</FONT>    <a name="line.2789"></a>
<FONT color="green">2790</FONT>            do<a name="line.2790"></a>
<FONT color="green">2791</FONT>            {<a name="line.2791"></a>
<FONT color="green">2792</FONT>              type = _exptype2(identity);<a name="line.2792"></a>
<FONT color="green">2793</FONT>    <a name="line.2793"></a>
<FONT color="green">2794</FONT>              if (type == DTM.TEXT_NODE || type == DTM.CDATA_SECTION_NODE)<a name="line.2794"></a>
<FONT color="green">2795</FONT>              {<a name="line.2795"></a>
<FONT color="green">2796</FONT>                int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.2796"></a>
<FONT color="green">2797</FONT>                if (dataIndex &gt;= 0)<a name="line.2797"></a>
<FONT color="green">2798</FONT>                {<a name="line.2798"></a>
<FONT color="green">2799</FONT>                  if (-1 == offset)<a name="line.2799"></a>
<FONT color="green">2800</FONT>                  {<a name="line.2800"></a>
<FONT color="green">2801</FONT>                    offset = dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS;<a name="line.2801"></a>
<FONT color="green">2802</FONT>                  }<a name="line.2802"></a>
<FONT color="green">2803</FONT>    <a name="line.2803"></a>
<FONT color="green">2804</FONT>                  length += dataIndex &amp; TEXT_LENGTH_MAX;<a name="line.2804"></a>
<FONT color="green">2805</FONT>                }<a name="line.2805"></a>
<FONT color="green">2806</FONT>                else<a name="line.2806"></a>
<FONT color="green">2807</FONT>                {<a name="line.2807"></a>
<FONT color="green">2808</FONT>                  if (-1 == offset)<a name="line.2808"></a>
<FONT color="green">2809</FONT>                  {<a name="line.2809"></a>
<FONT color="green">2810</FONT>                    offset = m_data.elementAt(-dataIndex);<a name="line.2810"></a>
<FONT color="green">2811</FONT>                  }<a name="line.2811"></a>
<FONT color="green">2812</FONT>    <a name="line.2812"></a>
<FONT color="green">2813</FONT>                  length += m_data.elementAt(-dataIndex + 1);<a name="line.2813"></a>
<FONT color="green">2814</FONT>                }<a name="line.2814"></a>
<FONT color="green">2815</FONT>              }<a name="line.2815"></a>
<FONT color="green">2816</FONT>    <a name="line.2816"></a>
<FONT color="green">2817</FONT>              identity++;<a name="line.2817"></a>
<FONT color="green">2818</FONT>            } while (_parent2(identity) &gt;= startNode);<a name="line.2818"></a>
<FONT color="green">2819</FONT>    <a name="line.2819"></a>
<FONT color="green">2820</FONT>            if (length &gt; 0)<a name="line.2820"></a>
<FONT color="green">2821</FONT>            {<a name="line.2821"></a>
<FONT color="green">2822</FONT>              if (m_xstrf != null)<a name="line.2822"></a>
<FONT color="green">2823</FONT>                return m_xstrf.newstr(m_chars, offset, length);<a name="line.2823"></a>
<FONT color="green">2824</FONT>              else<a name="line.2824"></a>
<FONT color="green">2825</FONT>                return new XMLStringDefault(m_chars.getString(offset, length));<a name="line.2825"></a>
<FONT color="green">2826</FONT>            }<a name="line.2826"></a>
<FONT color="green">2827</FONT>            else<a name="line.2827"></a>
<FONT color="green">2828</FONT>              return EMPTY_XML_STR;<a name="line.2828"></a>
<FONT color="green">2829</FONT>          }<a name="line.2829"></a>
<FONT color="green">2830</FONT>          else<a name="line.2830"></a>
<FONT color="green">2831</FONT>            return EMPTY_XML_STR;<a name="line.2831"></a>
<FONT color="green">2832</FONT>        }<a name="line.2832"></a>
<FONT color="green">2833</FONT>        else if (DTM.TEXT_NODE == type || DTM.CDATA_SECTION_NODE == type)<a name="line.2833"></a>
<FONT color="green">2834</FONT>        {<a name="line.2834"></a>
<FONT color="green">2835</FONT>          int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.2835"></a>
<FONT color="green">2836</FONT>          if (dataIndex &gt;= 0)<a name="line.2836"></a>
<FONT color="green">2837</FONT>          {<a name="line.2837"></a>
<FONT color="green">2838</FONT>            if (m_xstrf != null)<a name="line.2838"></a>
<FONT color="green">2839</FONT>              return m_xstrf.newstr(m_chars, dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS,<a name="line.2839"></a>
<FONT color="green">2840</FONT>                             dataIndex &amp; TEXT_LENGTH_MAX);<a name="line.2840"></a>
<FONT color="green">2841</FONT>            else<a name="line.2841"></a>
<FONT color="green">2842</FONT>              return new XMLStringDefault(m_chars.getString(dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS,<a name="line.2842"></a>
<FONT color="green">2843</FONT>                                          dataIndex &amp; TEXT_LENGTH_MAX));<a name="line.2843"></a>
<FONT color="green">2844</FONT>          }<a name="line.2844"></a>
<FONT color="green">2845</FONT>          else<a name="line.2845"></a>
<FONT color="green">2846</FONT>          {<a name="line.2846"></a>
<FONT color="green">2847</FONT>            if (m_xstrf != null)<a name="line.2847"></a>
<FONT color="green">2848</FONT>              return m_xstrf.newstr(m_chars, m_data.elementAt(-dataIndex),<a name="line.2848"></a>
<FONT color="green">2849</FONT>                                    m_data.elementAt(-dataIndex+1));<a name="line.2849"></a>
<FONT color="green">2850</FONT>            else<a name="line.2850"></a>
<FONT color="green">2851</FONT>              return new XMLStringDefault(m_chars.getString(m_data.elementAt(-dataIndex),<a name="line.2851"></a>
<FONT color="green">2852</FONT>                                       m_data.elementAt(-dataIndex+1)));<a name="line.2852"></a>
<FONT color="green">2853</FONT>          }<a name="line.2853"></a>
<FONT color="green">2854</FONT>        }<a name="line.2854"></a>
<FONT color="green">2855</FONT>        else<a name="line.2855"></a>
<FONT color="green">2856</FONT>        {<a name="line.2856"></a>
<FONT color="green">2857</FONT>          int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.2857"></a>
<FONT color="green">2858</FONT>    <a name="line.2858"></a>
<FONT color="green">2859</FONT>          if (dataIndex &lt; 0)<a name="line.2859"></a>
<FONT color="green">2860</FONT>          {<a name="line.2860"></a>
<FONT color="green">2861</FONT>            dataIndex = -dataIndex;<a name="line.2861"></a>
<FONT color="green">2862</FONT>            dataIndex = m_data.elementAt(dataIndex + 1);<a name="line.2862"></a>
<FONT color="green">2863</FONT>          }<a name="line.2863"></a>
<FONT color="green">2864</FONT>    <a name="line.2864"></a>
<FONT color="green">2865</FONT>          if (m_xstrf != null)<a name="line.2865"></a>
<FONT color="green">2866</FONT>            return m_xstrf.newstr((String)m_values.elementAt(dataIndex));<a name="line.2866"></a>
<FONT color="green">2867</FONT>          else<a name="line.2867"></a>
<FONT color="green">2868</FONT>            return new XMLStringDefault((String)m_values.elementAt(dataIndex));<a name="line.2868"></a>
<FONT color="green">2869</FONT>        }<a name="line.2869"></a>
<FONT color="green">2870</FONT>      }<a name="line.2870"></a>
<FONT color="green">2871</FONT>    <a name="line.2871"></a>
<FONT color="green">2872</FONT>      /**<a name="line.2872"></a>
<FONT color="green">2873</FONT>       * The optimized version of SAX2DTM.getStringValue(int).<a name="line.2873"></a>
<FONT color="green">2874</FONT>       * &lt;p&gt;<a name="line.2874"></a>
<FONT color="green">2875</FONT>       * %OPT% This is one of the most often used interfaces. Performance is<a name="line.2875"></a>
<FONT color="green">2876</FONT>       * critical here. This one is different from SAX2DTM.getStringValue(int) in<a name="line.2876"></a>
<FONT color="green">2877</FONT>       * that it returns a String instead of a XMLString.<a name="line.2877"></a>
<FONT color="green">2878</FONT>       *<a name="line.2878"></a>
<FONT color="green">2879</FONT>       * Get the string- value of a node as a String object (see http: //www. w3.<a name="line.2879"></a>
<FONT color="green">2880</FONT>       * org/TR/xpath#data- model for the definition of a node's string- value).<a name="line.2880"></a>
<FONT color="green">2881</FONT>       *<a name="line.2881"></a>
<FONT color="green">2882</FONT>       * @param nodeHandle The node ID.<a name="line.2882"></a>
<FONT color="green">2883</FONT>       *<a name="line.2883"></a>
<FONT color="green">2884</FONT>       * @return A string object that represents the string-value of the given node.<a name="line.2884"></a>
<FONT color="green">2885</FONT>       */<a name="line.2885"></a>
<FONT color="green">2886</FONT>      public final String getStringValueX(final int nodeHandle)<a name="line.2886"></a>
<FONT color="green">2887</FONT>      {<a name="line.2887"></a>
<FONT color="green">2888</FONT>        int identity = makeNodeIdentity(nodeHandle);<a name="line.2888"></a>
<FONT color="green">2889</FONT>        if (identity == DTM.NULL)<a name="line.2889"></a>
<FONT color="green">2890</FONT>          return EMPTY_STR;<a name="line.2890"></a>
<FONT color="green">2891</FONT>    <a name="line.2891"></a>
<FONT color="green">2892</FONT>        int type= _type2(identity);<a name="line.2892"></a>
<FONT color="green">2893</FONT>    <a name="line.2893"></a>
<FONT color="green">2894</FONT>        if (type == DTM.ELEMENT_NODE || type == DTM.DOCUMENT_NODE)<a name="line.2894"></a>
<FONT color="green">2895</FONT>        {<a name="line.2895"></a>
<FONT color="green">2896</FONT>          int startNode = identity;<a name="line.2896"></a>
<FONT color="green">2897</FONT>          identity = _firstch2(identity);<a name="line.2897"></a>
<FONT color="green">2898</FONT>          if (DTM.NULL != identity)<a name="line.2898"></a>
<FONT color="green">2899</FONT>          {<a name="line.2899"></a>
<FONT color="green">2900</FONT>            int offset = -1;<a name="line.2900"></a>
<FONT color="green">2901</FONT>            int length = 0;<a name="line.2901"></a>
<FONT color="green">2902</FONT>    <a name="line.2902"></a>
<FONT color="green">2903</FONT>            do<a name="line.2903"></a>
<FONT color="green">2904</FONT>            {<a name="line.2904"></a>
<FONT color="green">2905</FONT>              type = _exptype2(identity);<a name="line.2905"></a>
<FONT color="green">2906</FONT>    <a name="line.2906"></a>
<FONT color="green">2907</FONT>              if (type == DTM.TEXT_NODE || type == DTM.CDATA_SECTION_NODE)<a name="line.2907"></a>
<FONT color="green">2908</FONT>              {<a name="line.2908"></a>
<FONT color="green">2909</FONT>                int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.2909"></a>
<FONT color="green">2910</FONT>                if (dataIndex &gt;= 0)<a name="line.2910"></a>
<FONT color="green">2911</FONT>                {<a name="line.2911"></a>
<FONT color="green">2912</FONT>                  if (-1 == offset)<a name="line.2912"></a>
<FONT color="green">2913</FONT>                  {<a name="line.2913"></a>
<FONT color="green">2914</FONT>                    offset = dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS;<a name="line.2914"></a>
<FONT color="green">2915</FONT>                  }<a name="line.2915"></a>
<FONT color="green">2916</FONT>    <a name="line.2916"></a>
<FONT color="green">2917</FONT>                  length += dataIndex &amp; TEXT_LENGTH_MAX;<a name="line.2917"></a>
<FONT color="green">2918</FONT>                }<a name="line.2918"></a>
<FONT color="green">2919</FONT>                else<a name="line.2919"></a>
<FONT color="green">2920</FONT>                {<a name="line.2920"></a>
<FONT color="green">2921</FONT>                  if (-1 == offset)<a name="line.2921"></a>
<FONT color="green">2922</FONT>                  {<a name="line.2922"></a>
<FONT color="green">2923</FONT>                    offset = m_data.elementAt(-dataIndex);<a name="line.2923"></a>
<FONT color="green">2924</FONT>                  }<a name="line.2924"></a>
<FONT color="green">2925</FONT>    <a name="line.2925"></a>
<FONT color="green">2926</FONT>                  length += m_data.elementAt(-dataIndex + 1);<a name="line.2926"></a>
<FONT color="green">2927</FONT>                }<a name="line.2927"></a>
<FONT color="green">2928</FONT>              }<a name="line.2928"></a>
<FONT color="green">2929</FONT>    <a name="line.2929"></a>
<FONT color="green">2930</FONT>              identity++;<a name="line.2930"></a>
<FONT color="green">2931</FONT>            } while (_parent2(identity) &gt;= startNode);<a name="line.2931"></a>
<FONT color="green">2932</FONT>    <a name="line.2932"></a>
<FONT color="green">2933</FONT>            if (length &gt; 0)<a name="line.2933"></a>
<FONT color="green">2934</FONT>            {<a name="line.2934"></a>
<FONT color="green">2935</FONT>              return m_chars.getString(offset, length);<a name="line.2935"></a>
<FONT color="green">2936</FONT>            }<a name="line.2936"></a>
<FONT color="green">2937</FONT>            else<a name="line.2937"></a>
<FONT color="green">2938</FONT>              return EMPTY_STR;<a name="line.2938"></a>
<FONT color="green">2939</FONT>          }<a name="line.2939"></a>
<FONT color="green">2940</FONT>          else<a name="line.2940"></a>
<FONT color="green">2941</FONT>            return EMPTY_STR;<a name="line.2941"></a>
<FONT color="green">2942</FONT>        }<a name="line.2942"></a>
<FONT color="green">2943</FONT>        else if (DTM.TEXT_NODE == type || DTM.CDATA_SECTION_NODE == type)<a name="line.2943"></a>
<FONT color="green">2944</FONT>        {<a name="line.2944"></a>
<FONT color="green">2945</FONT>          int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.2945"></a>
<FONT color="green">2946</FONT>          if (dataIndex &gt;= 0)<a name="line.2946"></a>
<FONT color="green">2947</FONT>          {<a name="line.2947"></a>
<FONT color="green">2948</FONT>            return m_chars.getString(dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS,<a name="line.2948"></a>
<FONT color="green">2949</FONT>                                      dataIndex &amp; TEXT_LENGTH_MAX);<a name="line.2949"></a>
<FONT color="green">2950</FONT>          }<a name="line.2950"></a>
<FONT color="green">2951</FONT>          else<a name="line.2951"></a>
<FONT color="green">2952</FONT>          {<a name="line.2952"></a>
<FONT color="green">2953</FONT>            return m_chars.getString(m_data.elementAt(-dataIndex),<a name="line.2953"></a>
<FONT color="green">2954</FONT>                                      m_data.elementAt(-dataIndex+1));<a name="line.2954"></a>
<FONT color="green">2955</FONT>          }<a name="line.2955"></a>
<FONT color="green">2956</FONT>        }<a name="line.2956"></a>
<FONT color="green">2957</FONT>        else<a name="line.2957"></a>
<FONT color="green">2958</FONT>        {<a name="line.2958"></a>
<FONT color="green">2959</FONT>          int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.2959"></a>
<FONT color="green">2960</FONT>    <a name="line.2960"></a>
<FONT color="green">2961</FONT>          if (dataIndex &lt; 0)<a name="line.2961"></a>
<FONT color="green">2962</FONT>          {<a name="line.2962"></a>
<FONT color="green">2963</FONT>            dataIndex = -dataIndex;<a name="line.2963"></a>
<FONT color="green">2964</FONT>            dataIndex = m_data.elementAt(dataIndex + 1);<a name="line.2964"></a>
<FONT color="green">2965</FONT>          }<a name="line.2965"></a>
<FONT color="green">2966</FONT>    <a name="line.2966"></a>
<FONT color="green">2967</FONT>          return (String)m_values.elementAt(dataIndex);<a name="line.2967"></a>
<FONT color="green">2968</FONT>        }<a name="line.2968"></a>
<FONT color="green">2969</FONT>      }<a name="line.2969"></a>
<FONT color="green">2970</FONT>    <a name="line.2970"></a>
<FONT color="green">2971</FONT>      /**<a name="line.2971"></a>
<FONT color="green">2972</FONT>       * Returns the string value of the entire tree<a name="line.2972"></a>
<FONT color="green">2973</FONT>       */<a name="line.2973"></a>
<FONT color="green">2974</FONT>      public String getStringValue()<a name="line.2974"></a>
<FONT color="green">2975</FONT>      {<a name="line.2975"></a>
<FONT color="green">2976</FONT>        int child = _firstch2(ROOTNODE);<a name="line.2976"></a>
<FONT color="green">2977</FONT>        if (child == DTM.NULL) return EMPTY_STR;<a name="line.2977"></a>
<FONT color="green">2978</FONT>    <a name="line.2978"></a>
<FONT color="green">2979</FONT>        // optimization: only create StringBuffer if &gt; 1 child<a name="line.2979"></a>
<FONT color="green">2980</FONT>        if ((_exptype2(child) == DTM.TEXT_NODE) &amp;&amp; (_nextsib2(child) == DTM.NULL))<a name="line.2980"></a>
<FONT color="green">2981</FONT>        {<a name="line.2981"></a>
<FONT color="green">2982</FONT>          int dataIndex = m_dataOrQName.elementAt(child);<a name="line.2982"></a>
<FONT color="green">2983</FONT>          if (dataIndex &gt;= 0)<a name="line.2983"></a>
<FONT color="green">2984</FONT>            return m_chars.getString(dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS, dataIndex &amp; TEXT_LENGTH_MAX);<a name="line.2984"></a>
<FONT color="green">2985</FONT>          else<a name="line.2985"></a>
<FONT color="green">2986</FONT>            return m_chars.getString(m_data.elementAt(-dataIndex),<a name="line.2986"></a>
<FONT color="green">2987</FONT>                                      m_data.elementAt(-dataIndex + 1));<a name="line.2987"></a>
<FONT color="green">2988</FONT>        }<a name="line.2988"></a>
<FONT color="green">2989</FONT>        else<a name="line.2989"></a>
<FONT color="green">2990</FONT>          return getStringValueX(getDocument());<a name="line.2990"></a>
<FONT color="green">2991</FONT>    <a name="line.2991"></a>
<FONT color="green">2992</FONT>      }<a name="line.2992"></a>
<FONT color="green">2993</FONT>    <a name="line.2993"></a>
<FONT color="green">2994</FONT>      /**<a name="line.2994"></a>
<FONT color="green">2995</FONT>       * The optimized version of SAX2DTM.dispatchCharactersEvents(int, ContentHandler, boolean).<a name="line.2995"></a>
<FONT color="green">2996</FONT>       * &lt;p&gt;<a name="line.2996"></a>
<FONT color="green">2997</FONT>       * Directly call the<a name="line.2997"></a>
<FONT color="green">2998</FONT>       * characters method on the passed ContentHandler for the<a name="line.2998"></a>
<FONT color="green">2999</FONT>       * string-value of the given node (see http://www.w3.org/TR/xpath#data-model<a name="line.2999"></a>
<FONT color="green">3000</FONT>       * for the definition of a node's string-value). Multiple calls to the<a name="line.3000"></a>
<FONT color="green">3001</FONT>       * ContentHandler's characters methods may well occur for a single call to<a name="line.3001"></a>
<FONT color="green">3002</FONT>       * this method.<a name="line.3002"></a>
<FONT color="green">3003</FONT>       *<a name="line.3003"></a>
<FONT color="green">3004</FONT>       * @param nodeHandle The node ID.<a name="line.3004"></a>
<FONT color="green">3005</FONT>       * @param ch A non-null reference to a ContentHandler.<a name="line.3005"></a>
<FONT color="green">3006</FONT>       * @param normalize true if the content should be normalized according to<a name="line.3006"></a>
<FONT color="green">3007</FONT>       * the rules for the XPath<a name="line.3007"></a>
<FONT color="green">3008</FONT>       * &lt;a href="http://www.w3.org/TR/xpath#function-normalize-space"&gt;normalize-space&lt;/a&gt;<a name="line.3008"></a>
<FONT color="green">3009</FONT>       * function.<a name="line.3009"></a>
<FONT color="green">3010</FONT>       *<a name="line.3010"></a>
<FONT color="green">3011</FONT>       * @throws SAXException<a name="line.3011"></a>
<FONT color="green">3012</FONT>       */<a name="line.3012"></a>
<FONT color="green">3013</FONT>      public final void dispatchCharactersEvents(int nodeHandle, ContentHandler ch,<a name="line.3013"></a>
<FONT color="green">3014</FONT>                                                 boolean normalize)<a name="line.3014"></a>
<FONT color="green">3015</FONT>              throws SAXException<a name="line.3015"></a>
<FONT color="green">3016</FONT>      {<a name="line.3016"></a>
<FONT color="green">3017</FONT>    <a name="line.3017"></a>
<FONT color="green">3018</FONT>        int identity = makeNodeIdentity(nodeHandle);<a name="line.3018"></a>
<FONT color="green">3019</FONT>    <a name="line.3019"></a>
<FONT color="green">3020</FONT>        if (identity == DTM.NULL)<a name="line.3020"></a>
<FONT color="green">3021</FONT>          return;<a name="line.3021"></a>
<FONT color="green">3022</FONT>    <a name="line.3022"></a>
<FONT color="green">3023</FONT>        int type = _type2(identity);<a name="line.3023"></a>
<FONT color="green">3024</FONT>    <a name="line.3024"></a>
<FONT color="green">3025</FONT>        if (type == DTM.ELEMENT_NODE || type == DTM.DOCUMENT_NODE)<a name="line.3025"></a>
<FONT color="green">3026</FONT>        {<a name="line.3026"></a>
<FONT color="green">3027</FONT>          int startNode = identity;<a name="line.3027"></a>
<FONT color="green">3028</FONT>          identity = _firstch2(identity);<a name="line.3028"></a>
<FONT color="green">3029</FONT>          if (DTM.NULL != identity)<a name="line.3029"></a>
<FONT color="green">3030</FONT>          {<a name="line.3030"></a>
<FONT color="green">3031</FONT>            int offset = -1;<a name="line.3031"></a>
<FONT color="green">3032</FONT>            int length = 0;<a name="line.3032"></a>
<FONT color="green">3033</FONT>    <a name="line.3033"></a>
<FONT color="green">3034</FONT>            do<a name="line.3034"></a>
<FONT color="green">3035</FONT>            {<a name="line.3035"></a>
<FONT color="green">3036</FONT>              type = _exptype2(identity);<a name="line.3036"></a>
<FONT color="green">3037</FONT>    <a name="line.3037"></a>
<FONT color="green">3038</FONT>              if (type == DTM.TEXT_NODE || type == DTM.CDATA_SECTION_NODE)<a name="line.3038"></a>
<FONT color="green">3039</FONT>              {<a name="line.3039"></a>
<FONT color="green">3040</FONT>                int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.3040"></a>
<FONT color="green">3041</FONT>    <a name="line.3041"></a>
<FONT color="green">3042</FONT>                if (dataIndex &gt;= 0)<a name="line.3042"></a>
<FONT color="green">3043</FONT>                {<a name="line.3043"></a>
<FONT color="green">3044</FONT>                  if (-1 == offset)<a name="line.3044"></a>
<FONT color="green">3045</FONT>                  {<a name="line.3045"></a>
<FONT color="green">3046</FONT>                    offset = dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS;<a name="line.3046"></a>
<FONT color="green">3047</FONT>                  }<a name="line.3047"></a>
<FONT color="green">3048</FONT>    <a name="line.3048"></a>
<FONT color="green">3049</FONT>                  length += dataIndex &amp; TEXT_LENGTH_MAX;<a name="line.3049"></a>
<FONT color="green">3050</FONT>                }<a name="line.3050"></a>
<FONT color="green">3051</FONT>                else<a name="line.3051"></a>
<FONT color="green">3052</FONT>                {<a name="line.3052"></a>
<FONT color="green">3053</FONT>                  if (-1 == offset)<a name="line.3053"></a>
<FONT color="green">3054</FONT>                  {<a name="line.3054"></a>
<FONT color="green">3055</FONT>                    offset = m_data.elementAt(-dataIndex);<a name="line.3055"></a>
<FONT color="green">3056</FONT>                  }<a name="line.3056"></a>
<FONT color="green">3057</FONT>    <a name="line.3057"></a>
<FONT color="green">3058</FONT>                  length += m_data.elementAt(-dataIndex + 1);<a name="line.3058"></a>
<FONT color="green">3059</FONT>                }<a name="line.3059"></a>
<FONT color="green">3060</FONT>              }<a name="line.3060"></a>
<FONT color="green">3061</FONT>    <a name="line.3061"></a>
<FONT color="green">3062</FONT>              identity++;<a name="line.3062"></a>
<FONT color="green">3063</FONT>            } while (_parent2(identity) &gt;= startNode);<a name="line.3063"></a>
<FONT color="green">3064</FONT>    <a name="line.3064"></a>
<FONT color="green">3065</FONT>            if (length &gt; 0)<a name="line.3065"></a>
<FONT color="green">3066</FONT>            {<a name="line.3066"></a>
<FONT color="green">3067</FONT>              if(normalize)<a name="line.3067"></a>
<FONT color="green">3068</FONT>                m_chars.sendNormalizedSAXcharacters(ch, offset, length);<a name="line.3068"></a>
<FONT color="green">3069</FONT>              else<a name="line.3069"></a>
<FONT color="green">3070</FONT>                m_chars.sendSAXcharacters(ch, offset, length);<a name="line.3070"></a>
<FONT color="green">3071</FONT>            }<a name="line.3071"></a>
<FONT color="green">3072</FONT>          }<a name="line.3072"></a>
<FONT color="green">3073</FONT>        }<a name="line.3073"></a>
<FONT color="green">3074</FONT>        else if (DTM.TEXT_NODE == type || DTM.CDATA_SECTION_NODE == type)<a name="line.3074"></a>
<FONT color="green">3075</FONT>        {<a name="line.3075"></a>
<FONT color="green">3076</FONT>          int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.3076"></a>
<FONT color="green">3077</FONT>    <a name="line.3077"></a>
<FONT color="green">3078</FONT>          if (dataIndex &gt;= 0)<a name="line.3078"></a>
<FONT color="green">3079</FONT>          {<a name="line.3079"></a>
<FONT color="green">3080</FONT>            if (normalize)<a name="line.3080"></a>
<FONT color="green">3081</FONT>              m_chars.sendNormalizedSAXcharacters(ch, dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS,<a name="line.3081"></a>
<FONT color="green">3082</FONT>                                                  dataIndex &amp; TEXT_LENGTH_MAX);<a name="line.3082"></a>
<FONT color="green">3083</FONT>            else<a name="line.3083"></a>
<FONT color="green">3084</FONT>              m_chars.sendSAXcharacters(ch, dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS,<a name="line.3084"></a>
<FONT color="green">3085</FONT>                                        dataIndex &amp; TEXT_LENGTH_MAX);<a name="line.3085"></a>
<FONT color="green">3086</FONT>          }<a name="line.3086"></a>
<FONT color="green">3087</FONT>          else<a name="line.3087"></a>
<FONT color="green">3088</FONT>          {<a name="line.3088"></a>
<FONT color="green">3089</FONT>            if (normalize)<a name="line.3089"></a>
<FONT color="green">3090</FONT>              m_chars.sendNormalizedSAXcharacters(ch, m_data.elementAt(-dataIndex),<a name="line.3090"></a>
<FONT color="green">3091</FONT>                                                  m_data.elementAt(-dataIndex+1));<a name="line.3091"></a>
<FONT color="green">3092</FONT>            else<a name="line.3092"></a>
<FONT color="green">3093</FONT>              m_chars.sendSAXcharacters(ch, m_data.elementAt(-dataIndex),<a name="line.3093"></a>
<FONT color="green">3094</FONT>                                        m_data.elementAt(-dataIndex+1));<a name="line.3094"></a>
<FONT color="green">3095</FONT>          }<a name="line.3095"></a>
<FONT color="green">3096</FONT>        }<a name="line.3096"></a>
<FONT color="green">3097</FONT>        else<a name="line.3097"></a>
<FONT color="green">3098</FONT>        {<a name="line.3098"></a>
<FONT color="green">3099</FONT>          int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.3099"></a>
<FONT color="green">3100</FONT>    <a name="line.3100"></a>
<FONT color="green">3101</FONT>          if (dataIndex &lt; 0)<a name="line.3101"></a>
<FONT color="green">3102</FONT>          {<a name="line.3102"></a>
<FONT color="green">3103</FONT>            dataIndex = -dataIndex;<a name="line.3103"></a>
<FONT color="green">3104</FONT>            dataIndex = m_data.elementAt(dataIndex + 1);<a name="line.3104"></a>
<FONT color="green">3105</FONT>          }<a name="line.3105"></a>
<FONT color="green">3106</FONT>    <a name="line.3106"></a>
<FONT color="green">3107</FONT>          String str = (String)m_values.elementAt(dataIndex);<a name="line.3107"></a>
<FONT color="green">3108</FONT>    <a name="line.3108"></a>
<FONT color="green">3109</FONT>          if(normalize)<a name="line.3109"></a>
<FONT color="green">3110</FONT>            FastStringBuffer.sendNormalizedSAXcharacters(str.toCharArray(),<a name="line.3110"></a>
<FONT color="green">3111</FONT>                                                         0, str.length(), ch);<a name="line.3111"></a>
<FONT color="green">3112</FONT>          else<a name="line.3112"></a>
<FONT color="green">3113</FONT>            ch.characters(str.toCharArray(), 0, str.length());<a name="line.3113"></a>
<FONT color="green">3114</FONT>        }<a name="line.3114"></a>
<FONT color="green">3115</FONT>      }<a name="line.3115"></a>
<FONT color="green">3116</FONT>    <a name="line.3116"></a>
<FONT color="green">3117</FONT>      /**<a name="line.3117"></a>
<FONT color="green">3118</FONT>       * Given a node handle, return its node value. This is mostly<a name="line.3118"></a>
<FONT color="green">3119</FONT>       * as defined by the DOM, but may ignore some conveniences.<a name="line.3119"></a>
<FONT color="green">3120</FONT>       * &lt;p&gt;<a name="line.3120"></a>
<FONT color="green">3121</FONT>       *<a name="line.3121"></a>
<FONT color="green">3122</FONT>       * @param nodeHandle The node id.<a name="line.3122"></a>
<FONT color="green">3123</FONT>       * @return String Value of this node, or null if not<a name="line.3123"></a>
<FONT color="green">3124</FONT>       * meaningful for this node type.<a name="line.3124"></a>
<FONT color="green">3125</FONT>       */<a name="line.3125"></a>
<FONT color="green">3126</FONT>      public String getNodeValue(int nodeHandle)<a name="line.3126"></a>
<FONT color="green">3127</FONT>      {<a name="line.3127"></a>
<FONT color="green">3128</FONT>    <a name="line.3128"></a>
<FONT color="green">3129</FONT>        int identity = makeNodeIdentity(nodeHandle);<a name="line.3129"></a>
<FONT color="green">3130</FONT>        int type = _type2(identity);<a name="line.3130"></a>
<FONT color="green">3131</FONT>    <a name="line.3131"></a>
<FONT color="green">3132</FONT>        if (type == DTM.TEXT_NODE || type == DTM.CDATA_SECTION_NODE)<a name="line.3132"></a>
<FONT color="green">3133</FONT>        {<a name="line.3133"></a>
<FONT color="green">3134</FONT>          int dataIndex = _dataOrQName(identity);<a name="line.3134"></a>
<FONT color="green">3135</FONT>          if (dataIndex &gt; 0)<a name="line.3135"></a>
<FONT color="green">3136</FONT>          {<a name="line.3136"></a>
<FONT color="green">3137</FONT>            return m_chars.getString(dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS,<a name="line.3137"></a>
<FONT color="green">3138</FONT>                                      dataIndex &amp; TEXT_LENGTH_MAX);<a name="line.3138"></a>
<FONT color="green">3139</FONT>          }<a name="line.3139"></a>
<FONT color="green">3140</FONT>          else<a name="line.3140"></a>
<FONT color="green">3141</FONT>          {<a name="line.3141"></a>
<FONT color="green">3142</FONT>            return m_chars.getString(m_data.elementAt(-dataIndex),<a name="line.3142"></a>
<FONT color="green">3143</FONT>                                      m_data.elementAt(-dataIndex+1));<a name="line.3143"></a>
<FONT color="green">3144</FONT>          }<a name="line.3144"></a>
<FONT color="green">3145</FONT>        }<a name="line.3145"></a>
<FONT color="green">3146</FONT>        else if (DTM.ELEMENT_NODE == type || DTM.DOCUMENT_FRAGMENT_NODE == type<a name="line.3146"></a>
<FONT color="green">3147</FONT>                 || DTM.DOCUMENT_NODE == type)<a name="line.3147"></a>
<FONT color="green">3148</FONT>        {<a name="line.3148"></a>
<FONT color="green">3149</FONT>          return null;<a name="line.3149"></a>
<FONT color="green">3150</FONT>        }<a name="line.3150"></a>
<FONT color="green">3151</FONT>        else<a name="line.3151"></a>
<FONT color="green">3152</FONT>        {<a name="line.3152"></a>
<FONT color="green">3153</FONT>          int dataIndex = m_dataOrQName.elementAt(identity);<a name="line.3153"></a>
<FONT color="green">3154</FONT>    <a name="line.3154"></a>
<FONT color="green">3155</FONT>          if (dataIndex &lt; 0)<a name="line.3155"></a>
<FONT color="green">3156</FONT>          {<a name="line.3156"></a>
<FONT color="green">3157</FONT>            dataIndex = -dataIndex;<a name="line.3157"></a>
<FONT color="green">3158</FONT>            dataIndex = m_data.elementAt(dataIndex + 1);<a name="line.3158"></a>
<FONT color="green">3159</FONT>          }<a name="line.3159"></a>
<FONT color="green">3160</FONT>    <a name="line.3160"></a>
<FONT color="green">3161</FONT>          return (String)m_values.elementAt(dataIndex);<a name="line.3161"></a>
<FONT color="green">3162</FONT>        }<a name="line.3162"></a>
<FONT color="green">3163</FONT>      }<a name="line.3163"></a>
<FONT color="green">3164</FONT>    <a name="line.3164"></a>
<FONT color="green">3165</FONT>        /**<a name="line.3165"></a>
<FONT color="green">3166</FONT>         * Copy the String value of a Text node to a SerializationHandler<a name="line.3166"></a>
<FONT color="green">3167</FONT>         */<a name="line.3167"></a>
<FONT color="green">3168</FONT>        protected final void copyTextNode(final int nodeID, SerializationHandler handler)<a name="line.3168"></a>
<FONT color="green">3169</FONT>            throws SAXException<a name="line.3169"></a>
<FONT color="green">3170</FONT>        {<a name="line.3170"></a>
<FONT color="green">3171</FONT>            if (nodeID != DTM.NULL) {<a name="line.3171"></a>
<FONT color="green">3172</FONT>                int dataIndex = m_dataOrQName.elementAt(nodeID);<a name="line.3172"></a>
<FONT color="green">3173</FONT>                if (dataIndex &gt;= 0) {<a name="line.3173"></a>
<FONT color="green">3174</FONT>                    m_chars.sendSAXcharacters(handler,<a name="line.3174"></a>
<FONT color="green">3175</FONT>                                              dataIndex &gt;&gt;&gt; TEXT_LENGTH_BITS,<a name="line.3175"></a>
<FONT color="green">3176</FONT>                                              dataIndex &amp; TEXT_LENGTH_MAX);<a name="line.3176"></a>
<FONT color="green">3177</FONT>                } else {<a name="line.3177"></a>
<FONT color="green">3178</FONT>                    m_chars.sendSAXcharacters(handler, m_data.elementAt(-dataIndex),<a name="line.3178"></a>
<FONT color="green">3179</FONT>                                              m_data.elementAt(-dataIndex+1));<a name="line.3179"></a>
<FONT color="green">3180</FONT>                }<a name="line.3180"></a>
<FONT color="green">3181</FONT>            }<a name="line.3181"></a>
<FONT color="green">3182</FONT>        }<a name="line.3182"></a>
<FONT color="green">3183</FONT>    <a name="line.3183"></a>
<FONT color="green">3184</FONT>        /**<a name="line.3184"></a>
<FONT color="green">3185</FONT>         * Copy an Element node to a SerializationHandler.<a name="line.3185"></a>
<FONT color="green">3186</FONT>         *<a name="line.3186"></a>
<FONT color="green">3187</FONT>         * @param nodeID The node identity<a name="line.3187"></a>
<FONT color="green">3188</FONT>         * @param exptype The expanded type of the Element node<a name="line.3188"></a>
<FONT color="green">3189</FONT>         * @param handler The SerializationHandler<a name="line.3189"></a>
<FONT color="green">3190</FONT>         * @return The qualified name of the Element node.<a name="line.3190"></a>
<FONT color="green">3191</FONT>         */<a name="line.3191"></a>
<FONT color="green">3192</FONT>        protected final String copyElement(int nodeID, int exptype,<a name="line.3192"></a>
<FONT color="green">3193</FONT>                                   SerializationHandler handler)<a name="line.3193"></a>
<FONT color="green">3194</FONT>            throws SAXException<a name="line.3194"></a>
<FONT color="green">3195</FONT>        {<a name="line.3195"></a>
<FONT color="green">3196</FONT>            final ExtendedType extType = m_extendedTypes[exptype];<a name="line.3196"></a>
<FONT color="green">3197</FONT>            String uri = extType.getNamespace();<a name="line.3197"></a>
<FONT color="green">3198</FONT>            String name = extType.getLocalName();<a name="line.3198"></a>
<FONT color="green">3199</FONT>    <a name="line.3199"></a>
<FONT color="green">3200</FONT>            if (uri.length() == 0) {<a name="line.3200"></a>
<FONT color="green">3201</FONT>                handler.startElement(name);<a name="line.3201"></a>
<FONT color="green">3202</FONT>                return name;<a name="line.3202"></a>
<FONT color="green">3203</FONT>            }<a name="line.3203"></a>
<FONT color="green">3204</FONT>            else {<a name="line.3204"></a>
<FONT color="green">3205</FONT>                int qnameIndex = m_dataOrQName.elementAt(nodeID);<a name="line.3205"></a>
<FONT color="green">3206</FONT>    <a name="line.3206"></a>
<FONT color="green">3207</FONT>                if (qnameIndex == 0) {<a name="line.3207"></a>
<FONT color="green">3208</FONT>                    handler.startElement(name);<a name="line.3208"></a>
<FONT color="green">3209</FONT>                    handler.namespaceAfterStartElement(EMPTY_STR, uri);<a name="line.3209"></a>
<FONT color="green">3210</FONT>                    return name;<a name="line.3210"></a>
<FONT color="green">3211</FONT>                }<a name="line.3211"></a>
<FONT color="green">3212</FONT>    <a name="line.3212"></a>
<FONT color="green">3213</FONT>                if (qnameIndex &lt; 0) {<a name="line.3213"></a>
<FONT color="green">3214</FONT>                    qnameIndex = -qnameIndex;<a name="line.3214"></a>
<FONT color="green">3215</FONT>                    qnameIndex = m_data.elementAt(qnameIndex);<a name="line.3215"></a>
<FONT color="green">3216</FONT>                }<a name="line.3216"></a>
<FONT color="green">3217</FONT>    <a name="line.3217"></a>
<FONT color="green">3218</FONT>                String qName = m_valuesOrPrefixes.indexToString(qnameIndex);<a name="line.3218"></a>
<FONT color="green">3219</FONT>                handler.startElement(qName);<a name="line.3219"></a>
<FONT color="green">3220</FONT>                int prefixIndex = qName.indexOf(':');<a name="line.3220"></a>
<FONT color="green">3221</FONT>                String prefix;<a name="line.3221"></a>
<FONT color="green">3222</FONT>                if (prefixIndex &gt; 0) {<a name="line.3222"></a>
<FONT color="green">3223</FONT>                    prefix = qName.substring(0, prefixIndex);<a name="line.3223"></a>
<FONT color="green">3224</FONT>                }<a name="line.3224"></a>
<FONT color="green">3225</FONT>                else {<a name="line.3225"></a>
<FONT color="green">3226</FONT>                    prefix = null;<a name="line.3226"></a>
<FONT color="green">3227</FONT>                }<a name="line.3227"></a>
<FONT color="green">3228</FONT>                handler.namespaceAfterStartElement(prefix, uri);<a name="line.3228"></a>
<FONT color="green">3229</FONT>                return qName;<a name="line.3229"></a>
<FONT color="green">3230</FONT>            }<a name="line.3230"></a>
<FONT color="green">3231</FONT>    <a name="line.3231"></a>
<FONT color="green">3232</FONT>        }<a name="line.3232"></a>
<FONT color="green">3233</FONT>    <a name="line.3233"></a>
<FONT color="green">3234</FONT>        /**<a name="line.3234"></a>
<FONT color="green">3235</FONT>         * Copy  namespace nodes.<a name="line.3235"></a>
<FONT color="green">3236</FONT>         *<a name="line.3236"></a>
<FONT color="green">3237</FONT>         * @param nodeID The Element node identity<a name="line.3237"></a>
<FONT color="green">3238</FONT>         * @param handler The SerializationHandler<a name="line.3238"></a>
<FONT color="green">3239</FONT>         * @param inScope  true if all namespaces in scope should be copied,<a name="line.3239"></a>
<FONT color="green">3240</FONT>         *  false if only the namespace declarations should be copied.<a name="line.3240"></a>
<FONT color="green">3241</FONT>         */<a name="line.3241"></a>
<FONT color="green">3242</FONT>        protected final void copyNS(final int nodeID, SerializationHandler handler, boolean inScope)<a name="line.3242"></a>
<FONT color="green">3243</FONT>            throws SAXException<a name="line.3243"></a>
<FONT color="green">3244</FONT>        {<a name="line.3244"></a>
<FONT color="green">3245</FONT>            // %OPT% Optimization for documents which does not have any explicit<a name="line.3245"></a>
<FONT color="green">3246</FONT>            // namespace nodes. For these documents, there is an implicit<a name="line.3246"></a>
<FONT color="green">3247</FONT>            // namespace node (xmlns:xml="http://www.w3.org/XML/1998/namespace")<a name="line.3247"></a>
<FONT color="green">3248</FONT>            // declared on the root element node. In this case, there is no<a name="line.3248"></a>
<FONT color="green">3249</FONT>            // need to do namespace copying. We can safely return without<a name="line.3249"></a>
<FONT color="green">3250</FONT>            // doing anything.<a name="line.3250"></a>
<FONT color="green">3251</FONT>            if (m_namespaceDeclSetElements != null &amp;&amp;<a name="line.3251"></a>
<FONT color="green">3252</FONT>                m_namespaceDeclSetElements.size() == 1 &amp;&amp;<a name="line.3252"></a>
<FONT color="green">3253</FONT>                m_namespaceDeclSets != null &amp;&amp;<a name="line.3253"></a>
<FONT color="green">3254</FONT>                ((SuballocatedIntVector)m_namespaceDeclSets.elementAt(0))<a name="line.3254"></a>
<FONT color="green">3255</FONT>                .size() == 1)<a name="line.3255"></a>
<FONT color="green">3256</FONT>                return;<a name="line.3256"></a>
<FONT color="green">3257</FONT>    <a name="line.3257"></a>
<FONT color="green">3258</FONT>            SuballocatedIntVector nsContext = null;<a name="line.3258"></a>
<FONT color="green">3259</FONT>            int nextNSNode;<a name="line.3259"></a>
<FONT color="green">3260</FONT>    <a name="line.3260"></a>
<FONT color="green">3261</FONT>            // Find the first namespace node<a name="line.3261"></a>
<FONT color="green">3262</FONT>            if (inScope) {<a name="line.3262"></a>
<FONT color="green">3263</FONT>                nsContext = findNamespaceContext(nodeID);<a name="line.3263"></a>
<FONT color="green">3264</FONT>                if (nsContext == null || nsContext.size() &lt; 1)<a name="line.3264"></a>
<FONT color="green">3265</FONT>                    return;<a name="line.3265"></a>
<FONT color="green">3266</FONT>                else<a name="line.3266"></a>
<FONT color="green">3267</FONT>                    nextNSNode = makeNodeIdentity(nsContext.elementAt(0));<a name="line.3267"></a>
<FONT color="green">3268</FONT>            }<a name="line.3268"></a>
<FONT color="green">3269</FONT>            else<a name="line.3269"></a>
<FONT color="green">3270</FONT>                nextNSNode = getNextNamespaceNode2(nodeID);<a name="line.3270"></a>
<FONT color="green">3271</FONT>    <a name="line.3271"></a>
<FONT color="green">3272</FONT>            int nsIndex = 1;<a name="line.3272"></a>
<FONT color="green">3273</FONT>            while (nextNSNode != DTM.NULL) {<a name="line.3273"></a>
<FONT color="green">3274</FONT>                // Retrieve the name of the namespace node<a name="line.3274"></a>
<FONT color="green">3275</FONT>                int eType = _exptype2(nextNSNode);<a name="line.3275"></a>
<FONT color="green">3276</FONT>                String nodeName = m_extendedTypes[eType].getLocalName();<a name="line.3276"></a>
<FONT color="green">3277</FONT>    <a name="line.3277"></a>
<FONT color="green">3278</FONT>                // Retrieve the node value of the namespace node<a name="line.3278"></a>
<FONT color="green">3279</FONT>                int dataIndex = m_dataOrQName.elementAt(nextNSNode);<a name="line.3279"></a>
<FONT color="green">3280</FONT>    <a name="line.3280"></a>
<FONT color="green">3281</FONT>                if (dataIndex &lt; 0) {<a name="line.3281"></a>
<FONT color="green">3282</FONT>                    dataIndex = -dataIndex;<a name="line.3282"></a>
<FONT color="green">3283</FONT>                    dataIndex = m_data.elementAt(dataIndex + 1);<a name="line.3283"></a>
<FONT color="green">3284</FONT>                }<a name="line.3284"></a>
<FONT color="green">3285</FONT>    <a name="line.3285"></a>
<FONT color="green">3286</FONT>                String nodeValue = (String)m_values.elementAt(dataIndex);<a name="line.3286"></a>
<FONT color="green">3287</FONT>    <a name="line.3287"></a>
<FONT color="green">3288</FONT>                handler.namespaceAfterStartElement(nodeName, nodeValue);<a name="line.3288"></a>
<FONT color="green">3289</FONT>    <a name="line.3289"></a>
<FONT color="green">3290</FONT>                if (inScope) {<a name="line.3290"></a>
<FONT color="green">3291</FONT>                    if (nsIndex &lt; nsContext.size()) {<a name="line.3291"></a>
<FONT color="green">3292</FONT>                        nextNSNode = makeNodeIdentity(nsContext.elementAt(nsIndex));<a name="line.3292"></a>
<FONT color="green">3293</FONT>                        nsIndex++;<a name="line.3293"></a>
<FONT color="green">3294</FONT>                    }<a name="line.3294"></a>
<FONT color="green">3295</FONT>                    else<a name="line.3295"></a>
<FONT color="green">3296</FONT>                        return;<a name="line.3296"></a>
<FONT color="green">3297</FONT>                }<a name="line.3297"></a>
<FONT color="green">3298</FONT>                else<a name="line.3298"></a>
<FONT color="green">3299</FONT>                    nextNSNode = getNextNamespaceNode2(nextNSNode);<a name="line.3299"></a>
<FONT color="green">3300</FONT>            }<a name="line.3300"></a>
<FONT color="green">3301</FONT>        }<a name="line.3301"></a>
<FONT color="green">3302</FONT>    <a name="line.3302"></a>
<FONT color="green">3303</FONT>        /**<a name="line.3303"></a>
<FONT color="green">3304</FONT>         * Return the next namespace node following the given base node.<a name="line.3304"></a>
<FONT color="green">3305</FONT>         *<a name="line.3305"></a>
<FONT color="green">3306</FONT>         * @baseID The node identity of the base node, which can be an<a name="line.3306"></a>
<FONT color="green">3307</FONT>         * element, attribute or namespace node.<a name="line.3307"></a>
<FONT color="green">3308</FONT>         * @return The namespace node immediately following the base node.<a name="line.3308"></a>
<FONT color="green">3309</FONT>         */<a name="line.3309"></a>
<FONT color="green">3310</FONT>        protected final int getNextNamespaceNode2(int baseID) {<a name="line.3310"></a>
<FONT color="green">3311</FONT>            int type;<a name="line.3311"></a>
<FONT color="green">3312</FONT>            while ((type = _type2(++baseID)) == DTM.ATTRIBUTE_NODE);<a name="line.3312"></a>
<FONT color="green">3313</FONT>    <a name="line.3313"></a>
<FONT color="green">3314</FONT>            if (type == DTM.NAMESPACE_NODE)<a name="line.3314"></a>
<FONT color="green">3315</FONT>                return baseID;<a name="line.3315"></a>
<FONT color="green">3316</FONT>            else<a name="line.3316"></a>
<FONT color="green">3317</FONT>                return NULL;<a name="line.3317"></a>
<FONT color="green">3318</FONT>        }<a name="line.3318"></a>
<FONT color="green">3319</FONT>    <a name="line.3319"></a>
<FONT color="green">3320</FONT>        /**<a name="line.3320"></a>
<FONT color="green">3321</FONT>         * Copy  attribute nodes from an element .<a name="line.3321"></a>
<FONT color="green">3322</FONT>         *<a name="line.3322"></a>
<FONT color="green">3323</FONT>         * @param nodeID The Element node identity<a name="line.3323"></a>
<FONT color="green">3324</FONT>         * @param handler The SerializationHandler<a name="line.3324"></a>
<FONT color="green">3325</FONT>         */<a name="line.3325"></a>
<FONT color="green">3326</FONT>        protected final void copyAttributes(final int nodeID, SerializationHandler handler)<a name="line.3326"></a>
<FONT color="green">3327</FONT>            throws SAXException{<a name="line.3327"></a>
<FONT color="green">3328</FONT>    <a name="line.3328"></a>
<FONT color="green">3329</FONT>           for(int current = getFirstAttributeIdentity(nodeID); current != DTM.NULL; current = getNextAttributeIdentity(current)){<a name="line.3329"></a>
<FONT color="green">3330</FONT>                int eType = _exptype2(current);<a name="line.3330"></a>
<FONT color="green">3331</FONT>                copyAttribute(current, eType, handler);<a name="line.3331"></a>
<FONT color="green">3332</FONT>           }<a name="line.3332"></a>
<FONT color="green">3333</FONT>        }<a name="line.3333"></a>
<FONT color="green">3334</FONT>    <a name="line.3334"></a>
<FONT color="green">3335</FONT>    <a name="line.3335"></a>
<FONT color="green">3336</FONT>    <a name="line.3336"></a>
<FONT color="green">3337</FONT>        /**<a name="line.3337"></a>
<FONT color="green">3338</FONT>         * Copy an Attribute node to a SerializationHandler<a name="line.3338"></a>
<FONT color="green">3339</FONT>         *<a name="line.3339"></a>
<FONT color="green">3340</FONT>         * @param nodeID The node identity<a name="line.3340"></a>
<FONT color="green">3341</FONT>         * @param exptype The expanded type of the Element node<a name="line.3341"></a>
<FONT color="green">3342</FONT>         * @param handler The SerializationHandler<a name="line.3342"></a>
<FONT color="green">3343</FONT>         */<a name="line.3343"></a>
<FONT color="green">3344</FONT>        protected final void copyAttribute(int nodeID, int exptype,<a name="line.3344"></a>
<FONT color="green">3345</FONT>            SerializationHandler handler)<a name="line.3345"></a>
<FONT color="green">3346</FONT>            throws SAXException<a name="line.3346"></a>
<FONT color="green">3347</FONT>        {<a name="line.3347"></a>
<FONT color="green">3348</FONT>            /*<a name="line.3348"></a>
<FONT color="green">3349</FONT>                final String uri = getNamespaceName(node);<a name="line.3349"></a>
<FONT color="green">3350</FONT>                if (uri.length() != 0) {<a name="line.3350"></a>
<FONT color="green">3351</FONT>                    final String prefix = getPrefix(node);<a name="line.3351"></a>
<FONT color="green">3352</FONT>                    handler.namespaceAfterStartElement(prefix, uri);<a name="line.3352"></a>
<FONT color="green">3353</FONT>                }<a name="line.3353"></a>
<FONT color="green">3354</FONT>                handler.addAttribute(getNodeName(node), getNodeValue(node));<a name="line.3354"></a>
<FONT color="green">3355</FONT>            */<a name="line.3355"></a>
<FONT color="green">3356</FONT>            final ExtendedType extType = m_extendedTypes[exptype];<a name="line.3356"></a>
<FONT color="green">3357</FONT>            final String uri = extType.getNamespace();<a name="line.3357"></a>
<FONT color="green">3358</FONT>            final String localName = extType.getLocalName();<a name="line.3358"></a>
<FONT color="green">3359</FONT>    <a name="line.3359"></a>
<FONT color="green">3360</FONT>            String prefix = null;<a name="line.3360"></a>
<FONT color="green">3361</FONT>            String qname = null;<a name="line.3361"></a>
<FONT color="green">3362</FONT>            int dataIndex = _dataOrQName(nodeID);<a name="line.3362"></a>
<FONT color="green">3363</FONT>            int valueIndex = dataIndex;<a name="line.3363"></a>
<FONT color="green">3364</FONT>                if (dataIndex &lt;= 0) {<a name="line.3364"></a>
<FONT color="green">3365</FONT>                    int prefixIndex = m_data.elementAt(-dataIndex);<a name="line.3365"></a>
<FONT color="green">3366</FONT>                    valueIndex = m_data.elementAt(-dataIndex+1);<a name="line.3366"></a>
<FONT color="green">3367</FONT>                    qname = m_valuesOrPrefixes.indexToString(prefixIndex);<a name="line.3367"></a>
<FONT color="green">3368</FONT>                    int colonIndex = qname.indexOf(':');<a name="line.3368"></a>
<FONT color="green">3369</FONT>                    if (colonIndex &gt; 0) {<a name="line.3369"></a>
<FONT color="green">3370</FONT>                        prefix = qname.substring(0, colonIndex);<a name="line.3370"></a>
<FONT color="green">3371</FONT>                    }<a name="line.3371"></a>
<FONT color="green">3372</FONT>                }<a name="line.3372"></a>
<FONT color="green">3373</FONT>                if (uri.length() != 0) {<a name="line.3373"></a>
<FONT color="green">3374</FONT>                    handler.namespaceAfterStartElement(prefix, uri);<a name="line.3374"></a>
<FONT color="green">3375</FONT>                }<a name="line.3375"></a>
<FONT color="green">3376</FONT>    <a name="line.3376"></a>
<FONT color="green">3377</FONT>            String nodeName = (prefix != null) ? qname : localName;<a name="line.3377"></a>
<FONT color="green">3378</FONT>            String nodeValue = (String)m_values.elementAt(valueIndex);<a name="line.3378"></a>
<FONT color="green">3379</FONT>    <a name="line.3379"></a>
<FONT color="green">3380</FONT>            handler.addAttribute(nodeName, nodeValue);<a name="line.3380"></a>
<FONT color="green">3381</FONT>        }<a name="line.3381"></a>
<FONT color="green">3382</FONT>    <a name="line.3382"></a>
<FONT color="green">3383</FONT>    }<a name="line.3383"></a>




























































</PRE>
</BODY>
</HTML>
