1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Copyright (C) 1999-2011, International Business Machines 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/chariter.h" 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator::~ForwardCharacterIterator() {} 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator::ForwardCharacterIterator() 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: UObject() 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{} 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator::ForwardCharacterIterator(const ForwardCharacterIterator &other) 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: UObject(other) 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{} 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator() 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(0), pos(0), begin(0), end(0) { 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(int32_t length) 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(length), pos(0), begin(0), end(length) { 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(textLength < 0) { 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru textLength = end = 0; 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(int32_t length, int32_t position) 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(length), pos(position), begin(0), end(length) { 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(textLength < 0) { 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru textLength = end = 0; 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(pos < 0) { 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = 0; 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(pos > end) { 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = end; 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position) 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru: textLength(length), pos(position), begin(textBegin), end(textEnd) { 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(textLength < 0) { 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru textLength = 0; 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(begin < 0) { 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru begin = 0; 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(begin > textLength) { 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru begin = textLength; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(end < begin) { 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru end = begin; 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(end > textLength) { 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru end = textLength; 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(pos < begin) { 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = begin; 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(pos > end) { 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = end; 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 6683a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusCharacterIterator::~CharacterIterator() {} 6783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::CharacterIterator(const CharacterIterator &that) : 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruForwardCharacterIterator(that), 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerutextLength(that.textLength), pos(that.pos), begin(that.begin), end(that.end) 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator & 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::operator=(const CharacterIterator &that) { 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ForwardCharacterIterator::operator=(that); 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru textLength = that.textLength; 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = that.pos; 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru begin = that.begin; 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru end = that.end; 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return *this; 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// implementing first[32]PostInc() directly in a subclass should be faster 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// but these implementations make subclassing a little easier 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUChar 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::firstPostInc(void) { 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru setToStart(); 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return nextPostInc(); 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUChar32 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCharacterIterator::first32PostInc(void) { 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru setToStart(); 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return next32PostInc(); 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 99