Example #1
0
 private function findPlaces(Definition $definition, Marking $marking = null)
 {
     $places = array();
     foreach ($definition->getPlaces() as $place) {
         $attributes = array();
         if ($place === $definition->getInitialPlace()) {
             $attributes['style'] = 'filled';
         }
         if ($marking && $marking->has($place)) {
             $attributes['color'] = '#FF0000';
             $attributes['shape'] = 'doublecircle';
         }
         $places[$place] = array('attributes' => $attributes);
     }
     return $places;
 }
Example #2
0
 public function testMarking()
 {
     $marking = new Marking(array('a' => 1));
     $this->assertTrue($marking->has('a'));
     $this->assertFalse($marking->has('b'));
     $this->assertSame(array('a' => 1), $marking->getPlaces());
     $marking->mark('b');
     $this->assertTrue($marking->has('a'));
     $this->assertTrue($marking->has('b'));
     $this->assertSame(array('a' => 1, 'b' => 1), $marking->getPlaces());
     $marking->unmark('a');
     $this->assertFalse($marking->has('a'));
     $this->assertTrue($marking->has('b'));
     $this->assertSame(array('b' => 1), $marking->getPlaces());
     $marking->unmark('b');
     $this->assertFalse($marking->has('a'));
     $this->assertFalse($marking->has('b'));
     $this->assertSame(array(), $marking->getPlaces());
 }
Example #3
0
 /**
  * Return the first Transition in $transitions that is valid for the
  * $subject and $marking. null is returned when you cannot do any Transition
  * in $transitions on the $subject.
  *
  * @param object       $subject
  * @param Marking      $marking
  * @param Transition[] $transitions
  *
  * @return Transition|null
  */
 private function getTransitionForSubject($subject, Marking $marking, array $transitions)
 {
     foreach ($transitions as $transition) {
         foreach ($transition->getFroms() as $place) {
             if (!$marking->has($place)) {
                 continue 2;
             }
         }
         if (true !== $this->guardTransition($subject, $marking, $transition)) {
             return $transition;
         }
     }
 }
Example #4
0
 private function doCan($subject, Marking $marking, Transition $transition)
 {
     foreach ($transition->getFroms() as $place) {
         if (!$marking->has($place)) {
             return false;
         }
     }
     if (true === $this->guardTransition($subject, $marking, $transition)) {
         return false;
     }
     return true;
 }