fontservices/textshaperplugin/IcuSource/common/unicode/parsepos.h
changeset 0 1fb32624e06b
equal deleted inserted replaced
-1:000000000000 0:1fb32624e06b
       
     1 /*
       
     2 * Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved.
       
     3 *******************************************************************************
       
     4 *
       
     5 * File PARSEPOS.H
       
     6 *
       
     7 * Modification History:
       
     8 *
       
     9 *   Date        Name        Description
       
    10 *   07/09/97    helena      Converted from java.
       
    11 *   07/17/98    stephen     Added errorIndex support.
       
    12 *   05/11/99    stephen     Cleaned up.
       
    13 *******************************************************************************
       
    14 */
       
    15 
       
    16 #ifndef PARSEPOS_H
       
    17 #define PARSEPOS_H
       
    18 
       
    19 #include "unicode/utypes.h"
       
    20 #include "unicode/uobject.h"
       
    21 
       
    22  
       
    23 U_NAMESPACE_BEGIN
       
    24 
       
    25 /**
       
    26  * \file
       
    27  * \brief C++ API: Canonical Iterator
       
    28  */
       
    29 /** 
       
    30  * <code>ParsePosition</code> is a simple class used by <code>Format</code>
       
    31  * and its subclasses to keep track of the current position during parsing.
       
    32  * The <code>parseObject</code> method in the various <code>Format</code>
       
    33  * classes requires a <code>ParsePosition</code> object as an argument.
       
    34  *
       
    35  * <p>
       
    36  * By design, as you parse through a string with different formats,
       
    37  * you can use the same <code>ParsePosition</code>, since the index parameter
       
    38  * records the current position.
       
    39  *
       
    40  * The ParsePosition class is not suitable for subclassing.
       
    41  *
       
    42  * @version     1.3 10/30/97
       
    43  * @author      Mark Davis, Helena Shih
       
    44  * @see         java.text.Format
       
    45  */
       
    46 
       
    47 class U_COMMON_API ParsePosition : public UObject {
       
    48 public:
       
    49     /**
       
    50      * Default constructor, the index starts with 0 as default.
       
    51      * @stable ICU 2.0
       
    52      */
       
    53     ParsePosition()
       
    54         : UObject(),
       
    55         index(0),
       
    56         errorIndex(-1)
       
    57       {}
       
    58 
       
    59     /**
       
    60      * Create a new ParsePosition with the given initial index.
       
    61      * @param newIndex the new text offset.
       
    62      * @stable ICU 2.0
       
    63      */
       
    64     ParsePosition(int32_t newIndex)
       
    65         : UObject(),
       
    66         index(newIndex),
       
    67         errorIndex(-1)
       
    68       {}
       
    69 
       
    70     /**
       
    71      * Copy constructor
       
    72      * @param copy the object to be copied from.
       
    73      * @stable ICU 2.0
       
    74      */
       
    75     ParsePosition(const ParsePosition& copy)
       
    76         : UObject(copy),
       
    77         index(copy.index),
       
    78         errorIndex(copy.errorIndex)
       
    79       {}
       
    80 
       
    81     /**
       
    82      * Destructor
       
    83      * @stable ICU 2.0
       
    84      */
       
    85     virtual ~ParsePosition();
       
    86 
       
    87     /**
       
    88      * Assignment operator
       
    89      * @stable ICU 2.0
       
    90      */
       
    91     ParsePosition&      operator=(const ParsePosition& copy);
       
    92 
       
    93     /**
       
    94      * Equality operator.
       
    95      * @return TRUE if the two parse positions are equal, FALSE otherwise.
       
    96      * @stable ICU 2.0
       
    97      */
       
    98     UBool              operator==(const ParsePosition& that) const;
       
    99 
       
   100     /**
       
   101      * Equality operator.
       
   102      * @return TRUE if the two parse positions are not equal, FALSE otherwise.
       
   103      * @stable ICU 2.0
       
   104      */
       
   105     UBool              operator!=(const ParsePosition& that) const;
       
   106 
       
   107     /**
       
   108      * Clone this object.
       
   109      * Clones can be used concurrently in multiple threads.
       
   110      * If an error occurs, then NULL is returned.
       
   111      * The caller must delete the clone.
       
   112      *
       
   113      * @return a clone of this object
       
   114      *
       
   115      * @see getDynamicClassID
       
   116      * @stable ICU 2.8
       
   117      */
       
   118     ParsePosition *clone() const;
       
   119 
       
   120     /**
       
   121      * Retrieve the current parse position.  On input to a parse method, this
       
   122      * is the index of the character at which parsing will begin; on output, it
       
   123      * is the index of the character following the last character parsed.
       
   124      * @return the current index.
       
   125      * @stable ICU 2.0
       
   126      */
       
   127     int32_t getIndex(void) const;
       
   128 
       
   129     /**
       
   130      * Set the current parse position.
       
   131      * @param index the new index.
       
   132      * @stable ICU 2.0
       
   133      */
       
   134     void setIndex(int32_t index);
       
   135 
       
   136     /**
       
   137      * Set the index at which a parse error occurred.  Formatters
       
   138      * should set this before returning an error code from their
       
   139      * parseObject method.  The default value is -1 if this is not
       
   140      * set.
       
   141      * @stable ICU 2.0
       
   142      */
       
   143     void setErrorIndex(int32_t ei);
       
   144 
       
   145     /**
       
   146      * Retrieve the index at which an error occurred, or -1 if the
       
   147      * error index has not been set.
       
   148      * @stable ICU 2.0
       
   149      */
       
   150     int32_t getErrorIndex(void) const;
       
   151 
       
   152     /**
       
   153      * ICU "poor man's RTTI", returns a UClassID for this class.
       
   154      *
       
   155      * @stable ICU 2.2
       
   156      */
       
   157     static UClassID U_EXPORT2 getStaticClassID();
       
   158 
       
   159     /**
       
   160      * ICU "poor man's RTTI", returns a UClassID for the actual class.
       
   161      *
       
   162      * @stable ICU 2.2
       
   163      */
       
   164     virtual UClassID getDynamicClassID() const;
       
   165 
       
   166 private:
       
   167     /**
       
   168      * Input: the place you start parsing.
       
   169      * <br>Output: position where the parse stopped.
       
   170      * This is designed to be used serially,
       
   171      * with each call setting index up for the next one.
       
   172      */
       
   173     int32_t index;
       
   174 
       
   175     /**
       
   176      * The index at which a parse error occurred.
       
   177      */
       
   178     int32_t errorIndex;
       
   179 
       
   180 };
       
   181 
       
   182 inline ParsePosition&
       
   183 ParsePosition::operator=(const ParsePosition& copy)
       
   184 {
       
   185   index = copy.index;
       
   186   errorIndex = copy.errorIndex;
       
   187   return *this;
       
   188 }
       
   189 
       
   190 inline UBool
       
   191 ParsePosition::operator==(const ParsePosition& copy) const
       
   192 {
       
   193   if(index != copy.index || errorIndex != copy.errorIndex)
       
   194   return FALSE;
       
   195   else
       
   196   return TRUE;
       
   197 }
       
   198 
       
   199 inline UBool
       
   200 ParsePosition::operator!=(const ParsePosition& copy) const
       
   201 {
       
   202   return !operator==(copy);
       
   203 }
       
   204 
       
   205 inline int32_t
       
   206 ParsePosition::getIndex() const
       
   207 {
       
   208   return index;
       
   209 }
       
   210 
       
   211 inline void
       
   212 ParsePosition::setIndex(int32_t offset)
       
   213 {
       
   214   this->index = offset;
       
   215 }
       
   216 
       
   217 inline int32_t
       
   218 ParsePosition::getErrorIndex() const
       
   219 {
       
   220   return errorIndex;
       
   221 }
       
   222 
       
   223 inline void
       
   224 ParsePosition::setErrorIndex(int32_t ei)
       
   225 {
       
   226   this->errorIndex = ei;
       
   227 }
       
   228 U_NAMESPACE_END
       
   229 
       
   230 #endif