001    /* ParsePosition.java -- Keep track of position while parsing.
002       Copyright (C) 1998, 1999, 2001, 2005  Free Software Foundation, Inc.
003    
004    This file is part of GNU Classpath.
005    
006    GNU Classpath is free software; you can redistribute it and/or modify
007    it under the terms of the GNU General Public License as published by
008    the Free Software Foundation; either version 2, or (at your option)
009    any later version.
010     
011    GNU Classpath is distributed in the hope that it will be useful, but
012    WITHOUT ANY WARRANTY; without even the implied warranty of
013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014    General Public License for more details.
015    
016    You should have received a copy of the GNU General Public License
017    along with GNU Classpath; see the file COPYING.  If not, write to the
018    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
019    02110-1301 USA.
020    
021    Linking this library statically or dynamically with other modules is
022    making a combined work based on this library.  Thus, the terms and
023    conditions of the GNU General Public License cover the whole
024    combination.
025    
026    As a special exception, the copyright holders of this library give you
027    permission to link this library with independent modules to produce an
028    executable, regardless of the license terms of these independent
029    modules, and to copy and distribute the resulting executable under
030    terms of your choice, provided that you also meet, for each linked
031    independent module, the terms and conditions of the license of that
032    module.  An independent module is a module which is not derived from
033    or based on this library.  If you modify this library, you may extend
034    this exception to your version of the library, but you are not
035    obligated to do so.  If you do not wish to do so, delete this
036    exception statement from your version. */
037    
038    
039    package java.text;
040    
041    /**
042     * This class is used to keep track of the current position during parsing
043     * operations.
044     *
045     * @author Aaron M. Renn (arenn@urbanophile.com)
046     * @author Per Bothner (bothner@cygnus.com)
047     */
048    public class ParsePosition
049    {
050      /**
051       * This is the index of the current parse position.
052       */
053      private int index;
054    
055      /**
056       * This is the index of the position where an error occurred during parsing.
057       */
058      private int error_index;
059    
060      /**
061       * This method initializes a new instance of <code>ParsePosition</code> to
062       * have the specified initial index value.
063       *
064       * @param index The initial parsing index.
065       */
066      public ParsePosition (int index)
067      {
068        this.index = index;
069        error_index = -1;
070      }
071    
072      /**
073       * This method returns the current parsing index.
074       *
075       * @return The current parsing index
076       */
077      public int getIndex ()
078      {
079        return index;
080      }
081    
082      /**
083       * This method sets the current parsing index to the specified value.
084       *
085       * @param index The new parsing index.
086       */
087      public void setIndex (int index)
088      {
089        this.index = index;
090      }
091    
092      /**
093       * This method returns the error index value.  This value defaults to -1
094       * unless explicitly set to another value.
095       *
096       * @return The error index.
097       */
098      public int getErrorIndex ()
099      {
100        return error_index;
101      }
102    
103      /**
104       * This method sets the error index to the specified value.
105       *
106       * @param error_index The new error index
107       */
108      public void setErrorIndex (int error_index)
109      {
110        this.error_index = error_index;
111      }
112    
113      /**
114       * This method tests the specified object for equality with this
115       * object.  The two objects will be considered equal if and only if
116       * all of the following conditions are met.
117       * <p>
118       * <ul>
119       * <li>The specified object is not <code>null</code>.</li>
120       * <li>The specified object is an instance of <code>ParsePosition</code>.</li>
121       * <li>The specified object has the same index and error index as
122       *     this object.</li>
123       * </ul>
124       *
125       * @param obj The <code>Object</code> to test for equality against
126       *            this object. 
127       *
128       * @return <code>true</code> if the specified object is equal to
129       * this object, <code>false</code> otherwise.
130       */
131      public boolean equals (Object obj)
132      {
133        if (! (obj instanceof ParsePosition))
134          return false;
135    
136        ParsePosition other = (ParsePosition) obj;
137        return index == other.index && error_index == other.error_index;
138      }
139      
140      /**
141       * Return the hash code for this object.
142       * @return the hash code
143       */
144      public int hashCode()
145      {
146        return index ^ error_index;
147      }
148    
149      /**
150       * This method returns a <code>String</code> representation of this
151       * object.
152       *
153       * @return A <code>String</code> that represents this object.
154       */
155      public String toString ()
156      {
157        return (getClass ().getName () + "[index=" + getIndex ()
158                + ",errorIndex=" + getErrorIndex () + "]");
159      }
160    }