| /* |
| ***************************************************************************************** |
| * |
| * Copyright © {1997-1999}, International Business Machines Corporation and others. All Rights Reserved. |
| ***************************************************************************************** |
| * |
| * File WDBKTBL.H |
| * |
| * WordBreakTable implements a state transition table. |
| * |
| * @package Text and International |
| * @category Text Scanning |
| * |
| * Modification History: |
| * |
| * Date Name Description |
| * 02/18/97 aliu Converted from OpenClass. Made statics const. |
| ***************************************************************************************** |
| */ |
| |
| #ifndef WDBKTBL_H |
| #define WDBKTBL_H |
| |
| #include "unicode/utypes.h" |
| #include "txtbdat.h" |
| |
| /** |
| * This class implements a state transition table. |
| * After each transition, using the get method, the |
| * new state is returned along with information about |
| * the state change (ex. was it a "marked" transition"). |
| * For efficiency, none of the arguments to any of these |
| * methods are validated. |
| */ |
| class WordBreakTable { |
| public: |
| // For convenience |
| typedef TextBoundaryData::Node Node; |
| typedef TextBoundaryData::Type Type; |
| |
| /** |
| * Construct a table from the provided data. See CharacterBreakData or |
| * the other TextBoundaryData subclasses for examples. Each row represents |
| * a state, each column within a row represents a transition. The values |
| * in the table represent the new state and mark information. |
| * @param cols number of columns in the table (transitions) |
| * @param data an encoded byte array containing state and transition data |
| * @param data_length the length of the byte array data |
| */ |
| WordBreakTable(int32_t cols, const Node data[], int32_t data_length); |
| |
| /** |
| * Get the resulting state moving from oldState accepting input. |
| * @param oldState current state |
| * @param input input |
| * @return resulting state and transition data |
| */ |
| Node get(Node oldState, Type input) const; |
| |
| /** |
| * Checks to see if the transition into the specified state was "marked." |
| * @param state the state as returned by get, initialState, or endState |
| * @return true if transition into state was marked. |
| */ |
| bool_t isMarkState(Node state) const; |
| |
| /** |
| * Check to see if the state is the end state |
| * @param state the state to check |
| * @return true if state is an end state |
| */ |
| bool_t isEndState(Node state) const; |
| |
| /** |
| * Get the initial state |
| * @return the initial state |
| */ |
| Node initialState(void) const; |
| |
| private: |
| static const Node kMark_mask; |
| static const Node kIndex_mask; |
| |
| static const Node kInitial_state; |
| static const Node kEnd_state; |
| |
| const TextBoundaryData::Node* fData; |
| int32_t fData_length; |
| int32_t fCols; |
| }; |
| |
| // ------------------------------------- |
| |
| inline WordBreakTable::Node |
| WordBreakTable::get(WordBreakTable::Node oldState, WordBreakTable::Type input) const |
| { |
| return fData[(oldState & kIndex_mask) * fCols + input]; |
| } |
| |
| inline bool_t |
| WordBreakTable::isMarkState(WordBreakTable::Node state) const |
| { |
| return (state & kMark_mask) != 0; |
| } |
| |
| inline bool_t |
| WordBreakTable::isEndState(WordBreakTable::Node state) const |
| { |
| return (state & kIndex_mask) == kEnd_state; |
| } |
| |
| inline WordBreakTable::Node |
| WordBreakTable::initialState() const |
| { |
| return kInitial_state; |
| } |
| |
| #endif // _WDBKTBL |
| //eof |