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