00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef DBBI_H
00012 #define DBBI_H
00013
00014 #include "unicode/rbbi.h"
00015
00016 U_NAMESPACE_BEGIN
00017
00018
00019 class DictionaryBasedBreakIteratorTables;
00020
00049 class U_COMMON_API DictionaryBasedBreakIterator : public RuleBasedBreakIterator {
00050
00051 private:
00056 int32_t dictionaryCharCount;
00057
00064 int32_t* cachedBreakPositions;
00065
00069 int32_t numCachedBreakPositions;
00070
00075 int32_t positionInCache;
00076
00080 static const char fgClassID;
00081
00095 DictionaryBasedBreakIterator(UDataMemory* tablesImage, const char* dictionaryFilename, UErrorCode& status);
00096
00097 public:
00098
00099
00100
00101
00105 virtual ~DictionaryBasedBreakIterator();
00106
00111 DictionaryBasedBreakIterator& operator=(const DictionaryBasedBreakIterator& that);
00112
00117 virtual BreakIterator* clone(void) const;
00118
00119
00120
00121
00126 virtual int32_t previous(void);
00127
00134 virtual int32_t following(int32_t offset);
00135
00142 virtual int32_t preceding(int32_t offset);
00143
00154 virtual UClassID getDynamicClassID(void) const;
00155
00166 static UClassID getStaticClassID(void);
00167
00168 protected:
00169
00170
00171
00179 virtual int32_t handleNext(void);
00180
00185 virtual void reset(void);
00186
00187 virtual BreakIterator * createBufferClone(void *stackBuffer,
00188 int32_t &BufferSize,
00189 UErrorCode &status);
00190
00191
00192 private:
00201 void divideUpDictionaryRange(int32_t startPos, int32_t endPos, UErrorCode &status);
00202
00207 void bumpDictionaryCharCount(void);
00208
00209
00210
00211
00212
00213 friend class DictionaryBasedBreakIteratorTables;
00214 friend class BreakIterator;
00215 };
00216
00217 inline UClassID DictionaryBasedBreakIterator::getDynamicClassID(void) const {
00218 return RuleBasedBreakIterator::getStaticClassID();
00219 }
00220
00221 inline UClassID DictionaryBasedBreakIterator::getStaticClassID(void) {
00222 return (UClassID)(&fgClassID);
00223 }
00224
00225 inline void DictionaryBasedBreakIterator::bumpDictionaryCharCount(void) {
00226 ++dictionaryCharCount;
00227 }
00228 U_NAMESPACE_END
00229
00230 #endif