Home | History | Annotate | Download | only in common
      1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 ******************************************************************************
      5 * Copyright (C) 1998-2012, International Business Machines Corporation and
      6 * others. All Rights Reserved.
      7 ******************************************************************************
      8 *
      9 * File schriter.cpp
     10 *
     11 * Modification History:
     12 *
     13 *   Date        Name        Description
     14 *  05/05/99     stephen     Cleaned up.
     15 ******************************************************************************
     16 */
     17 
     18 #include "utypeinfo.h"  // for 'typeid' to work
     19 
     20 #include "unicode/chariter.h"
     21 #include "unicode/schriter.h"
     22 
     23 U_NAMESPACE_BEGIN
     24 
     25 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringCharacterIterator)
     26 
     27 StringCharacterIterator::StringCharacterIterator()
     28   : UCharCharacterIterator(),
     29     text()
     30 {
     31   // NEVER DEFAULT CONSTRUCT!
     32 }
     33 
     34 StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr)
     35   : UCharCharacterIterator(textStr.getBuffer(), textStr.length()),
     36     text(textStr)
     37 {
     38     // we had set the input parameter's array, now we need to set our copy's array
     39     UCharCharacterIterator::text = this->text.getBuffer();
     40 }
     41 
     42 StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr,
     43                                                  int32_t textPos)
     44   : UCharCharacterIterator(textStr.getBuffer(), textStr.length(), textPos),
     45     text(textStr)
     46 {
     47     // we had set the input parameter's array, now we need to set our copy's array
     48     UCharCharacterIterator::text = this->text.getBuffer();
     49 }
     50 
     51 StringCharacterIterator::StringCharacterIterator(const UnicodeString& textStr,
     52                                                  int32_t textBegin,
     53                                                  int32_t textEnd,
     54                                                  int32_t textPos)
     55   : UCharCharacterIterator(textStr.getBuffer(), textStr.length(), textBegin, textEnd, textPos),
     56     text(textStr)
     57 {
     58     // we had set the input parameter's array, now we need to set our copy's array
     59     UCharCharacterIterator::text = this->text.getBuffer();
     60 }
     61 
     62 StringCharacterIterator::StringCharacterIterator(const StringCharacterIterator& that)
     63   : UCharCharacterIterator(that),
     64     text(that.text)
     65 {
     66     // we had set the input parameter's array, now we need to set our copy's array
     67     UCharCharacterIterator::text = this->text.getBuffer();
     68 }
     69 
     70 StringCharacterIterator::~StringCharacterIterator() {
     71 }
     72 
     73 StringCharacterIterator&
     74 StringCharacterIterator::operator=(const StringCharacterIterator& that) {
     75     UCharCharacterIterator::operator=(that);
     76     text = that.text;
     77     // we had set the input parameter's array, now we need to set our copy's array
     78     UCharCharacterIterator::text = this->text.getBuffer();
     79     return *this;
     80 }
     81 
     82 UBool
     83 StringCharacterIterator::operator==(const ForwardCharacterIterator& that) const {
     84     if (this == &that) {
     85         return TRUE;
     86     }
     87 
     88     // do not call UCharCharacterIterator::operator==()
     89     // because that checks for array pointer equality
     90     // while we compare UnicodeString objects
     91 
     92     if (typeid(*this) != typeid(that)) {
     93         return FALSE;
     94     }
     95 
     96     StringCharacterIterator&    realThat = (StringCharacterIterator&)that;
     97 
     98     return text == realThat.text
     99         && pos == realThat.pos
    100         && begin == realThat.begin
    101         && end == realThat.end;
    102 }
    103 
    104 CharacterIterator*
    105 StringCharacterIterator::clone() const {
    106     return new StringCharacterIterator(*this);
    107 }
    108 
    109 void
    110 StringCharacterIterator::setText(const UnicodeString& newText) {
    111     text = newText;
    112     UCharCharacterIterator::setText(text.getBuffer(), text.length());
    113 }
    114 
    115 void
    116 StringCharacterIterator::getText(UnicodeString& result) {
    117     result = text;
    118 }
    119 U_NAMESPACE_END
    120