|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ********************************************************************** 00005 * Copyright (c) 2002-2014, International Business Machines 00006 * Corporation and others. All Rights Reserved. 00007 ********************************************************************** 00008 */ 00009 #ifndef USETITER_H 00010 #define USETITER_H 00011 00012 #include "unicode/utypes.h" 00013 00014 #if U_SHOW_CPLUSPLUS_API 00015 00016 #include "unicode/uobject.h" 00017 #include "unicode/unistr.h" 00018 00024 U_NAMESPACE_BEGIN 00025 00026 class UnicodeSet; 00027 class UnicodeString; 00028 00067 class U_COMMON_API UnicodeSetIterator final : public UObject { 00073 enum { IS_STRING = -1 }; 00074 00079 UChar32 codepoint; 00080 00089 UChar32 codepointEnd; 00090 00096 const UnicodeString* string; 00097 00098 public: 00099 00106 UnicodeSetIterator(const UnicodeSet& set); 00107 00114 UnicodeSetIterator(); 00115 00120 virtual ~UnicodeSetIterator(); 00121 00137 inline UBool isString() const; 00138 00144 inline UChar32 getCodepoint() const; 00145 00152 inline UChar32 getCodepointEnd() const; 00153 00165 const UnicodeString& getString(); 00166 00176 inline UnicodeSetIterator &skipToStrings() { 00177 // Finish code point/range iteration. 00178 range = endRange; 00179 endElement = -1; 00180 nextElement = 0; 00181 return *this; 00182 } 00183 00206 UBool next(); 00207 00227 UBool nextRange(); 00228 00236 void reset(const UnicodeSet& set); 00237 00242 void reset(); 00243 00249 static UClassID U_EXPORT2 getStaticClassID(); 00250 00256 virtual UClassID getDynamicClassID() const override; 00257 00258 // ======================= PRIVATES =========================== 00259 00260 private: 00261 00262 // endElement and nextElements are really UChar32's, but we keep 00263 // them as signed int32_t's so we can do comparisons with 00264 // endElement set to -1. Leave them as int32_t's. 00267 const UnicodeSet* set; 00270 int32_t endRange; 00273 int32_t range; 00276 int32_t endElement; 00279 int32_t nextElement; 00282 int32_t nextString; 00285 int32_t stringCount; 00286 00291 UnicodeString *cpString; 00292 00295 UnicodeSetIterator(const UnicodeSetIterator&) = delete; 00296 00299 UnicodeSetIterator& operator=(const UnicodeSetIterator&) = delete; 00300 00303 void loadRange(int32_t range); 00304 }; 00305 00306 inline UBool UnicodeSetIterator::isString() const { 00307 return codepoint < 0; 00308 } 00309 00310 inline UChar32 UnicodeSetIterator::getCodepoint() const { 00311 return codepoint; 00312 } 00313 00314 inline UChar32 UnicodeSetIterator::getCodepointEnd() const { 00315 return codepointEnd; 00316 } 00317 00318 00319 U_NAMESPACE_END 00320 00321 #endif /* U_SHOW_CPLUSPLUS_API */ 00322 00323 #endif
1.7.6.1