
sgdk::IndexTypeFSM. class template for initializing a finite state machine, so that it can be used to simulate the navigation of a maze.
FSM_Builder is a type that models the FSM Builder concept. fsm_builder is an object of type FSM_Builder. 
| Name | Expression | Description | 
|---|---|---|
| State index type | FSM_Builder::StateIndex  | The type that represents the index of a vertex in the underlying maze graph. | 
| Input index type | FSM_Builder::InputIndex  | The type that represents the index of an edge in the underlying maze graph. | 
| Maze graph type | FSM_Builder::MazeGraph  | The type of the underlying maze graph. | 
| Pattern type | FSM_Builder::Pattern  | The type of the underlying Pattern. | 
| Cell type | FSM_Builder::Cell  | The type of the cells in the underlying pattern. | 
| Edge direction type | FSM_Builder::Direction  | A type for representing the course or bearing that is followed when traversing an edge in the underlying pattern's internal graph. | 
| Argument validation policy | FSM_Builder::ArgumentValidationPolicy  | The Argument Validation Policy that determines how this FSM_Builder will accept or reject the arguments to its initialization.   | 
The following expressions must be valid.
| Name | Expression | Type Requirements | Return Type | 
|---|---|---|---|
| Initialization | fsm_builder.initialize(model-specific arguments)  | This function must be able to accept arguments by name. | bool   | 
| Pattern access | fsm_builder.getPattern()  | const FSM_Builder::Pattern&   | |
| Maze graph access | fsm_builder.getMazeGraph()  | const FSM_Builder::MazeGraph&   | |
| Readiness | fsm_builder.isReady()  | bool   | |
| Transition function building | fsm_builder.buildTransitionFunction(transition_function)  | transition_function must be an instance of sgdk::IndexTypeTransitionFunction.  | void   | 
| Source state access | fsm_builder.getSourceState()  | FSM_Builder::StateIndex   | |
| Target state access | fsm_builder.getTargetState()  | FSM_Builder::StateIndex   | |
| Solvability | fsm_builder.hasSolutionFromState(state)  | state must be convertible to FSM_Builder::StateIndex.  | bool   | 
| Solution access | fsm_builder.getCorrectInput(state)  | state must be convertible to FSM_Builder::StateIndex.  | FSM_Builder::InputIndex   | 
| Cell access | fsm_builder.getStateCell(state)  | state must be convertible to FSM_Builder::StateIndex.  | const FSM_Builder::Cell&   | 
| Direction from state | fsm_builder.getStateDirection(state)  | state must be convertible to FSM_Builder::StateIndex.  | FSM_Builder::Direction   | 
| Name | Expression | Precondition | Semantics | Postcondition | 
|---|---|---|---|---|
| Initialization | fsm_builder.initialize(model-specific arguments)  | If the argument validation policy in effect accepts the specified arguments, initializes this FSM_Builder and its underlying pattern, then returns true; otherwise, returns false. The parameters to be recognized are model-specific; consult the documentation for that model for details.  | fsm_builder.isReady() == true if and only if either this or a previous fsm_builder.initialize() call has returned true. Enforcing this postcondition allows applications to recover gracefully from a failed attempt at initialization.   | |
| Pattern access | fsm_builder.getPattern()  | Returns a const reference to the underlying pattern. | ||
| Maze graph access | fsm_builder.getMazeGraph()  | Returns a const reference to the underlying maze graph. | ||
| Readiness | fsm_builder.isReady()  | Returns true if and only if this FSM_Builder is initialized and can itself be used to initialize a finite state machine by building the finite state machine's transition function, false otherwise.  | ||
| Transition function building | fsm_builder.buildTransitionFunction(transition_function)  | Builds the specified transition function according to the structure of the underlying maze graph and its property maps. | ||
| Source state access | fsm_builder.getSourceState()  | FSM_Builder::StateIndex  | Returns the finite state machine's source state. | |
| Target state access | fsm_builder.getTargetState()  | Returns the finite state machine's target state. | ||
| Solvability | fsm_builder.hasSolutionFromState(state)  | 0 <= state && state < boost::num_vertices(fsm_builder.getMazeGraph())  | Returns true if and only if it is possible for the finite state machine to reach the target state from the specified state, false otherwise.  | |
| Solution access | fsm_builder.getCorrectInput(state)  | 0 <= state && state < boost::num_vertices(fsm_builder.getMazeGraph())  | If fsm_builder.hasSolutionFromState(state) == true, returns the input that brings the finite state machine one step closer to its target state; otherwise, returns the number of possible inputs.  | |
| Cell access | fsm_builder.getStateCell(state)  | 0 <= state && state < boost::num_vertices(fsm_builder.getMazeGraph())  | Returns the cell that the maze graph's cell index map pairs the specified state with. | |
| Direction from state | fsm_builder.getStateDirection(state)  | 
  | Returns the direction from the last-visited cell to the cell that the maze graph's cell index map pairs the specified state with. | 
Runtime complexity is measured in turms of cell and connection count within the underlying pattern unless otherwise specified. The following invariants must hold.
| Name | Invariants | Runtime complexity | 
|---|---|---|
| Initialization | Deterministic polynomial time | |
| Pattern access | Amortized constant time | |
| Maze graph access | Amortized constant time | |
| Readiness | Amortized constant time | |
| Transition function building | Linear time with respect to the number of states (unless a next-state input maker is used, in which case the time complexity is quadratic) | |
| Source state access | Amortized constant time | |
| Target state access | Amortized constant time | |
| Solvability | Linear time with respect to the number of states | |
| Solution access | Linear time with respect to the number of possible inputs | |
| Cell access | Amortized constant time | |
| Direction from state | Amortized constant time | 
The following class templates deriving from FSMBuilder: 
Multi-State Mazes in C++ is hosted by .  Use the Table of Contents for navigation.