16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1998-2012, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "utypeinfo.h" // for 'typeid' to work 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uchriter.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utf16.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ustr_imp.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUOBJECT_DEFINE_RTTI_IMPLEMENTATION(UCharCharacterIterator) 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::UCharCharacterIterator() 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : CharacterIterator(), 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text(0) 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // never default construct! 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::UCharCharacterIterator(const UChar* textPtr, 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : CharacterIterator(textPtr != 0 ? (length>=0 ? length : u_strlen(textPtr)) : 0), 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text(textPtr) 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::UCharCharacterIterator(const UChar* textPtr, 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t position) 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : CharacterIterator(textPtr != 0 ? (length>=0 ? length : u_strlen(textPtr)) : 0, position), 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text(textPtr) 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::UCharCharacterIterator(const UChar* textPtr, 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textBegin, 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textEnd, 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t position) 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : CharacterIterator(textPtr != 0 ? (length>=0 ? length : u_strlen(textPtr)) : 0, textBegin, textEnd, position), 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text(textPtr) 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::UCharCharacterIterator(const UCharCharacterIterator& that) 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: CharacterIterator(that), 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text(that.text) 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator& 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::operator=(const UCharCharacterIterator& that) { 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharacterIterator::operator=(that); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text = that.text; 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *this; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::~UCharCharacterIterator() { 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::operator==(const ForwardCharacterIterator& that) const { 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (this == &that) { 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (typeid(*this) != typeid(that)) { 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCharCharacterIterator& realThat = (UCharCharacterIterator&)that; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text == realThat.text 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && textLength == realThat.textLength 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && pos == realThat.pos 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && begin == realThat.begin 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && end == realThat.end; 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::hashCode() const { 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ustr_hashUCharsN(text, textLength) ^ pos ^ begin ^ end; 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCharacterIterator* 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::clone() const { 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return new UCharCharacterIterator(*this); 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::first() { 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos < end) { 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[pos]; 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::firstPostInc() { 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos < end) { 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[pos++]; 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::last() { 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end; 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos > begin) { 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[--pos]; 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::setIndex(int32_t position) { 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(position < begin) { 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin; 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(position > end) { 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end; 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = position; 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos < end) { 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[pos]; 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::current() const { 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos >= begin && pos < end) { 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[pos]; 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::next() { 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos + 1 < end) { 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[++pos]; 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* make current() return DONE */ 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end; 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::nextPostInc() { 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos < end) { 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[pos++]; 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::hasNext() { 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UBool)(pos < end ? TRUE : FALSE); 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::previous() { 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos > begin) { 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text[--pos]; 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::hasPrevious() { 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UBool)(pos > begin ? TRUE : FALSE); 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::first32() { 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos < end) { 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = pos; 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_NEXT(text, i, end, c); 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::first32PostInc() { 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin; 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos < end) { 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_NEXT(text, pos, end, c); 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::last32() { 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end; 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos > begin) { 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_PREV(text, begin, pos, c); 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::setIndex32(int32_t position) { 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(position < begin) { 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org position = begin; 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(position > end) { 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org position = end; 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(position < end) { 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_SET_CP_START(text, begin, position); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = this->pos = position; 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_NEXT(text, i, end, c); 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org this->pos = position; 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::current32() const { 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos >= begin && pos < end) { 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_GET(text, begin, pos, end, c); 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::next32() { 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos < end) { 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_FWD_1(text, pos, end); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos < end) { 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = pos; 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_NEXT(text, i, end, c); 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* make current() return DONE */ 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end; 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::next32PostInc() { 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos < end) { 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_NEXT(text, pos, end, c); 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUChar32 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::previous32() { 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos > begin) { 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_PREV(text, begin, pos, c); 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return c; 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DONE; 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::move(int32_t delta, CharacterIterator::EOrigin origin) { 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(origin) { 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case kStart: 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin + delta; 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case kCurrent: 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos += delta; 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case kEnd: 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end + delta; 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos < begin) { 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin; 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(pos > end) { 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end; 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return pos; 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::move32(int32_t delta, CharacterIterator::EOrigin origin) { 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // this implementation relies on the "safe" version of the UTF macros 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // (or the trustworthiness of the caller) 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(origin) { 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case kStart: 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin; 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(delta > 0) { 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_FWD_N(text, pos, end, delta); 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case kCurrent: 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(delta > 0) { 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_FWD_N(text, pos, end, delta); 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_BACK_N(text, begin, pos, -delta); 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case kEnd: 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = end; 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(delta < 0) { 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_BACK_N(text, begin, pos, -delta); 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return pos; 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid UCharCharacterIterator::setText(const UChar* newText, 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t newTextLength) { 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text = newText; 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(newText == 0 || newTextLength < 0) { 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org newTextLength = 0; 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org end = textLength = newTextLength; 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = begin = 0; 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUCharCharacterIterator::getText(UnicodeString& result) { 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = UnicodeString(text, textLength); 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 366