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