コード例 #1
0
 /**
  * {@inheritDoc}
  *
  * @return integer level of group in which it has been added
  */
 protected function visit($element, &$parents = null)
 {
     $this->throwCircularExceptionIfNeeded($element, $parents);
     // If element has not been visited
     if (!$element->visited) {
         $parents[$element->id] = true;
         $element->visited = true;
         $minLevel = -1;
         foreach ($element->dependencies as $dependency) {
             if (isset($this->elements[$dependency])) {
                 $newParents = $parents;
                 $addedAtGroupLevel = $this->visit($this->elements[$dependency], $newParents, $element);
                 if ($addedAtGroupLevel > $minLevel) {
                     $minLevel = $addedAtGroupLevel;
                 }
             } else {
                 throw ElementNotFoundException::create($element->id, $dependency);
             }
         }
         //            print "add {$element->id} ({$element->type}), minLevel:$minLevel  \n";
         //            $this->printState();
         $this->injectElement($element, $minLevel);
         return $minLevel;
     }
     return $element->addedAtLevel;
 }
コード例 #2
0
 protected function visit($element, &$parents = null)
 {
     $this->throwCircularExceptionIfNeeded($element, $parents);
     if (!$element->visited) {
         $parents[$element->id] = true;
         $element->visited = true;
         foreach ($element->dependencies as $dependency) {
             if (isset($this->elements[$dependency])) {
                 $newParents = $parents;
                 $this->visit($this->elements[$dependency], $newParents);
             } else {
                 throw ElementNotFoundException::create($element->id, $dependency);
             }
         }
         $this->addToList($element);
     }
 }