Esempio n. 1
0
 /**
  * Merge singleton nodes
  *
  * All equivalency classes which consist of just one nodes are considered 
  * singleton nodes. This method merges all maximum sets of singleton nodes, 
  * which share the same successors and precedessors.
  * 
  * @param slAutomaton $automaton 
  * @return void
  */
 protected function mergeSingletonNodes(slAutomaton $automaton)
 {
     $classes = array_keys($this->equivalenceClasses);
     $classCount = count($classes);
     for ($i = 0; $i < $classCount; ++$i) {
         if (!isset($this->equivalenceClasses[$classes[$i]]) || count($this->equivalenceClasses[$classes[$i]]) > 1) {
             // We only care for singletons
             continue;
         }
         for ($j = $i + 1; $j < $classCount; ++$j) {
             if (!isset($this->equivalenceClasses[$classes[$j]]) || count($this->equivalenceClasses[$classes[$j]]) > 1) {
                 // We only care for singletons
                 continue;
             }
             if ($automaton->getOutgoing($classes[$i]) === $automaton->getOutgoing($classes[$j]) && $automaton->getIncoming($classes[$i]) === $automaton->getIncoming($classes[$j])) {
                 $this->equivalenceClasses[$classes[$i]][] = $classes[$j];
                 unset($this->equivalenceClasses[$classes[$j]]);
                 $automaton->removeNode($classes[$j]);
             }
         }
     }
 }