Example #1
0
 public function testNext()
 {
     $rule = new Rule();
     $object = new Situation(new Table(), $rule);
     $this->assertFalse($object->next());
     $nextRule = new Rule();
     $rule->setRight([$nextRule]);
     $this->assertSame($nextRule, $object->next());
 }
Example #2
0
 /**
  * @param Situation $situation
  *
  * @return bool
  */
 public function add(Situation $situation)
 {
     $key = $situation->getKey();
     if (isset($this->situations[$key])) {
         return false;
     }
     $this->invalidateKey();
     $this->situations[$key] = $situation;
     return true;
 }
Example #3
0
 /**
  * Process
  */
 public function process()
 {
     $situation = new Situation($this->table, $this->table->getStartRule());
     $this->addState($situation->closure());
     while (!$this->stateQueue->isEmpty()) {
         /** @var State $state */
         $state = $this->stateQueue->dequeue();
         foreach ($state->getSituationSet()->getNextTokens() as $next) {
             $transition = $this->addState($state->getSituationSet()->transition($next));
             $state->addTransition($next, $transition);
         }
     }
 }