os/textandloc/fontservices/textshaperplugin/IcuSource/common/unicode/uchriter.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /*
     2 **********************************************************************
     3 *   Copyright (C) 1998-2005, International Business Machines
     4 *   Corporation and others.  All Rights Reserved.
     5 **********************************************************************
     6 */
     7 
     8 #ifndef UCHRITER_H
     9 #define UCHRITER_H
    10 
    11 #include "unicode/utypes.h"
    12 #include "unicode/chariter.h"
    13 
    14 /**
    15  * \file 
    16  * \brief C++ API: UChar Character Iterator
    17  */
    18  
    19 U_NAMESPACE_BEGIN
    20 
    21 /**
    22  * A concrete subclass of CharacterIterator that iterates over the
    23  * characters (code units or code points) in a UChar array.
    24  * It's possible not only to create an
    25  * iterator that iterates over an entire UChar array, but also to
    26  * create one that iterates over only a subrange of a UChar array
    27  * (iterators over different subranges of the same UChar array don't
    28  * compare equal).
    29  * @see CharacterIterator
    30  * @see ForwardCharacterIterator
    31  * @stable ICU 2.0
    32  */
    33 class U_COMMON_API UCharCharacterIterator : public CharacterIterator {
    34 public:
    35   /**
    36    * Create an iterator over the UChar array referred to by "textPtr".
    37    * The iteration range is 0 to <code>length-1</code>.
    38    * text is only aliased, not adopted (the
    39    * destructor will not delete it).
    40    * @param textPtr The UChar array to be iterated over
    41    * @param length The length of the UChar array
    42    * @stable ICU 2.0
    43    */
    44   UCharCharacterIterator(const UChar* textPtr, int32_t length);
    45 
    46   /**
    47    * Create an iterator over the UChar array referred to by "textPtr".
    48    * The iteration range is 0 to <code>length-1</code>.
    49    * text is only aliased, not adopted (the
    50    * destructor will not delete it).
    51    * The starting
    52    * position is specified by "position". If "position" is outside the valid
    53    * iteration range, the behavior of this object is undefined.
    54    * @param textPtr The UChar array to be iteratd over
    55    * @param length The length of the UChar array
    56    * @param position The starting position of the iteration
    57    * @stable ICU 2.0
    58    */
    59   UCharCharacterIterator(const UChar* textPtr, int32_t length,
    60                          int32_t position);
    61 
    62   /**
    63    * Create an iterator over the UChar array referred to by "textPtr".
    64    * The iteration range is 0 to <code>end-1</code>.
    65    * text is only aliased, not adopted (the
    66    * destructor will not delete it).
    67    * The starting
    68    * position is specified by "position". If begin and end do not
    69    * form a valid iteration range or "position" is outside the valid
    70    * iteration range, the behavior of this object is undefined.
    71    * @param textPtr The UChar array to be iterated over
    72    * @param length The length of the UChar array
    73    * @param textBegin  The begin position of the iteration range
    74    * @param textEnd    The end position of the iteration range
    75    * @param position    The starting position of the iteration
    76    * @stable ICU 2.0
    77    */
    78   UCharCharacterIterator(const UChar* textPtr, int32_t length,
    79                          int32_t textBegin,
    80                          int32_t textEnd,
    81                          int32_t position);
    82 
    83   /**
    84    * Copy constructor.  The new iterator iterates over the same range
    85    * of the same string as "that", and its initial position is the
    86    * same as "that"'s current position.
    87    * @param that The UCharCharacterIterator to be copied
    88    * @stable ICU 2.0
    89    */
    90   UCharCharacterIterator(const UCharCharacterIterator&  that);
    91 
    92   /**
    93    * Destructor.
    94    * @stable ICU 2.0
    95    */
    96   virtual ~UCharCharacterIterator();
    97 
    98   /**
    99    * Assignment operator.  *this is altered to iterate over the sane
   100    * range of the same string as "that", and refers to the same
   101    * character within that string as "that" does.
   102    * @param that The object to be copied
   103    * @return the newly created object
   104    * @stable ICU 2.0
   105    */
   106   UCharCharacterIterator&
   107   operator=(const UCharCharacterIterator&    that);
   108 
   109   /**
   110    * Returns true if the iterators iterate over the same range of the
   111    * same string and are pointing at the same character.
   112    * @param that The ForwardCharacterIterator used to be compared for equality
   113    * @return true if the iterators iterate over the same range of the
   114    * same string and are pointing at the same character.
   115    * @stable ICU 2.0
   116    */
   117   virtual UBool          operator==(const ForwardCharacterIterator& that) const;
   118 
   119   /**
   120    * Generates a hash code for this iterator.
   121    * @return the hash code.
   122    * @stable ICU 2.0
   123    */
   124   virtual int32_t         hashCode(void) const;
   125 
   126   /**
   127    * Returns a new UCharCharacterIterator referring to the same
   128    * character in the same range of the same string as this one.  The
   129    * caller must delete the new iterator.
   130    * @return the CharacterIterator newly created
   131    * @stable ICU 2.0
   132    */
   133   virtual CharacterIterator* clone(void) const;
   134 
   135   /**
   136    * Sets the iterator to refer to the first code unit in its
   137    * iteration range, and returns that code unit.
   138    * This can be used to begin an iteration with next().
   139    * @return the first code unit in its iteration range.
   140    * @stable ICU 2.0
   141    */
   142   virtual UChar         first(void);
   143 
   144   /**
   145    * Sets the iterator to refer to the first code unit in its
   146    * iteration range, returns that code unit, and moves the position
   147    * to the second code unit. This is an alternative to setToStart()
   148    * for forward iteration with nextPostInc().
   149    * @return the first code unit in its iteration range
   150    * @stable ICU 2.0
   151    */
   152   virtual UChar         firstPostInc(void);
   153 
   154   /**
   155    * Sets the iterator to refer to the first code point in its
   156    * iteration range, and returns that code unit,
   157    * This can be used to begin an iteration with next32().
   158    * Note that an iteration with next32PostInc(), beginning with,
   159    * e.g., setToStart() or firstPostInc(), is more efficient.
   160    * @return the first code point in its iteration range
   161    * @stable ICU 2.0
   162    */
   163   virtual UChar32       first32(void);
   164 
   165   /**
   166    * Sets the iterator to refer to the first code point in its
   167    * iteration range, returns that code point, and moves the position
   168    * to the second code point. This is an alternative to setToStart()
   169    * for forward iteration with next32PostInc().
   170    * @return the first code point in its iteration range.
   171    * @stable ICU 2.0
   172    */
   173   virtual UChar32       first32PostInc(void);
   174 
   175   /**
   176    * Sets the iterator to refer to the last code unit in its
   177    * iteration range, and returns that code unit.
   178    * This can be used to begin an iteration with previous().
   179    * @return the last code unit in its iteration range.
   180    * @stable ICU 2.0
   181    */
   182   virtual UChar         last(void);
   183 
   184   /**
   185    * Sets the iterator to refer to the last code point in its
   186    * iteration range, and returns that code unit.
   187    * This can be used to begin an iteration with previous32().
   188    * @return the last code point in its iteration range.
   189    * @stable ICU 2.0
   190    */
   191   virtual UChar32       last32(void);
   192 
   193   /**
   194    * Sets the iterator to refer to the "position"-th code unit
   195    * in the text-storage object the iterator refers to, and
   196    * returns that code unit.
   197    * @param position the position within the text-storage object
   198    * @return the code unit
   199    * @stable ICU 2.0
   200    */
   201   virtual UChar         setIndex(int32_t position);
   202 
   203   /**
   204    * Sets the iterator to refer to the beginning of the code point
   205    * that contains the "position"-th code unit
   206    * in the text-storage object the iterator refers to, and
   207    * returns that code point.
   208    * The current position is adjusted to the beginning of the code point
   209    * (its first code unit).
   210    * @param position the position within the text-storage object
   211    * @return the code unit
   212    * @stable ICU 2.0
   213    */
   214   virtual UChar32       setIndex32(int32_t position);
   215 
   216   /**
   217    * Returns the code unit the iterator currently refers to.
   218    * @return the code unit the iterator currently refers to.
   219    * @stable ICU 2.0
   220    */
   221   virtual UChar         current(void) const;
   222 
   223   /**
   224    * Returns the code point the iterator currently refers to.
   225    * @return the code point the iterator currently refers to.
   226    * @stable ICU 2.0
   227    */
   228   virtual UChar32       current32(void) const;
   229 
   230   /**
   231    * Advances to the next code unit in the iteration range (toward
   232    * endIndex()), and returns that code unit.  If there are no more
   233    * code units to return, returns DONE.
   234    * @return the next code unit in the iteration range.
   235    * @stable ICU 2.0
   236    */
   237   virtual UChar         next(void);
   238 
   239   /**
   240    * Gets the current code unit for returning and advances to the next code unit
   241    * in the iteration range
   242    * (toward endIndex()).  If there are
   243    * no more code units to return, returns DONE.
   244    * @return the current code unit.
   245    * @stable ICU 2.0
   246    */
   247   virtual UChar         nextPostInc(void);
   248 
   249   /**
   250    * Advances to the next code point in the iteration range (toward
   251    * endIndex()), and returns that code point.  If there are no more
   252    * code points to return, returns DONE.
   253    * Note that iteration with "pre-increment" semantics is less
   254    * efficient than iteration with "post-increment" semantics
   255    * that is provided by next32PostInc().
   256    * @return the next code point in the iteration range.
   257    * @stable ICU 2.0
   258    */
   259   virtual UChar32       next32(void);
   260 
   261   /**
   262    * Gets the current code point for returning and advances to the next code point
   263    * in the iteration range
   264    * (toward endIndex()).  If there are
   265    * no more code points to return, returns DONE.
   266    * @return the current point.
   267    * @stable ICU 2.0
   268    */
   269   virtual UChar32       next32PostInc(void);
   270 
   271   /**
   272    * Returns FALSE if there are no more code units or code points
   273    * at or after the current position in the iteration range.
   274    * This is used with nextPostInc() or next32PostInc() in forward
   275    * iteration.
   276    * @return FALSE if there are no more code units or code points
   277    * at or after the current position in the iteration range.
   278    * @stable ICU 2.0
   279    */
   280   virtual UBool        hasNext();
   281 
   282   /**
   283    * Advances to the previous code unit in the iteration range (toward
   284    * startIndex()), and returns that code unit.  If there are no more
   285    * code units to return, returns DONE.
   286    * @return the previous code unit in the iteration range.
   287    * @stable ICU 2.0
   288    */
   289   virtual UChar         previous(void);
   290 
   291   /**
   292    * Advances to the previous code point in the iteration range (toward
   293    * startIndex()), and returns that code point.  If there are no more
   294    * code points to return, returns DONE.
   295    * @return the previous code point in the iteration range.
   296    * @stable ICU 2.0
   297    */
   298   virtual UChar32       previous32(void);
   299 
   300   /**
   301    * Returns FALSE if there are no more code units or code points
   302    * before the current position in the iteration range.
   303    * This is used with previous() or previous32() in backward
   304    * iteration.
   305    * @return FALSE if there are no more code units or code points
   306    * before the current position in the iteration range.
   307    * @stable ICU 2.0
   308    */
   309   virtual UBool        hasPrevious();
   310 
   311   /**
   312    * Moves the current position relative to the start or end of the
   313    * iteration range, or relative to the current position itself.
   314    * The movement is expressed in numbers of code units forward
   315    * or backward by specifying a positive or negative delta.
   316    * @param delta the position relative to origin. A positive delta means forward;
   317    * a negative delta means backward.
   318    * @param origin Origin enumeration {kStart, kCurrent, kEnd}
   319    * @return the new position
   320    * @stable ICU 2.0
   321    */
   322   virtual int32_t      move(int32_t delta, EOrigin origin);
   323 
   324   /**
   325    * Moves the current position relative to the start or end of the
   326    * iteration range, or relative to the current position itself.
   327    * The movement is expressed in numbers of code points forward
   328    * or backward by specifying a positive or negative delta.
   329    * @param delta the position relative to origin. A positive delta means forward;
   330    * a negative delta means backward.
   331    * @param origin Origin enumeration {kStart, kCurrent, kEnd}
   332    * @return the new position
   333    * @stable ICU 2.0
   334    */
   335   virtual int32_t      move32(int32_t delta, EOrigin origin);
   336 
   337   /**
   338    * Sets the iterator to iterate over a new range of text
   339    * @stable ICU 2.0
   340    */
   341   void setText(const UChar* newText, int32_t newTextLength);
   342 
   343   /**
   344    * Copies the UChar array under iteration into the UnicodeString
   345    * referred to by "result".  Even if this iterator iterates across
   346    * only a part of this string, the whole string is copied.
   347    * @param result Receives a copy of the text under iteration.
   348    * @stable ICU 2.0
   349    */
   350   virtual void            getText(UnicodeString& result);
   351 
   352   /**
   353    * Return a class ID for this class (not really public)
   354    * @return a class ID for this class
   355    * @stable ICU 2.0
   356    */
   357   static UClassID         U_EXPORT2 getStaticClassID(void);
   358 
   359   /**
   360    * Return a class ID for this object (not really public)
   361    * @return a class ID for this object.
   362    * @stable ICU 2.0
   363    */
   364   virtual UClassID        getDynamicClassID(void) const;
   365 
   366 protected:
   367   /**
   368    * Protected constructor
   369    * @stable ICU 2.0
   370    */
   371   UCharCharacterIterator();
   372   /**
   373    * Protected member text
   374    * @stable ICU 2.0
   375    */
   376   const UChar*            text;
   377 
   378 };
   379 
   380 U_NAMESPACE_END
   381 #endif