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