| /* |
| ******************************************************************************* |
| * * |
| * COPYRIGHT: * |
| * (C) Copyright International Business Machines Corporation, 1998-1999 * |
| * Licensed Material - Program-Property of IBM - All Rights Reserved. * |
| * US Government Users Restricted Rights - Use, duplication, or disclosure * |
| * restricted by GSA ADP Schedule Contract with IBM Corp. * |
| * * |
| ******************************************************************************* |
| */ |
| |
| #include "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::getText(UnicodeString& result) |
| { |
| result = UnicodeString(text, end); |
| } |
| |
| char UCharCharacterIterator::fgClassID = 0; |