home *** CD-ROM | disk | FTP | other *** search
- /*
- *****************************************************************************************
- * *
- * COPYRIGHT: *
- * (C) Copyright Taligent, Inc., 1997 *
- * (C) Copyright International Business Machines Corporation, 1997-1999 *
- * Licensed Material - Program-Property of IBM - All Rights Reserved. *
- * US Government Users Restricted Rights - Use, duplication, or disclosure *
- * restricted by GSA ADP Schedule Contract with IBM Corp. *
- * *
- *****************************************************************************************
- *
- * 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 "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
-