]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/usetiter.cpp
ICU-8.11.tar.gz
[apple/icu.git] / icuSources / common / usetiter.cpp
index 75a75de4cce7ac9223d627e8199492191d2e7fce..44858ed46bd744ca475183dc07b97ca9ebabb430 100644 (file)
@@ -1,6 +1,6 @@
 /*
 **********************************************************************
-* Copyright (c) 2002-2003, International Business Machines
+* Copyright (c) 2002-2006, International Business Machines
 * Corporation and others.  All Rights Reserved.
 **********************************************************************
 */
@@ -18,6 +18,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UnicodeSetIterator)
  * @param set set to iterate over
  */
 UnicodeSetIterator::UnicodeSetIterator(const UnicodeSet& uSet) {
+    cpString  = NULL;
     reset(uSet);
 }
 
@@ -26,11 +27,12 @@ UnicodeSetIterator::UnicodeSetIterator(const UnicodeSet& uSet) {
  */
 UnicodeSetIterator::UnicodeSetIterator() {
     this->set = NULL;
+    cpString  = NULL;
     reset();
 }
 
 UnicodeSetIterator::~UnicodeSetIterator() {
-    // Nothing to do
+    delete cpString;
 }
 
 /**
@@ -45,11 +47,13 @@ UnicodeSetIterator::~UnicodeSetIterator() {
 UBool UnicodeSetIterator::next() {
     if (nextElement <= endElement) {
         codepoint = codepointEnd = nextElement++;
+        string = NULL;
         return TRUE;
     }
     if (range < endRange) {
         loadRange(++range);
         codepoint = codepointEnd = nextElement++;
+        string = NULL;
         return TRUE;
     }
 
@@ -71,6 +75,7 @@ UBool UnicodeSetIterator::next() {
  * <br>Note also that the codepointEnd is undefined after calling this method.
  */
 UBool UnicodeSetIterator::nextRange() {
+    string = NULL;
     if (nextElement <= endElement) {
         codepointEnd = endElement;
         codepoint = nextElement;
@@ -118,6 +123,7 @@ void UnicodeSetIterator::reset() {
         loadRange(range);
     }
     nextString = 0;
+    string = NULL;
 }
 
 void UnicodeSetIterator::loadRange(int32_t iRange) {
@@ -125,6 +131,20 @@ void UnicodeSetIterator::loadRange(int32_t iRange) {
     endElement = set->getRangeEnd(iRange);
 }
 
+
+const UnicodeString& UnicodeSetIterator::getString()  {
+    if (string==NULL && codepoint!=(UChar32)IS_STRING) {
+       if (cpString == NULL) {
+          cpString = new UnicodeString();
+       }
+       if (cpString != NULL) {
+          cpString->setTo((UChar32)codepoint);
+       }
+       string = cpString;
+    }
+    return *string;
+}
+
 U_NAMESPACE_END
 
 //eof