Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

uniset.h

00001 /*
00002 **********************************************************************
00003 * Copyright (C) 1999, International Business Machines Corporation and others. All Rights Reserved.
00004 **********************************************************************
00005 *   Date        Name        Description
00006 *   10/20/99    alan        Creation.
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 
00017 U_NAMESPACE_BEGIN
00018 
00019 class ParsePosition;
00020 class SymbolTable;
00021 class TransliterationRuleParser;
00022 class TransliterationRule;
00023 class Transliterator;
00024 class TransliteratorParser;
00025 
00217 class U_I18N_API UnicodeSet : public UnicodeFilter {
00218 
00219     int32_t len; // length of list used; 0 <= len <= capacity
00220     int32_t capacity; // capacity of list
00221     int32_t bufferCapacity; // capacity of buffer
00222     UChar32* list; // MUST be terminated with HIGH
00223     UChar32* buffer; // internal buffer, may be NULL
00224 
00234     UnicodeString pat;
00235 
00236 public:
00237 
00241     static const UChar32 MIN_VALUE;
00242 
00246     static const UChar32 MAX_VALUE;
00247 
00248     //----------------------------------------------------------------
00249     // Constructors &c
00250     //----------------------------------------------------------------
00251 
00252 public:
00253 
00258     UnicodeSet();
00259 
00267     UnicodeSet(UChar32 start, UChar32 end);
00268 
00277     UnicodeSet(const UnicodeString& pattern,
00278                UErrorCode& status);
00279 
00286     UnicodeSet(int8_t category, UErrorCode& status);
00287 
00292     UnicodeSet(const UnicodeSet& o);
00293 
00298     virtual ~UnicodeSet();
00299 
00304     UnicodeSet& operator=(const UnicodeSet& o);
00305 
00317     virtual UBool operator==(const UnicodeSet& o) const;
00318 
00324     UBool operator!=(const UnicodeSet& o) const;
00325 
00332     virtual UnicodeFunctor* clone() const;
00333 
00341     virtual int32_t hashCode(void) const;
00342 
00343     //----------------------------------------------------------------
00344     // Public API
00345     //----------------------------------------------------------------
00346 
00355     void set(UChar32 start, UChar32 end);
00356 
00361     static UBool resemblesPattern(const UnicodeString& pattern,
00362                                   int32_t pos);
00363 
00373     virtual void applyPattern(const UnicodeString& pattern,
00374                               UErrorCode& status);
00375 
00388     virtual UnicodeString& toPattern(UnicodeString& result,
00389                                      UBool escapeUnprintable = FALSE) const;
00390 
00398     virtual int32_t size(void) const;
00399 
00406     virtual UBool isEmpty(void) const;
00407 
00416     virtual UBool contains(UChar32 start, UChar32 end) const;
00417 
00424     virtual UBool contains(UChar32 c) const;
00425 
00429     UMatchDegree matches(const Replaceable& text,
00430                          int32_t& offset,
00431                          int32_t limit,
00432                          UBool incremental);
00433     
00441     int32_t indexOf(UChar32 c) const;
00442 
00451     UChar32 charAt(int32_t index) const;
00452 
00466     virtual void add(UChar32 start, UChar32 end);
00467 
00474     void add(UChar32 c);
00475 
00488     virtual void retain(UChar32 start, UChar32 end);
00489 
00490 
00495     void retain(UChar32 c);
00496 
00509     virtual void remove(UChar32 start, UChar32 end);
00510 
00517     void remove(UChar32 c);
00518 
00525     virtual void complement(void);
00526 
00540     virtual void complement(UChar32 start, UChar32 end);
00541 
00542 
00549     void complement(UChar32 c);
00550 
00560     virtual UBool containsAll(const UnicodeSet& c) const;
00561 
00562  private:
00563     friend class NormalizationTransliterator;
00564     // TODO: Make this public
00568     UBool containsAll(const UnicodeString& s) const;
00569 
00570  public:
00571 
00583     virtual void addAll(const UnicodeSet& c);
00584 
00595     virtual void retainAll(const UnicodeSet& c);
00596 
00607     virtual void removeAll(const UnicodeSet& c);
00608 
00617     virtual void complementAll(const UnicodeSet& c);
00618 
00624     virtual void clear(void);
00625 
00632     virtual int32_t getRangeCount(void) const;
00633 
00640     virtual UChar32 getRangeStart(int32_t index) const;
00641 
00648     virtual UChar32 getRangeEnd(int32_t index) const;
00649 
00654     virtual void compact();
00655 
00667     static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00668 
00676     virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); };
00677 
00678 private:
00679 
00680     static const char fgClassID;
00681 
00682 private:
00683 
00684     //----------------------------------------------------------------
00685     // RuleBasedTransliterator support
00686     //----------------------------------------------------------------
00687 
00688     friend class Transliterator;
00689     friend class TransliteratorParser;
00690     friend class TransliteratorIDParser;
00691     friend class TransliterationRule;
00692 
00711     UnicodeSet(const UnicodeString& pattern, ParsePosition& pos,
00712                const SymbolTable& symbols,
00713                UErrorCode& status);
00714 
00720     UnicodeSet(const UnicodeString& pattern, ParsePosition& pos,
00721                UErrorCode& status);
00722 
00728     virtual UBool matchesIndexValue(uint8_t v) const;
00729 
00730 private:
00731 
00732     //----------------------------------------------------------------
00733     // Implementation: Pattern parsing
00734     //----------------------------------------------------------------
00735 
00760     void applyPattern(const UnicodeString& pattern,
00761                       ParsePosition& pos,
00762                       const SymbolTable* symbols,
00763                       UErrorCode& status);
00764 
00765     //----------------------------------------------------------------
00766     // Implementation: Utility methods
00767     //----------------------------------------------------------------
00768 
00769     void ensureCapacity(int32_t newLen);
00770 
00771     void ensureBufferCapacity(int32_t newLen);
00772 
00773     void swapBuffers(void);
00774 
00775     void _applyPattern(const UnicodeString& pattern,
00776                        ParsePosition& pos,
00777                        const SymbolTable* symbols,
00778                        UnicodeString& rebuiltPat,
00779                        UErrorCode& status);
00780 
00781     UnicodeString& _toPattern(UnicodeString& result,
00782                               UBool escapeUnprintable) const;
00783 
00784     UnicodeString& _generatePattern(UnicodeString& result,
00785                                     UBool escapeUnprintable) const;
00786 
00787     static void _appendToPat(UnicodeString& buf, UChar32 c, UBool escapeUnprintable);
00788 
00789     //----------------------------------------------------------------
00790     // Implementation: Fundamental operators
00791     //----------------------------------------------------------------
00792 
00793     void exclusiveOr(const UChar32* other, int32_t otherLen, int8_t polarity);
00794 
00795     void add(const UChar32* other, int32_t otherLen, int8_t polarity);
00796 
00797     void retain(const UChar32* other, int32_t otherLen, int8_t polarity);
00798 };
00799 
00800 inline UBool UnicodeSet::operator!=(const UnicodeSet& o) const {
00801     return !operator==(o);
00802 }
00803 
00804 U_NAMESPACE_END
00805 
00806 #endif

Generated on Sat Jan 22 03:19:30 2005 for ICU 2.1 by  doxygen 1.4.0