| /* |
| ******************************************************************************* |
| * Copyright (C) 1998-1999, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| * |
| * File schriter.cpp |
| * |
| * Modification History: |
| * |
| * Date Name Description |
| * 05/05/99 stephen Cleaned up. |
| ******************************************************************************* |
| */ |
| |
| #include "unicode/chariter.h" |
| #include "unicode/schriter.h" |
| |
| |
| UClassID StringCharacterIterator::fgClassID = 0; |
| |
| StringCharacterIterator::StringCharacterIterator() |
| : CharacterIterator(), |
| text(), |
| pos(0), |
| begin(0), |
| end(0) |
| { |
| // NEVER DEFAULT CONSTRUCT! |
| } |
| |
| StringCharacterIterator::StringCharacterIterator(const UnicodeString& text) |
| : CharacterIterator(), |
| text(text), |
| pos(0), |
| begin(0), |
| end(text.length()) |
| {} |
| |
| StringCharacterIterator::StringCharacterIterator(const UnicodeString& text, |
| UTextOffset pos) |
| : CharacterIterator(), |
| text(text), |
| pos(pos), |
| begin(0), |
| end(text.length()) |
| { |
| // the Java code checks the parameters and throws exceptions we've |
| // decided to punt on this for the time being because changing this |
| // constructor to accept an error code is an API change with |
| // significant impact |
| } |
| |
| StringCharacterIterator::StringCharacterIterator(const UnicodeString& text, |
| UTextOffset begin, |
| UTextOffset end, |
| UTextOffset pos) |
| : CharacterIterator(), |
| text(text), |
| pos(pos), |
| begin(begin), |
| end(end) |
| { |
| // the Java code checks the parameters and throws exceptions we've |
| // decided to punt on this for the time being because changing this |
| // constructor to accept an error code is an API change with |
| // significant impact |
| } |
| |
| StringCharacterIterator::StringCharacterIterator(const StringCharacterIterator& that) |
| : CharacterIterator(that), |
| text(that.text), |
| pos(that.pos), |
| begin(that.begin), |
| end(that.end) |
| { |
| } |
| |
| StringCharacterIterator::~StringCharacterIterator() |
| {} |
| |
| StringCharacterIterator& |
| StringCharacterIterator::operator=(const StringCharacterIterator& that) |
| { |
| text = that.text; |
| pos = that.pos; |
| begin = that.begin; |
| end = that.end; |
| return *this; |
| } |
| |
| bool_t |
| StringCharacterIterator::operator==(const CharacterIterator& that) const |
| { |
| if (this == &that) |
| return TRUE; |
| |
| if (getDynamicClassID() != that.getDynamicClassID()) |
| return FALSE; |
| |
| StringCharacterIterator& realThat = (StringCharacterIterator&)that; |
| |
| return text == realThat.text |
| && pos == realThat.pos |
| && begin == realThat.begin |
| && end == realThat.end; |
| } |
| |
| int32_t |
| StringCharacterIterator::hashCode() const |
| { |
| return text.hashCode() ^ pos ^ begin ^ end; |
| } |
| |
| CharacterIterator* |
| StringCharacterIterator::clone() const |
| { |
| return new StringCharacterIterator(*this); |
| } |
| |
| UChar |
| StringCharacterIterator::first() |
| { |
| pos = begin; |
| return text.charAt(pos); |
| } |
| |
| UChar |
| StringCharacterIterator::last() |
| { |
| pos = end - 1; |
| return text.charAt(pos); |
| } |
| |
| UChar |
| StringCharacterIterator::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.charAt(pos); |
| } |
| |
| UChar |
| StringCharacterIterator::current() const |
| { |
| if (pos >= begin && pos < end) |
| return text.charAt(pos); |
| else |
| return CharacterIterator::DONE; |
| } |
| |
| UChar |
| StringCharacterIterator::next() |
| { |
| if(pos < end - 1) { |
| return text.charAt(++pos); |
| } |
| else { |
| pos = end; |
| return CharacterIterator::DONE; |
| } |
| } |
| |
| UChar |
| StringCharacterIterator::previous() |
| { |
| if (pos > begin) |
| return text.charAt(--pos); |
| else |
| return DONE; |
| } |
| |
| UTextOffset |
| StringCharacterIterator::startIndex() const |
| { |
| return begin; |
| } |
| |
| UTextOffset |
| StringCharacterIterator::endIndex() const |
| { |
| return end; |
| } |
| |
| UTextOffset |
| StringCharacterIterator::getIndex() const |
| { |
| return pos; |
| } |
| |
| void |
| StringCharacterIterator::setText(const UnicodeString& newText) |
| { |
| text = newText; |
| begin = 0; |
| end = newText.length(); |
| pos = begin; |
| } |
| |
| void |
| StringCharacterIterator::getText(UnicodeString& result) |
| { |
| result = text; |
| } |
| |