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