<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xml.xpath2.processor.internal.utils</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xml.xpath2.processor.internal.utils</strong></font><br>
               Class StringCodePointIterator</h2><br><hr><pre>public class <strong>StringCodePointIterator</strong>
extends java.lang.Object</pre><hr><table width="100%" border="1"><tr bgcolor="#CCCCFF"><td width="100%"><h2>Constructor Summary</h2></td></tr><tr><td><code><strong><a href="#con_StringCodePointIterator">StringCodePointIterator</a></strong>(java.lang.String text)</code></td></tr></table><br><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public java.lang.Object</code></td><td width="" align="left"><code><a href="#method_clone">clone</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Creates a copy of this iterator.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_current">current</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Implements CodePointIterator.current() for String.</td></tr><tr valign="top"><td width="20%" align="right"><code>public boolean</code></td><td width="" align="left"><code><a href="#method_equals">equals</a>(java.lang.Object obj)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Compares the equality of two StringCodePointIterator objects.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_first">first</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Implements CodePointIterator.first() for String.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_getIndex">getIndex</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Implements CodePointIterator.getIndex() for String.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_hashCode">hashCode</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Computes a hashcode for this iterator.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_last">last</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Implements CodePointIterator.last() for String.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_next">next</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Implements CodePointIterator.next() for String.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_previous">previous</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Implements CodePointIterator.previous() for String.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_setText">setText</a>(java.lang.String text)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Reset this iterator to point to a new string.  This package-visible
 method is used by other java.text classes that want to avoid allocating
 new StringCodePointIterator objects every time their setText method
 is called.</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Constructor Detail
               </h2></td></tr></table><h2><a name="con_StringCodePointIterator">StringCodePointIterator</a></h2><p><code>public <strong>StringCodePointIterator</strong>(java.lang.String text)</code></p><p>Constructs an iterator with an initial index of 0.</p><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_clone">clone</a></h2><p><code>public java.lang.Object <strong>clone</strong>()</code></p><p>Creates a copy of this iterator.</p><h3>Returns</h3><p><code>java.lang.Object</code> - A copy of this</p><hr><h2><a name="method_current">current</a></h2><p><code>public int <strong>current</strong>()</code></p><p>Implements CodePointIterator.current() for String.</p><h3>Returns</h3><p><code>int</code></p><hr><h2><a name="method_equals">equals</a></h2><p><code>public boolean <strong>equals</strong>(java.lang.Object obj)</code></p><p>Compares the equality of two StringCodePointIterator objects.</p><h3>Parameters</h3><p><code>obj</code> - the StringCodePointIterator object to be compared with.</p><h3>Returns</h3><p><code>boolean</code> - true if the given obj is the same as this  StringCodePointIterator object; false otherwise.</p><hr><h2><a name="method_first">first</a></h2><p><code>public int <strong>first</strong>()</code></p><p>Implements CodePointIterator.first() for String.</p><h3>Returns</h3><p><code>int</code></p><hr><h2><a name="method_getIndex">getIndex</a></h2><p><code>public int <strong>getIndex</strong>()</code></p><p>Implements CodePointIterator.getIndex() for String.</p><h3>Returns</h3><p><code>int</code></p><hr><h2><a name="method_hashCode">hashCode</a></h2><p><code>public int <strong>hashCode</strong>()</code></p><p>Computes a hashcode for this iterator.</p><h3>Returns</h3><p><code>int</code> - A hash code</p><hr><h2><a name="method_last">last</a></h2><p><code>public int <strong>last</strong>()</code></p><p>Implements CodePointIterator.last() for String.</p><h3>Returns</h3><p><code>int</code></p><hr><h2><a name="method_next">next</a></h2><p><code>public int <strong>next</strong>()</code></p><p>Implements CodePointIterator.next() for String.</p><h3>Returns</h3><p><code>int</code></p><hr><h2><a name="method_previous">previous</a></h2><p><code>public int <strong>previous</strong>()</code></p><p>Implements CodePointIterator.previous() for String.</p><h3>Returns</h3><p><code>int</code></p><hr><h2><a name="method_setText">setText</a></h2><p><code>public void <strong>setText</strong>(java.lang.String text)</code></p><p>Reset this iterator to point to a new string.  This package-visible
 method is used by other java.text classes that want to avoid allocating
 new StringCodePointIterator objects every time their setText method
 is called.</p><h3>Parameters</h3><p><code>text</code> - The String to be iterated over</p><hr></body></html>