tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

uiter.h (23299B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 *******************************************************************************
      5 *
      6 *   Copyright (C) 2002-2011 International Business Machines
      7 *   Corporation and others.  All Rights Reserved.
      8 *
      9 *******************************************************************************
     10 *   file name:  uiter.h
     11 *   encoding:   UTF-8
     12 *   tab size:   8 (not used)
     13 *   indentation:4
     14 *
     15 *   created on: 2002jan18
     16 *   created by: Markus W. Scherer
     17 */
     18 
     19 #ifndef __UITER_H__
     20 #define __UITER_H__
     21 
     22 /**
     23 * \file
     24 * \brief C API: Unicode Character Iteration
     25 *
     26 * @see UCharIterator
     27 */
     28 
     29 #include "unicode/utypes.h"
     30 
     31 #if U_SHOW_CPLUSPLUS_API
     32    U_NAMESPACE_BEGIN
     33 
     34    class CharacterIterator;
     35    class Replaceable;
     36 
     37    U_NAMESPACE_END
     38 #endif
     39 
     40 U_CDECL_BEGIN
     41 
     42 struct UCharIterator;
     43 typedef struct UCharIterator UCharIterator; /**< C typedef for struct UCharIterator. @stable ICU 2.1 */
     44 
     45 /**
     46 * Origin constants for UCharIterator.getIndex() and UCharIterator.move().
     47 * @see UCharIteratorMove
     48 * @see UCharIterator
     49 * @stable ICU 2.1
     50 */
     51 typedef enum UCharIteratorOrigin {
     52    UITER_START, UITER_CURRENT, UITER_LIMIT, UITER_ZERO, UITER_LENGTH
     53 } UCharIteratorOrigin;
     54 
     55 /** Constants for UCharIterator. @stable ICU 2.6 */
     56 enum {
     57    /**
     58     * Constant value that may be returned by UCharIteratorMove
     59     * indicating that the final UTF-16 index is not known, but that the move succeeded.
     60     * This can occur when moving relative to limit or length, or
     61     * when moving relative to the current index after a setState()
     62     * when the current UTF-16 index is not known.
     63     *
     64     * It would be very inefficient to have to count from the beginning of the text
     65     * just to get the current/limit/length index after moving relative to it.
     66     * The actual index can be determined with getIndex(UITER_CURRENT)
     67     * which will count the UChars if necessary.
     68     *
     69     * @stable ICU 2.6
     70     */
     71    UITER_UNKNOWN_INDEX=-2
     72 };
     73 
     74 
     75 /**
     76 * Constant for UCharIterator getState() indicating an error or
     77 * an unknown state.
     78 * Returned by uiter_getState()/UCharIteratorGetState
     79 * when an error occurs.
     80 * Also, some UCharIterator implementations may not be able to return
     81 * a valid state for each position. This will be clearly documented
     82 * for each such iterator (none of the public ones here).
     83 *
     84 * @stable ICU 2.6
     85 */
     86 #define UITER_NO_STATE ((uint32_t)0xffffffff)
     87 
     88 /**
     89 * Function type declaration for UCharIterator.getIndex().
     90 *
     91 * Gets the current position, or the start or limit of the
     92 * iteration range.
     93 *
     94 * This function may perform slowly for UITER_CURRENT after setState() was called,
     95 * or for UITER_LENGTH, because an iterator implementation may have to count
     96 * UChars if the underlying storage is not UTF-16.
     97 *
     98 * @param iter the UCharIterator structure ("this pointer")
     99 * @param origin get the 0, start, limit, length, or current index
    100 * @return the requested index, or U_SENTINEL in an error condition
    101 *
    102 * @see UCharIteratorOrigin
    103 * @see UCharIterator
    104 * @stable ICU 2.1
    105 */
    106 typedef int32_t U_CALLCONV
    107 UCharIteratorGetIndex(UCharIterator *iter, UCharIteratorOrigin origin);
    108 
    109 /**
    110 * Function type declaration for UCharIterator.move().
    111 *
    112 * Use iter->move(iter, index, UITER_ZERO) like CharacterIterator::setIndex(index).
    113 *
    114 * Moves the current position relative to the start or limit of the
    115 * iteration range, or relative to the current position itself.
    116 * The movement is expressed in numbers of code units forward
    117 * or backward by specifying a positive or negative delta.
    118 * Out of bounds movement will be pinned to the start or limit.
    119 *
    120 * This function may perform slowly for moving relative to UITER_LENGTH
    121 * because an iterator implementation may have to count the rest of the
    122 * UChars if the native storage is not UTF-16.
    123 *
    124 * When moving relative to the limit or length, or
    125 * relative to the current position after setState() was called,
    126 * move() may return UITER_UNKNOWN_INDEX (-2) to avoid an inefficient
    127 * determination of the actual UTF-16 index.
    128 * The actual index can be determined with getIndex(UITER_CURRENT)
    129 * which will count the UChars if necessary.
    130 * See UITER_UNKNOWN_INDEX for details.
    131 *
    132 * @param iter the UCharIterator structure ("this pointer")
    133 * @param delta can be positive, zero, or negative
    134 * @param origin move relative to the 0, start, limit, length, or current index
    135 * @return the new index, or U_SENTINEL on an error condition,
    136 *         or UITER_UNKNOWN_INDEX when the index is not known.
    137 *
    138 * @see UCharIteratorOrigin
    139 * @see UCharIterator
    140 * @see UITER_UNKNOWN_INDEX
    141 * @stable ICU 2.1
    142 */
    143 typedef int32_t U_CALLCONV
    144 UCharIteratorMove(UCharIterator *iter, int32_t delta, UCharIteratorOrigin origin);
    145 
    146 /**
    147 * Function type declaration for UCharIterator.hasNext().
    148 *
    149 * Check if current() and next() can still
    150 * return another code unit.
    151 *
    152 * @param iter the UCharIterator structure ("this pointer")
    153 * @return boolean value for whether current() and next() can still return another code unit
    154 *
    155 * @see UCharIterator
    156 * @stable ICU 2.1
    157 */
    158 typedef UBool U_CALLCONV
    159 UCharIteratorHasNext(UCharIterator *iter);
    160 
    161 /**
    162 * Function type declaration for UCharIterator.hasPrevious().
    163 *
    164 * Check if previous() can still return another code unit.
    165 *
    166 * @param iter the UCharIterator structure ("this pointer")
    167 * @return boolean value for whether previous() can still return another code unit
    168 *
    169 * @see UCharIterator
    170 * @stable ICU 2.1
    171 */
    172 typedef UBool U_CALLCONV
    173 UCharIteratorHasPrevious(UCharIterator *iter);
    174 
    175 /**
    176 * Function type declaration for UCharIterator.current().
    177 *
    178 * Return the code unit at the current position,
    179 * or U_SENTINEL if there is none (index is at the limit).
    180 *
    181 * @param iter the UCharIterator structure ("this pointer")
    182 * @return the current code unit
    183 *
    184 * @see UCharIterator
    185 * @stable ICU 2.1
    186 */
    187 typedef UChar32 U_CALLCONV
    188 UCharIteratorCurrent(UCharIterator *iter);
    189 
    190 /**
    191 * Function type declaration for UCharIterator.next().
    192 *
    193 * Return the code unit at the current index and increment
    194 * the index (post-increment, like s[i++]),
    195 * or return U_SENTINEL if there is none (index is at the limit).
    196 *
    197 * @param iter the UCharIterator structure ("this pointer")
    198 * @return the current code unit (and post-increment the current index)
    199 *
    200 * @see UCharIterator
    201 * @stable ICU 2.1
    202 */
    203 typedef UChar32 U_CALLCONV
    204 UCharIteratorNext(UCharIterator *iter);
    205 
    206 /**
    207 * Function type declaration for UCharIterator.previous().
    208 *
    209 * Decrement the index and return the code unit from there
    210 * (pre-decrement, like s[--i]),
    211 * or return U_SENTINEL if there is none (index is at the start).
    212 *
    213 * @param iter the UCharIterator structure ("this pointer")
    214 * @return the previous code unit (after pre-decrementing the current index)
    215 *
    216 * @see UCharIterator
    217 * @stable ICU 2.1
    218 */
    219 typedef UChar32 U_CALLCONV
    220 UCharIteratorPrevious(UCharIterator *iter);
    221 
    222 /**
    223 * Function type declaration for UCharIterator.reservedFn().
    224 * Reserved for future use.
    225 *
    226 * @param iter the UCharIterator structure ("this pointer")
    227 * @param something some integer argument
    228 * @return some integer
    229 *
    230 * @see UCharIterator
    231 * @stable ICU 2.1
    232 */
    233 typedef int32_t U_CALLCONV
    234 UCharIteratorReserved(UCharIterator *iter, int32_t something);
    235 
    236 /**
    237 * Function type declaration for UCharIterator.getState().
    238 *
    239 * Get the "state" of the iterator in the form of a single 32-bit word.
    240 * It is recommended that the state value be calculated to be as small as
    241 * is feasible. For strings with limited lengths, fewer than 32 bits may
    242 * be sufficient.
    243 *
    244 * This is used together with setState()/UCharIteratorSetState
    245 * to save and restore the iterator position more efficiently than with
    246 * getIndex()/move().
    247 *
    248 * The iterator state is defined as a uint32_t value because it is designed
    249 * for use in ucol_nextSortKeyPart() which provides 32 bits to store the state
    250 * of the character iterator.
    251 *
    252 * With some UCharIterator implementations (e.g., UTF-8),
    253 * getting and setting the UTF-16 index with existing functions
    254 * (getIndex(UITER_CURRENT) followed by move(pos, UITER_ZERO)) is possible but
    255 * relatively slow because the iterator has to "walk" from a known index
    256 * to the requested one.
    257 * This takes more time the farther it needs to go.
    258 *
    259 * An opaque state value allows an iterator implementation to provide
    260 * an internal index (UTF-8: the source byte array index) for
    261 * fast, constant-time restoration.
    262 *
    263 * After calling setState(), a getIndex(UITER_CURRENT) may be slow because
    264 * the UTF-16 index may not be restored as well, but the iterator can deliver
    265 * the correct text contents and move relative to the current position
    266 * without performance degradation.
    267 *
    268 * Some UCharIterator implementations may not be able to return
    269 * a valid state for each position, in which case they return UITER_NO_STATE instead.
    270 * This will be clearly documented for each such iterator (none of the public ones here).
    271 *
    272 * @param iter the UCharIterator structure ("this pointer")
    273 * @return the state word
    274 *
    275 * @see UCharIterator
    276 * @see UCharIteratorSetState
    277 * @see UITER_NO_STATE
    278 * @stable ICU 2.6
    279 */
    280 typedef uint32_t U_CALLCONV
    281 UCharIteratorGetState(const UCharIterator *iter);
    282 
    283 /**
    284 * Function type declaration for UCharIterator.setState().
    285 *
    286 * Restore the "state" of the iterator using a state word from a getState() call.
    287 * The iterator object need not be the same one as for which getState() was called,
    288 * but it must be of the same type (set up using the same uiter_setXYZ function)
    289 * and it must iterate over the same string
    290 * (binary identical regardless of memory address).
    291 * For more about the state word see UCharIteratorGetState.
    292 *
    293 * After calling setState(), a getIndex(UITER_CURRENT) may be slow because
    294 * the UTF-16 index may not be restored as well, but the iterator can deliver
    295 * the correct text contents and move relative to the current position
    296 * without performance degradation.
    297 *
    298 * @param iter the UCharIterator structure ("this pointer")
    299 * @param state the state word from a getState() call
    300 *              on a same-type, same-string iterator
    301 * @param pErrorCode Must be a valid pointer to an error code value,
    302 *                   which must not indicate a failure before the function call.
    303 *
    304 * @see UCharIterator
    305 * @see UCharIteratorGetState
    306 * @stable ICU 2.6
    307 */
    308 typedef void U_CALLCONV
    309 UCharIteratorSetState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode);
    310 
    311 
    312 /**
    313 * C API for code unit iteration.
    314 * This can be used as a C wrapper around
    315 * CharacterIterator, Replaceable, or implemented using simple strings, etc.
    316 *
    317 * There are two roles for using UCharIterator:
    318 *
    319 * A "provider" sets the necessary function pointers and controls the "protected"
    320 * fields of the UCharIterator structure. A "provider" passes a UCharIterator
    321 * into C APIs that need a UCharIterator as an abstract, flexible string interface.
    322 *
    323 * Implementations of such C APIs are "callers" of UCharIterator functions;
    324 * they only use the "public" function pointers and never access the "protected"
    325 * fields directly.
    326 *
    327 * The current() and next() functions only check the current index against the
    328 * limit, and previous() only checks the current index against the start,
    329 * to see if the iterator already reached the end of the iteration range.
    330 *
    331 * The assumption - in all iterators - is that the index is moved via the API,
    332 * which means it won't go out of bounds, or the index is modified by
    333 * user code that knows enough about the iterator implementation to set valid
    334 * index values.
    335 *
    336 * UCharIterator functions return code unit values 0..0xffff,
    337 * or U_SENTINEL if the iteration bounds are reached.
    338 *
    339 * @stable ICU 2.1
    340 */
    341 struct UCharIterator {
    342    /**
    343     * (protected) Pointer to string or wrapped object or similar.
    344     * Not used by caller.
    345     * @stable ICU 2.1
    346     */
    347    const void *context;
    348 
    349    /**
    350     * (protected) Length of string or similar.
    351     * Not used by caller.
    352     * @stable ICU 2.1
    353     */
    354    int32_t length;
    355 
    356    /**
    357     * (protected) Start index or similar.
    358     * Not used by caller.
    359     * @stable ICU 2.1
    360     */
    361    int32_t start;
    362 
    363    /**
    364     * (protected) Current index or similar.
    365     * Not used by caller.
    366     * @stable ICU 2.1
    367     */
    368    int32_t index;
    369 
    370    /**
    371     * (protected) Limit index or similar.
    372     * Not used by caller.
    373     * @stable ICU 2.1
    374     */
    375    int32_t limit;
    376 
    377    /**
    378     * (protected) Used by UTF-8 iterators and possibly others.
    379     * @stable ICU 2.1
    380     */
    381    int32_t reservedField;
    382 
    383    /**
    384     * (public) Returns the current position or the
    385     * start or limit index of the iteration range.
    386     *
    387     * @see UCharIteratorGetIndex
    388     * @stable ICU 2.1
    389     */
    390    UCharIteratorGetIndex *getIndex;
    391 
    392    /**
    393     * (public) Moves the current position relative to the start or limit of the
    394     * iteration range, or relative to the current position itself.
    395     * The movement is expressed in numbers of code units forward
    396     * or backward by specifying a positive or negative delta.
    397     *
    398     * @see UCharIteratorMove
    399     * @stable ICU 2.1
    400     */
    401    UCharIteratorMove *move;
    402 
    403    /**
    404     * (public) Check if current() and next() can still
    405     * return another code unit.
    406     *
    407     * @see UCharIteratorHasNext
    408     * @stable ICU 2.1
    409     */
    410    UCharIteratorHasNext *hasNext;
    411 
    412    /**
    413     * (public) Check if previous() can still return another code unit.
    414     *
    415     * @see UCharIteratorHasPrevious
    416     * @stable ICU 2.1
    417     */
    418    UCharIteratorHasPrevious *hasPrevious;
    419 
    420    /**
    421     * (public) Return the code unit at the current position,
    422     * or U_SENTINEL if there is none (index is at the limit).
    423     *
    424     * @see UCharIteratorCurrent
    425     * @stable ICU 2.1
    426     */
    427    UCharIteratorCurrent *current;
    428 
    429    /**
    430     * (public) Return the code unit at the current index and increment
    431     * the index (post-increment, like s[i++]),
    432     * or return U_SENTINEL if there is none (index is at the limit).
    433     *
    434     * @see UCharIteratorNext
    435     * @stable ICU 2.1
    436     */
    437    UCharIteratorNext *next;
    438 
    439    /**
    440     * (public) Decrement the index and return the code unit from there
    441     * (pre-decrement, like s[--i]),
    442     * or return U_SENTINEL if there is none (index is at the start).
    443     *
    444     * @see UCharIteratorPrevious
    445     * @stable ICU 2.1
    446     */
    447    UCharIteratorPrevious *previous;
    448 
    449    /**
    450     * (public) Reserved for future use. Currently NULL.
    451     *
    452     * @see UCharIteratorReserved
    453     * @stable ICU 2.1
    454     */
    455    UCharIteratorReserved *reservedFn;
    456 
    457    /**
    458     * (public) Return the state of the iterator, to be restored later with setState().
    459     * This function pointer is NULL if the iterator does not implement it.
    460     *
    461     * @see UCharIteratorGet
    462     * @stable ICU 2.6
    463     */
    464    UCharIteratorGetState *getState;
    465 
    466    /**
    467     * (public) Restore the iterator state from the state word from a call
    468     * to getState().
    469     * This function pointer is NULL if the iterator does not implement it.
    470     *
    471     * @see UCharIteratorSet
    472     * @stable ICU 2.6
    473     */
    474    UCharIteratorSetState *setState;
    475 };
    476 
    477 /**
    478 * Helper function for UCharIterator to get the code point
    479 * at the current index.
    480 *
    481 * Return the code point that includes the code unit at the current position,
    482 * or U_SENTINEL if there is none (index is at the limit).
    483 * If the current code unit is a lead or trail surrogate,
    484 * then the following or preceding surrogate is used to form
    485 * the code point value.
    486 *
    487 * @param iter the UCharIterator structure ("this pointer")
    488 * @return the current code point
    489 *
    490 * @see UCharIterator
    491 * @see U16_GET
    492 * @see UnicodeString::char32At()
    493 * @stable ICU 2.1
    494 */
    495 U_CAPI UChar32 U_EXPORT2
    496 uiter_current32(UCharIterator *iter);
    497 
    498 /**
    499 * Helper function for UCharIterator to get the next code point.
    500 *
    501 * Return the code point at the current index and increment
    502 * the index (post-increment, like s[i++]),
    503 * or return U_SENTINEL if there is none (index is at the limit).
    504 *
    505 * @param iter the UCharIterator structure ("this pointer")
    506 * @return the current code point (and post-increment the current index)
    507 *
    508 * @see UCharIterator
    509 * @see U16_NEXT
    510 * @stable ICU 2.1
    511 */
    512 U_CAPI UChar32 U_EXPORT2
    513 uiter_next32(UCharIterator *iter);
    514 
    515 /**
    516 * Helper function for UCharIterator to get the previous code point.
    517 *
    518 * Decrement the index and return the code point from there
    519 * (pre-decrement, like s[--i]),
    520 * or return U_SENTINEL if there is none (index is at the start).
    521 *
    522 * @param iter the UCharIterator structure ("this pointer")
    523 * @return the previous code point (after pre-decrementing the current index)
    524 *
    525 * @see UCharIterator
    526 * @see U16_PREV
    527 * @stable ICU 2.1
    528 */
    529 U_CAPI UChar32 U_EXPORT2
    530 uiter_previous32(UCharIterator *iter);
    531 
    532 /**
    533 * Get the "state" of the iterator in the form of a single 32-bit word.
    534 * This is a convenience function that calls iter->getState(iter)
    535 * if iter->getState is not NULL;
    536 * if it is NULL or any other error occurs, then UITER_NO_STATE is returned.
    537 *
    538 * Some UCharIterator implementations may not be able to return
    539 * a valid state for each position, in which case they return UITER_NO_STATE instead.
    540 * This will be clearly documented for each such iterator (none of the public ones here).
    541 *
    542 * @param iter the UCharIterator structure ("this pointer")
    543 * @return the state word
    544 *
    545 * @see UCharIterator
    546 * @see UCharIteratorGetState
    547 * @see UITER_NO_STATE
    548 * @stable ICU 2.6
    549 */
    550 U_CAPI uint32_t U_EXPORT2
    551 uiter_getState(const UCharIterator *iter);
    552 
    553 /**
    554 * Restore the "state" of the iterator using a state word from a getState() call.
    555 * This is a convenience function that calls iter->setState(iter, state, pErrorCode)
    556 * if iter->setState is not NULL; if it is NULL, then U_UNSUPPORTED_ERROR is set.
    557 *
    558 * @param iter the UCharIterator structure ("this pointer")
    559 * @param state the state word from a getState() call
    560 *              on a same-type, same-string iterator
    561 * @param pErrorCode Must be a valid pointer to an error code value,
    562 *                   which must not indicate a failure before the function call.
    563 *
    564 * @see UCharIterator
    565 * @see UCharIteratorSetState
    566 * @stable ICU 2.6
    567 */
    568 U_CAPI void U_EXPORT2
    569 uiter_setState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode);
    570 
    571 /**
    572 * Set up a UCharIterator to iterate over a string.
    573 *
    574 * Sets the UCharIterator function pointers for iteration over the string s
    575 * with iteration boundaries start=index=0 and length=limit=string length.
    576 * The "provider" may set the start, index, and limit values at any time
    577 * within the range 0..length.
    578 * The length field will be ignored.
    579 *
    580 * The string pointer s is set into UCharIterator.context without copying
    581 * or reallocating the string contents.
    582 *
    583 * getState() simply returns the current index.
    584 * move() will always return the final index.
    585 *
    586 * @param iter UCharIterator structure to be set for iteration
    587 * @param s String to iterate over
    588 * @param length Length of s, or -1 if NUL-terminated
    589 *
    590 * @see UCharIterator
    591 * @stable ICU 2.1
    592 */
    593 U_CAPI void U_EXPORT2
    594 uiter_setString(UCharIterator *iter, const UChar *s, int32_t length);
    595 
    596 /**
    597 * Set up a UCharIterator to iterate over a UTF-16BE string
    598 * (byte vector with a big-endian pair of bytes per UChar).
    599 *
    600 * Everything works just like with a normal UChar iterator (uiter_setString),
    601 * except that UChars are assembled from byte pairs,
    602 * and that the length argument here indicates an even number of bytes.
    603 *
    604 * getState() simply returns the current index.
    605 * move() will always return the final index.
    606 *
    607 * @param iter UCharIterator structure to be set for iteration
    608 * @param s UTF-16BE string to iterate over
    609 * @param length Length of s as an even number of bytes, or -1 if NUL-terminated
    610 *               (NUL means pair of 0 bytes at even index from s)
    611 *
    612 * @see UCharIterator
    613 * @see uiter_setString
    614 * @stable ICU 2.6
    615 */
    616 U_CAPI void U_EXPORT2
    617 uiter_setUTF16BE(UCharIterator *iter, const char *s, int32_t length);
    618 
    619 /**
    620 * Set up a UCharIterator to iterate over a UTF-8 string.
    621 *
    622 * Sets the UCharIterator function pointers for iteration over the UTF-8 string s
    623 * with UTF-8 iteration boundaries 0 and length.
    624 * The implementation counts the UTF-16 index on the fly and
    625 * lazily evaluates the UTF-16 length of the text.
    626 *
    627 * The start field is used as the UTF-8 offset, the limit field as the UTF-8 length.
    628 * When the reservedField is not 0, then it contains a supplementary code point
    629 * and the UTF-16 index is between the two corresponding surrogates.
    630 * At that point, the UTF-8 index is behind that code point.
    631 *
    632 * The UTF-8 string pointer s is set into UCharIterator.context without copying
    633 * or reallocating the string contents.
    634 *
    635 * getState() returns a state value consisting of
    636 * - the current UTF-8 source byte index (bits 31..1)
    637 * - a flag (bit 0) that indicates whether the UChar position is in the middle
    638 *   of a surrogate pair
    639 *   (from a 4-byte UTF-8 sequence for the corresponding supplementary code point)
    640 *
    641 * getState() cannot also encode the UTF-16 index in the state value.
    642 * move(relative to limit or length), or
    643 * move(relative to current) after setState(), may return UITER_UNKNOWN_INDEX.
    644 *
    645 * @param iter UCharIterator structure to be set for iteration
    646 * @param s UTF-8 string to iterate over
    647 * @param length Length of s in bytes, or -1 if NUL-terminated
    648 *
    649 * @see UCharIterator
    650 * @stable ICU 2.6
    651 */
    652 U_CAPI void U_EXPORT2
    653 uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length);
    654 
    655 #if U_SHOW_CPLUSPLUS_API
    656 
    657 /**
    658 * Set up a UCharIterator to wrap around a C++ CharacterIterator.
    659 *
    660 * Sets the UCharIterator function pointers for iteration using the
    661 * CharacterIterator charIter.
    662 *
    663 * The CharacterIterator pointer charIter is set into UCharIterator.context
    664 * without copying or cloning the CharacterIterator object.
    665 * The other "protected" UCharIterator fields are set to 0 and will be ignored.
    666 * The iteration index and boundaries are controlled by the CharacterIterator.
    667 *
    668 * getState() simply returns the current index.
    669 * move() will always return the final index.
    670 *
    671 * @param iter UCharIterator structure to be set for iteration
    672 * @param charIter CharacterIterator to wrap
    673 *
    674 * @see UCharIterator
    675 * @stable ICU 2.1
    676 */
    677 U_CAPI void U_EXPORT2
    678 uiter_setCharacterIterator(UCharIterator *iter, icu::CharacterIterator *charIter);
    679 
    680 /**
    681 * Set up a UCharIterator to iterate over a C++ Replaceable.
    682 *
    683 * Sets the UCharIterator function pointers for iteration over the
    684 * Replaceable rep with iteration boundaries start=index=0 and
    685 * length=limit=rep->length().
    686 * The "provider" may set the start, index, and limit values at any time
    687 * within the range 0..length=rep->length().
    688 * The length field will be ignored.
    689 *
    690 * The Replaceable pointer rep is set into UCharIterator.context without copying
    691 * or cloning/reallocating the Replaceable object.
    692 *
    693 * getState() simply returns the current index.
    694 * move() will always return the final index.
    695 *
    696 * @param iter UCharIterator structure to be set for iteration
    697 * @param rep Replaceable to iterate over
    698 *
    699 * @see UCharIterator
    700 * @stable ICU 2.1
    701 */
    702 U_CAPI void U_EXPORT2
    703 uiter_setReplaceable(UCharIterator *iter, const icu::Replaceable *rep);
    704 
    705 #endif
    706 
    707 U_CDECL_END
    708 
    709 #endif