| /* |
| ******************************************************************************* |
| * Copyright (C) 1998-1999, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| |
| #include "unicode/uchriter.h" |
| |
| UCharCharacterIterator::UCharCharacterIterator(const UChar* text, |
| int32_t textLength) |
| : CharacterIterator(), |
| text(text), |
| pos(0), |
| begin(0), |
| end(textLength) |
| { |
| } |
| |
| UCharCharacterIterator::UCharCharacterIterator(const UCharCharacterIterator& that) |
| : CharacterIterator(that), |
| text(that.text), |
| pos(that.pos), |
| begin(that.begin), |
| end(that.end) |
| { |
| } |
| |
| UCharCharacterIterator& |
| UCharCharacterIterator::operator=(const UCharCharacterIterator& that) |
| { |
| text = that.text; |
| pos = that.pos; |
| begin = that.begin; |
| end = that.end; |
| return *this; |
| } |
| |
| UCharCharacterIterator::~UCharCharacterIterator() |
| {} |
| |
| bool_t |
| UCharCharacterIterator::operator==(const CharacterIterator& that) const |
| { |
| if (this == &that) |
| return TRUE; |
| |
| if (getDynamicClassID() != that.getDynamicClassID()) |
| return FALSE; |
| |
| UCharCharacterIterator& realThat = (UCharCharacterIterator&)that; |
| |
| return text == realThat.text |
| && pos == realThat.pos |
| && begin == realThat.begin |
| && end == realThat.end; |
| } |
| |
| int32_t |
| UCharCharacterIterator::hashCode() const |
| { |
| return pos ^ begin ^ end; |
| } |
| |
| CharacterIterator* |
| UCharCharacterIterator::clone() const |
| { |
| return new UCharCharacterIterator(*this); |
| } |
| |
| UChar |
| UCharCharacterIterator::first() |
| { |
| pos = begin; |
| return text[pos]; |
| } |
| |
| UChar |
| UCharCharacterIterator::last() |
| { |
| pos = end - 1; |
| return text[pos]; |
| } |
| |
| UChar |
| UCharCharacterIterator::setIndex(UTextOffset pos) |
| { |
| // should check "pos" here and return an error code, but changing this |
| // function would have significant impact across TIFC, so we decided to hold off |
| this->pos = pos; |
| return text[pos]; |
| } |
| |
| UChar |
| UCharCharacterIterator::current() const |
| { |
| if (pos >= begin && pos < end) |
| return text[pos]; |
| else |
| return CharacterIterator::DONE; |
| } |
| |
| UChar |
| UCharCharacterIterator::next() |
| { |
| if (pos < end - 1) |
| { |
| pos += 1; |
| return text[pos]; |
| } |
| else |
| { |
| pos = end; |
| return CharacterIterator::DONE; |
| } |
| } |
| |
| UChar |
| UCharCharacterIterator::previous() |
| { |
| if (pos > begin) |
| return text[--pos]; |
| else |
| return DONE; |
| } |
| |
| UTextOffset |
| UCharCharacterIterator::startIndex() const |
| { |
| return begin; |
| } |
| |
| UTextOffset |
| UCharCharacterIterator::endIndex() const |
| { |
| return end; |
| } |
| |
| UTextOffset |
| UCharCharacterIterator::getIndex() const |
| { |
| return pos; |
| } |
| |
| void UCharCharacterIterator::setText(const UChar* newText, |
| int32_t newTextLength) |
| { |
| text = newText; |
| begin = 0; |
| end = newTextLength; |
| pos = begin; |
| } |
| |
| void |
| UCharCharacterIterator::getText(UnicodeString& result) |
| { |
| result = UnicodeString(text, end); |
| } |
| |
| char UCharCharacterIterator::fgClassID = 0; |