/**
  * A wrapper around FSM::addTransition()
  * @param string $symbol
  * @param string $state
  * @param string $nextState
  * @param string $action
  * @return void
  */
 private function addTransition($symbol, $state, $nextState, $action = '')
 {
     if (!$action) {
         $this->fsm->addTransition($symbol, $state, $nextState);
     } else {
         $this->fsm->addTransition($symbol, $state, $nextState, array($this, $action));
     }
 }
function test_fsm()
{
    $stack = new stdClass();
    $stack->x = 1;
    $stack->y = 1;
    $stack->z = 1;
    $fsm = new FSM('START', $stack);
    $fsm->addTransition('FIRST', 'START', 'MIDDLE', 'test_fsmFirstCallback');
    $fsm->addTransition('SECOND', 'MIDDLE', 'END', 'test_fsmSecondCallback');
    $fsm->setDefaultTransition('END', 'test_fsmErrorCallback');
    export_image($fsm, 'test_fsm.svg');
    print_r($stack);
    echo "{$fsm->_currentState}\n";
    $fsm->process('FIRST');
    print_r($stack);
    echo "{$fsm->_currentState}\n";
    $fsm->process('SECOND');
    print_r($stack);
    echo "{$fsm->_currentState}\n";
    echo "test default\n";
    $fsm->process('SECOND');
    print_r($stack);
    echo "{$fsm->_currentState}\n";
    $fsm->process('FIRST');
    print_r($stack);
    echo "{$fsm->_currentState}\n";
}
Exemple #3
0
 public function actionBackup()
 {
     FSM::_run('Admin.backupRestore.backupTable', array('name' => 'page'));
 }
Exemple #4
0
        array_push($payload, $al + $ar);
    } elseif ($symbol == '-') {
        array_push($payload, $al - $ar);
    } elseif ($symbol == '*') {
        array_push($payload, $al * $ar);
    } elseif ($symbol == '/') {
        array_push($payload, $al / $ar);
    }
}
function DoEqual($symbol, $payload)
{
    echo array_pop($payload) . "\n";
}
function Error($symbol, $payload)
{
    echo "This does not compute: {$symbol}\n";
}
$stack = array();
$fsm = new FSM('INIT', $stack);
$fsm->setDefaultTransition('INIT', 'Error');
$fsm->addTransitionAny('INIT', 'INIT');
$fsm->addTransition('=', 'INIT', 'INIT', 'DoEqual');
$fsm->addTransitions(range(0, 9), 'INIT', 'BUILDING_NUMBER', 'BeginBuildNumber');
$fsm->addTransitions(range(0, 9), 'BUILDING_NUMBER', 'BUILDING_NUMBER', 'BuildNumber');
$fsm->addTransition(' ', 'BUILDING_NUMBER', 'INIT', 'EndBuildNumber');
$fsm->addTransitions(array('+', '-', '*', '/'), 'INIT', 'INIT', 'DoOperator');
echo "Expression:\n";
$stdin = fopen('php://stdin', 'r');
$expression = rtrim(fgets($stdin));
$symbols = preg_split('//', $expression, -1, PREG_SPLIT_NO_EMPTY);
$fsm->processList($symbols);