00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MERGECOL_H
00027 #define MERGECOL_H
00028
00029 #include "unicode/unistr.h"
00030 #include "ptnentry.h"
00031 #include "tables.h"
00032 #include "unicode/coll.h"
00033 #include "unicode/normlzr.h"
00034
00035
00061 class MergeCollation
00062 {
00063 public:
00064
00071 MergeCollation( const UnicodeString& pattern,
00072 Normalizer::EMode decompMode,
00073 UErrorCode& success);
00077 MergeCollation( const MergeCollation& other);
00078
00082 ~MergeCollation();
00083
00086 const MergeCollation& operator=(const MergeCollation& other);
00092 UnicodeString& getPattern(UnicodeString& pattern) const;
00093
00101 UnicodeString& getPattern(UnicodeString& pattern, UBool withWhiteSpace) const;
00102
00109 UnicodeString& emitPattern(UnicodeString& pattern) const;
00110
00119 UnicodeString& emitPattern(UnicodeString& pattern, UBool withWhiteSpace) const;
00120
00127 void setPattern(const UnicodeString& pattern,
00128 Normalizer::EMode decompMode,
00129 UErrorCode& status);
00130
00137 void addPattern(const UnicodeString& pattern,
00138 Normalizer::EMode decompMode,
00139 UErrorCode& status);
00140
00145 int32_t getCount(void) const;
00146
00152 const PatternEntry* getItemAt(UTextOffset index) const;
00153
00154 private:
00155
00156
00157
00158
00159
00160 VectorOfPointersToPatternEntry* patterns;
00161 static const int32_t BITARRAYSIZE;
00162 static const uint8_t BITARRAYMASK;
00163 static const int32_t BYTEPOWER;
00164 static const int32_t BYTEMASK;
00165
00166 PatternEntry* lastEntry;
00167 PatternEntry* saveEntry;
00168 uint8_t* statusArray;
00169
00170
00177 const PatternEntry* findLastWithNoExtension(int32_t i) const;
00178
00190 void fixEntry( PatternEntry* newEntry,
00191 UErrorCode& status);
00192
00202 int32_t findLastEntry( const PatternEntry* lastPatEntry,
00203 UnicodeString& excess,
00204 UErrorCode& success) const;
00205 };
00206
00207 inline UnicodeString& MergeCollation::getPattern(UnicodeString& result) const
00208 {
00209 return getPattern(result, TRUE);
00210 }
00211
00212 inline UnicodeString& MergeCollation::emitPattern(UnicodeString& result) const
00213 {
00214 return emitPattern(result, TRUE);
00215 }
00216
00217
00218 #endif // _MERGECOL