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