/* ********************************************************************** * Copyright © {1999}, International Business Machines Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description * 10/20/99 alan Creation. ********************************************************************** */ #ifndef UNICODESET_H #define UNICODESET_H #include "unicode/unifilt.h" #include "unicode/utypes.h" #include "unicode/unistr.h" class ParsePosition; class TransliterationRuleData; class TransliterationRuleParser; class TransliterationRule; class U_I18N_API UnicodeSet : public UnicodeFilter { UnicodeString pairs; static const UnicodeString CATEGORY_NAMES; static UnicodeString* CATEGORY_PAIRS_CACHE; static const UnicodeString CATEGORY_CLOSE; static const UChar VARIABLE_REF_OPEN; static const UChar VARIABLE_REF_CLOSE; //---------------------------------------------------------------- // Debugging and testing //---------------------------------------------------------------- public: const UnicodeString& getPairs(void) const; //---------------------------------------------------------------- // Constructors &c //---------------------------------------------------------------- public: UnicodeSet(); UnicodeSet(const UnicodeString& pattern, UErrorCode& status); UnicodeSet(int8_t category, UErrorCode& status); UnicodeSet(const UnicodeSet& o); virtual ~UnicodeSet(); UnicodeSet& operator=(const UnicodeSet& o); virtual bool_t operator==(const UnicodeSet& o) const; bool_t operator!=(const UnicodeSet& o) const; virtual UnicodeFilter* clone() const; virtual int32_t hashCode(void) const; //---------------------------------------------------------------- // Public API //---------------------------------------------------------------- virtual void applyPattern(const UnicodeString& pattern, UErrorCode& status); virtual UnicodeString& toPattern(UnicodeString& result) const; virtual int32_t size(void) const; virtual bool_t isEmpty(void) const; virtual bool_t contains(UChar first, UChar last) const; virtual bool_t contains(UChar c) const; virtual void add(UChar first, UChar last); virtual void add(UChar c); virtual void remove(UChar first, UChar last); virtual void remove(UChar c); virtual bool_t containsAll(const UnicodeSet& c) const; virtual void addAll(const UnicodeSet& c); virtual void retainAll(const UnicodeSet& c); virtual void removeAll(const UnicodeSet& c); virtual void complement(void); virtual void clear(void); private: //---------------------------------------------------------------- // RuleBasedTransliterator support //---------------------------------------------------------------- friend class TransliterationRuleParser; friend class TransliterationRule; UnicodeSet(const UnicodeString& pattern, ParsePosition& pos, const TransliterationRuleData* data, UErrorCode& status); bool_t containsIndexValue(uint8_t v) const; private: //---------------------------------------------------------------- // Implementation: Pattern parsing //---------------------------------------------------------------- static UnicodeString& parse(UnicodeString& pairsBuf /*result*/, const UnicodeString& pattern, ParsePosition& pos, const TransliterationRuleData* data, UErrorCode& status); //---------------------------------------------------------------- // Implementation: Efficient in-place union & difference //---------------------------------------------------------------- static void addPair(UnicodeString& pairs, UChar c, UChar d); static void removePair(UnicodeString& pairs, UChar c, UChar d); //---------------------------------------------------------------- // Implementation: Fundamental operators //---------------------------------------------------------------- static void doComplement(UnicodeString& pairs); static void doUnion(UnicodeString& pairs, const UnicodeString& c2); static void doDifference(UnicodeString& pairs, const UnicodeString& pairs2); static void doIntersection(UnicodeString& pairs, const UnicodeString& c2); //---------------------------------------------------------------- // Implementation: Generation of pairs for Unicode categories //---------------------------------------------------------------- static UnicodeString& getCategoryPairs(UnicodeString& result, const UnicodeString& catName, UErrorCode& status); static const UnicodeString& getCategoryPairs(int8_t cat); //---------------------------------------------------------------- // Implementation: Utility methods //---------------------------------------------------------------- static UChar charAfter(const UnicodeString& str, int32_t i); }; inline bool_t UnicodeSet::operator!=(const UnicodeSet& o) const { return !operator==(o); } #endif