00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef UNICODESET_H
00011 #define UNICODESET_H
00012
00013 #include "unicode/unifilt.h"
00014 #include "unicode/utypes.h"
00015 #include "unicode/unistr.h"
00016 #include "unicode/uchar.h"
00017 #include "unicode/uset.h"
00018
00019 U_NAMESPACE_BEGIN
00020
00021 class ParsePosition;
00022 class SymbolTable;
00023 class UVector;
00024 class CaseEquivClass;
00025 class RuleCharacterIterator;
00026
00258 class U_COMMON_API UnicodeSet : public UnicodeFilter {
00259
00260 int32_t len;
00261 int32_t capacity;
00262 int32_t bufferCapacity;
00263 UChar32* list;
00264 UChar32* buffer;
00265
00266 UVector* strings;
00267
00277 UnicodeString pat;
00278
00279 public:
00280
00285 #ifdef U_CYGWIN
00286 static U_COMMON_API const UChar32 MIN_VALUE;
00287 #else
00288 static const UChar32 MIN_VALUE;
00289 #endif
00290
00295 #ifdef U_CYGWIN
00296 static U_COMMON_API const UChar32 MAX_VALUE;
00297 #else
00298 static const UChar32 MAX_VALUE;
00299 #endif
00300
00301
00302
00303
00304
00305 public:
00306
00311 UnicodeSet();
00312
00321 UnicodeSet(UChar32 start, UChar32 end);
00322
00331 UnicodeSet(const UnicodeString& pattern,
00332 UErrorCode& status);
00333
00346 UnicodeSet(const UnicodeString& pattern,
00347 uint32_t options,
00348 const SymbolTable* symbols,
00349 UErrorCode& status);
00350
00364 UnicodeSet(const UnicodeString& pattern, ParsePosition& pos,
00365 uint32_t options,
00366 const SymbolTable* symbols,
00367 UErrorCode& status);
00368
00369 #ifdef U_USE_UNICODESET_DEPRECATES
00370
00376 UnicodeSet(int8_t category, UErrorCode& status);
00377 #endif
00378
00383 UnicodeSet(const UnicodeSet& o);
00384
00389 virtual ~UnicodeSet();
00390
00395 UnicodeSet& operator=(const UnicodeSet& o);
00396
00408 virtual UBool operator==(const UnicodeSet& o) const;
00409
00415 UBool operator!=(const UnicodeSet& o) const;
00416
00423 virtual UnicodeFunctor* clone() const;
00424
00432 virtual int32_t hashCode(void) const;
00433
00434
00435
00436
00437
00447 UnicodeSet& set(UChar32 start, UChar32 end);
00448
00454 static UBool resemblesPattern(const UnicodeString& pattern,
00455 int32_t pos);
00456
00468 virtual UnicodeSet& applyPattern(const UnicodeString& pattern,
00469 UErrorCode& status);
00470
00486 UnicodeSet& applyPattern(const UnicodeString& pattern,
00487 uint32_t options,
00488 const SymbolTable* symbols,
00489 UErrorCode& status);
00490
00521 UnicodeSet& applyPattern(const UnicodeString& pattern,
00522 ParsePosition& pos,
00523 uint32_t options,
00524 const SymbolTable* symbols,
00525 UErrorCode& status);
00526
00539 virtual UnicodeString& toPattern(UnicodeString& result,
00540 UBool escapeUnprintable = FALSE) const;
00541
00563 UnicodeSet& applyIntPropertyValue(UProperty prop,
00564 int32_t value,
00565 UErrorCode& ec);
00566
00594 UnicodeSet& applyPropertyAlias(const UnicodeString& prop,
00595 const UnicodeString& value,
00596 UErrorCode& ec);
00597
00605 virtual int32_t size(void) const;
00606
00613 virtual UBool isEmpty(void) const;
00614
00621 virtual UBool contains(UChar32 c) const;
00622
00631 virtual UBool contains(UChar32 start, UChar32 end) const;
00632
00640 UBool contains(const UnicodeString& s) const;
00641
00649 virtual UBool containsAll(const UnicodeSet& c) const;
00650
00658 UBool containsAll(const UnicodeString& s) const;
00659
00668 UBool containsNone(UChar32 start, UChar32 end) const;
00669
00677 UBool containsNone(const UnicodeSet& c) const;
00678
00686 UBool containsNone(const UnicodeString& s) const;
00687
00696 inline UBool containsSome(UChar32 start, UChar32 end) const;
00697
00705 inline UBool containsSome(const UnicodeSet& s) const;
00706
00714 inline UBool containsSome(const UnicodeString& s) const;
00715
00720 UMatchDegree matches(const Replaceable& text,
00721 int32_t& offset,
00722 int32_t limit,
00723 UBool incremental);
00724
00725 private:
00747 static int32_t matchRest(const Replaceable& text,
00748 int32_t start, int32_t limit,
00749 const UnicodeString& s);
00750
00760 int32_t findCodePoint(UChar32 c) const;
00761
00762 public:
00763
00771 void addMatchSetTo(UnicodeSet& toUnionTo) const;
00772
00781 int32_t indexOf(UChar32 c) const;
00782
00792 UChar32 charAt(int32_t index) const;
00793
00807 virtual UnicodeSet& add(UChar32 start, UChar32 end);
00808
00815 UnicodeSet& add(UChar32 c);
00816
00827 UnicodeSet& add(const UnicodeString& s);
00828
00829 private:
00835 static int32_t getSingleCP(const UnicodeString& s);
00836
00837 void _add(const UnicodeString& s);
00838
00839 public:
00847 UnicodeSet& addAll(const UnicodeString& s);
00848
00856 UnicodeSet& retainAll(const UnicodeString& s);
00857
00865 UnicodeSet& complementAll(const UnicodeString& s);
00866
00874 UnicodeSet& removeAll(const UnicodeString& s);
00875
00884 static UnicodeSet* createFrom(const UnicodeString& s);
00885
00886
00894 static UnicodeSet* createFromAll(const UnicodeString& s);
00895
00908 virtual UnicodeSet& retain(UChar32 start, UChar32 end);
00909
00910
00915 UnicodeSet& retain(UChar32 c);
00916
00929 virtual UnicodeSet& remove(UChar32 start, UChar32 end);
00930
00937 UnicodeSet& remove(UChar32 c);
00938
00947 UnicodeSet& remove(const UnicodeString& s);
00948
00955 virtual UnicodeSet& complement(void);
00956
00970 virtual UnicodeSet& complement(UChar32 start, UChar32 end);
00971
00978 UnicodeSet& complement(UChar32 c);
00979
00989 UnicodeSet& complement(const UnicodeString& s);
00990
01002 virtual UnicodeSet& addAll(const UnicodeSet& c);
01003
01014 virtual UnicodeSet& retainAll(const UnicodeSet& c);
01015
01026 virtual UnicodeSet& removeAll(const UnicodeSet& c);
01027
01037 virtual UnicodeSet& complementAll(const UnicodeSet& c);
01038
01044 virtual UnicodeSet& clear(void);
01045
01069 UnicodeSet& closeOver(int32_t attribute);
01070
01078 virtual int32_t getRangeCount(void) const;
01079
01087 virtual UChar32 getRangeStart(int32_t index) const;
01088
01096 virtual UChar32 getRangeEnd(int32_t index) const;
01097
01146 int32_t serialize(uint16_t *dest, int32_t destCapacity, UErrorCode& ec) const;
01147
01153 virtual UnicodeSet& compact();
01154
01166 static UClassID getStaticClassID(void);
01167
01176 virtual UClassID getDynamicClassID(void) const;
01177
01178 private:
01179
01180
01181
01182 friend class USetAccess;
01183
01184 int32_t getStringCount() const;
01185
01186 const UnicodeString* getString(int32_t index) const;
01187
01188
01189
01190
01191
01192 private:
01193
01199 virtual UBool matchesIndexValue(uint8_t v) const;
01200
01201 private:
01202
01203
01204
01205
01206
01207 void applyPattern(RuleCharacterIterator& chars,
01208 const SymbolTable* symbols,
01209 UnicodeString& rebuiltPat,
01210 uint32_t options,
01211 UErrorCode& ec);
01212
01213
01214
01215
01216
01217 void ensureCapacity(int32_t newLen);
01218
01219 void ensureBufferCapacity(int32_t newLen);
01220
01221 void swapBuffers(void);
01222
01223 UBool allocateStrings();
01224
01225 UnicodeString& _toPattern(UnicodeString& result,
01226 UBool escapeUnprintable) const;
01227
01228 UnicodeString& _generatePattern(UnicodeString& result,
01229 UBool escapeUnprintable) const;
01230
01231 static void _appendToPat(UnicodeString& buf, const UnicodeString& s, UBool escapeUnprintable);
01232
01233 static void _appendToPat(UnicodeString& buf, UChar32 c, UBool escapeUnprintable);
01234
01235
01236
01237
01238
01239 void exclusiveOr(const UChar32* other, int32_t otherLen, int8_t polarity);
01240
01241 void add(const UChar32* other, int32_t otherLen, int8_t polarity);
01242
01243 void retain(const UChar32* other, int32_t otherLen, int8_t polarity);
01244
01250 static UBool resemblesPropertyPattern(const UnicodeString& pattern,
01251 int32_t pos);
01252
01253 static UBool resemblesPropertyPattern(RuleCharacterIterator& chars,
01254 int32_t iterOpts);
01255
01294 UnicodeSet& applyPropertyPattern(const UnicodeString& pattern,
01295 ParsePosition& ppos,
01296 UErrorCode &ec);
01297
01298 void applyPropertyPattern(RuleCharacterIterator& chars,
01299 UnicodeString& rebuiltPat,
01300 UErrorCode& ec);
01301
01306 typedef UBool (*Filter)(UChar32 codePoint, void* context);
01307
01316 void applyFilter(Filter filter,
01317 void* context,
01318 UErrorCode &status);
01319
01324 static const UnicodeSet* getInclusions(UErrorCode &errorCode);
01325
01326 friend class UnicodeSetIterator;
01327
01328
01329
01330
01331
01332 void caseCloseOne(const UnicodeString& folded);
01333
01334 void caseCloseOne(const CaseEquivClass& c);
01335
01336 void caseCloseOne(UChar folded);
01337
01338 static const CaseEquivClass* getCaseMapOf(const UnicodeString& folded);
01339
01340 static const CaseEquivClass* getCaseMapOf(UChar folded);
01341 };
01342
01343 inline UBool UnicodeSet::operator!=(const UnicodeSet& o) const {
01344 return !operator==(o);
01345 }
01346
01347 inline UBool UnicodeSet::containsSome(UChar32 start, UChar32 end) const {
01348 return !containsNone(start, end);
01349 }
01350
01351 inline UBool UnicodeSet::containsSome(const UnicodeSet& s) const {
01352 return !containsNone(s);
01353 }
01354
01355 inline UBool UnicodeSet::containsSome(const UnicodeString& s) const {
01356 return !containsNone(s);
01357 }
01358
01359 U_NAMESPACE_END
01360
01361 #endif