| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| /* |
| ********************************************************************** |
| * Copyright (C) 1999-2011, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| ********************************************************************** |
| */ |
| |
| #include "unicode/chariter.h" |
| |
| U_NAMESPACE_BEGIN |
| |
| ForwardCharacterIterator::~ForwardCharacterIterator() {} |
| ForwardCharacterIterator::ForwardCharacterIterator() |
| : UObject() |
| {} |
| ForwardCharacterIterator::ForwardCharacterIterator(const ForwardCharacterIterator &other) |
| : UObject(other) |
| {} |
| |
| |
| CharacterIterator::CharacterIterator() |
| : textLength(0), pos(0), begin(0), end(0) { |
| } |
| |
| CharacterIterator::CharacterIterator(int32_t length) |
| : textLength(length), pos(0), begin(0), end(length) { |
| if(textLength < 0) { |
| textLength = end = 0; |
| } |
| } |
| |
| CharacterIterator::CharacterIterator(int32_t length, int32_t position) |
| : textLength(length), pos(position), begin(0), end(length) { |
| if(textLength < 0) { |
| textLength = end = 0; |
| } |
| if(pos < 0) { |
| pos = 0; |
| } else if(pos > end) { |
| pos = end; |
| } |
| } |
| |
| CharacterIterator::CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position) |
| : textLength(length), pos(position), begin(textBegin), end(textEnd) { |
| if(textLength < 0) { |
| textLength = 0; |
| } |
| if(begin < 0) { |
| begin = 0; |
| } else if(begin > textLength) { |
| begin = textLength; |
| } |
| if(end < begin) { |
| end = begin; |
| } else if(end > textLength) { |
| end = textLength; |
| } |
| if(pos < begin) { |
| pos = begin; |
| } else if(pos > end) { |
| pos = end; |
| } |
| } |
| |
| CharacterIterator::~CharacterIterator() {} |
| |
| CharacterIterator::CharacterIterator(const CharacterIterator &that) : |
| ForwardCharacterIterator(that), |
| textLength(that.textLength), pos(that.pos), begin(that.begin), end(that.end) |
| { |
| } |
| |
| CharacterIterator & |
| CharacterIterator::operator=(const CharacterIterator &that) { |
| ForwardCharacterIterator::operator=(that); |
| textLength = that.textLength; |
| pos = that.pos; |
| begin = that.begin; |
| end = that.end; |
| return *this; |
| } |
| |
| // implementing first[32]PostInc() directly in a subclass should be faster |
| // but these implementations make subclassing a little easier |
| UChar |
| CharacterIterator::firstPostInc(void) { |
| setToStart(); |
| return nextPostInc(); |
| } |
| |
| UChar32 |
| CharacterIterator::first32PostInc(void) { |
| setToStart(); |
| return next32PostInc(); |
| } |
| |
| U_NAMESPACE_END |