Home | History | Annotate | Download | only in unicode
      1 /*
      2 ******************************************************************************
      3 *
      4 *   Copyright (C) 1998-2005, International Business Machines
      5 *   Corporation and others.  All Rights Reserved.
      6 *
      7 ******************************************************************************
      8 *
      9 * File schriter.h
     10 *
     11 * Modification History:
     12 *
     13 *   Date        Name        Description
     14 *  05/05/99     stephen     Cleaned up.
     15 ******************************************************************************
     16 */
     17 
     18 #ifndef SCHRITER_H
     19 #define SCHRITER_H
     20 
     21 #include "unicode/utypes.h"
     22 #include "unicode/chariter.h"
     23 #include "unicode/uchriter.h"
     24 
     25 /**
     26  * \file
     27  * \brief C++ API: String Character Iterator
     28  */
     29 
     30 U_NAMESPACE_BEGIN
     31 /**
     32  * A concrete subclass of CharacterIterator that iterates over the
     33  * characters (code units or code points) in a UnicodeString.
     34  * It's possible not only to create an
     35  * iterator that iterates over an entire UnicodeString, but also to
     36  * create one that iterates over only a subrange of a UnicodeString
     37  * (iterators over different subranges of the same UnicodeString don't
     38  * compare equal).
     39  * @see CharacterIterator
     40  * @see ForwardCharacterIterator
     41  * @stable ICU 2.0
     42  */
     43 class U_COMMON_API StringCharacterIterator : public UCharCharacterIterator {
     44 public:
     45   /**
     46    * Create an iterator over the UnicodeString referred to by "textStr".
     47    * The UnicodeString object is copied.
     48    * The iteration range is the whole string, and the starting position is 0.
     49    * @param textStr The unicode string used to create an iterator
     50    * @stable ICU 2.0
     51    */
     52   StringCharacterIterator(const UnicodeString& textStr);
     53 
     54   /**
     55    * Create an iterator over the UnicodeString referred to by "textStr".
     56    * The iteration range is the whole string, and the starting
     57    * position is specified by "textPos".  If "textPos" is outside the valid
     58    * iteration range, the behavior of this object is undefined.
     59    * @param textStr The unicode string used to create an iterator
     60    * @param textPos The starting position of the iteration
     61    * @stable ICU 2.0
     62    */
     63   StringCharacterIterator(const UnicodeString&    textStr,
     64               int32_t              textPos);
     65 
     66   /**
     67    * Create an iterator over the UnicodeString referred to by "textStr".
     68    * The UnicodeString object is copied.
     69    * The iteration range begins with the code unit specified by
     70    * "textBegin" and ends with the code unit BEFORE the code unit specfied
     71    * by "textEnd".  The starting position is specified by "textPos".  If
     72    * "textBegin" and "textEnd" don't form a valid range on "text" (i.e.,
     73    * textBegin >= textEnd or either is negative or greater than text.size()),
     74    * or "textPos" is outside the range defined by "textBegin" and "textEnd",
     75    * the behavior of this iterator is undefined.
     76    * @param textStr    The unicode string used to create the StringCharacterIterator
     77    * @param textBegin  The begin position of the iteration range
     78    * @param textEnd    The end position of the iteration range
     79    * @param textPos    The starting position of the iteration
     80    * @stable ICU 2.0
     81    */
     82   StringCharacterIterator(const UnicodeString&    textStr,
     83               int32_t              textBegin,
     84               int32_t              textEnd,
     85               int32_t              textPos);
     86 
     87   /**
     88    * Copy constructor.  The new iterator iterates over the same range
     89    * of the same string as "that", and its initial position is the
     90    * same as "that"'s current position.
     91    * The UnicodeString object in "that" is copied.
     92    * @param that The StringCharacterIterator to be copied
     93    * @stable ICU 2.0
     94    */
     95   StringCharacterIterator(const StringCharacterIterator&  that);
     96 
     97   /**
     98    * Destructor.
     99    * @stable ICU 2.0
    100    */
    101   virtual ~StringCharacterIterator();
    102 
    103   /**
    104    * Assignment operator.  *this is altered to iterate over the same
    105    * range of the same string as "that", and refers to the same
    106    * character within that string as "that" does.
    107    * @param that The object to be copied.
    108    * @return the newly created object.
    109    * @stable ICU 2.0
    110    */
    111   StringCharacterIterator&
    112   operator=(const StringCharacterIterator&    that);
    113 
    114   /**
    115    * Returns true if the iterators iterate over the same range of the
    116    * same string and are pointing at the same character.
    117    * @param that The ForwardCharacterIterator to be compared for equality
    118    * @return true if the iterators iterate over the same range of the
    119    * same string and are pointing at the same character.
    120    * @stable ICU 2.0
    121    */
    122   virtual UBool          operator==(const ForwardCharacterIterator& that) const;
    123 
    124   /**
    125    * Returns a new StringCharacterIterator referring to the same
    126    * character in the same range of the same string as this one.  The
    127    * caller must delete the new iterator.
    128    * @return the newly cloned object.
    129    * @stable ICU 2.0
    130    */
    131   virtual CharacterIterator* clone(void) const;
    132 
    133   /**
    134    * Sets the iterator to iterate over the provided string.
    135    * @param newText The string to be iterated over
    136    * @stable ICU 2.0
    137    */
    138   void setText(const UnicodeString& newText);
    139 
    140   /**
    141    * Copies the UnicodeString under iteration into the UnicodeString
    142    * referred to by "result".  Even if this iterator iterates across
    143    * only a part of this string, the whole string is copied.
    144    * @param result Receives a copy of the text under iteration.
    145    * @stable ICU 2.0
    146    */
    147   virtual void            getText(UnicodeString& result);
    148 
    149   /**
    150    * Return a class ID for this object (not really public)
    151    * @return a class ID for this object.
    152    * @stable ICU 2.0
    153    */
    154   virtual UClassID         getDynamicClassID(void) const;
    155 
    156   /**
    157    * Return a class ID for this class (not really public)
    158    * @return a class ID for this class
    159    * @stable ICU 2.0
    160    */
    161   static UClassID   U_EXPORT2 getStaticClassID(void);
    162 
    163 protected:
    164   /**
    165    * Default constructor, iteration over empty string.
    166    * @stable ICU 2.0
    167    */
    168   StringCharacterIterator();
    169 
    170   /**
    171    * Sets the iterator to iterate over the provided string.
    172    * @param newText The string to be iterated over
    173    * @param newTextLength The length of the String
    174    * @stable ICU 2.0
    175    */
    176   void setText(const UChar* newText, int32_t newTextLength);
    177 
    178   /**
    179    * Copy of the iterated string object.
    180    * @stable ICU 2.0
    181    */
    182   UnicodeString            text;
    183 
    184 };
    185 
    186 U_NAMESPACE_END
    187 #endif
    188