00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef WDBKTBL_H
00022 #define WDBKTBL_H
00023
00024 #include "unicode/utypes.h"
00025 #include "txtbdat.h"
00026
00035 class WordBreakTable {
00036 public:
00037
00038 typedef TextBoundaryData::Node Node;
00039 typedef TextBoundaryData::Type Type;
00040
00050 WordBreakTable(int32_t cols, const Node data[], int32_t data_length);
00051
00058 Node get(Node oldState, Type input) const;
00059
00065 UBool isMarkState(Node state) const;
00066
00072 UBool isEndState(Node state) const;
00073
00078 Node initialState(void) const;
00079
00080 private:
00081 static const Node kMark_mask;
00082 static const Node kIndex_mask;
00083
00084 static const Node kInitial_state;
00085 static const Node kEnd_state;
00086
00087 const TextBoundaryData::Node* fData;
00088 int32_t fData_length;
00089 int32_t fCols;
00090 };
00091
00092
00093
00094 inline WordBreakTable::Node
00095 WordBreakTable::get(WordBreakTable::Node oldState, WordBreakTable::Type input) const
00096 {
00097 return fData[(oldState & kIndex_mask) * fCols + input];
00098 }
00099
00100 inline UBool
00101 WordBreakTable::isMarkState(WordBreakTable::Node state) const
00102 {
00103 return (state & kMark_mask) != 0;
00104 }
00105
00106 inline UBool
00107 WordBreakTable::isEndState(WordBreakTable::Node state) const
00108 {
00109 return (state & kIndex_mask) == kEnd_state;
00110 }
00111
00112 inline WordBreakTable::Node
00113 WordBreakTable::initialState() const
00114 {
00115 return kInitial_state;
00116 }
00117
00118 #endif // _WDBKTBL
00119