Source for file TreeNode.class.php

Documentation is available at TreeNode.class.php

  1. /**
  2.  * Содержит класс TreeNode
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author dr.Pavka
  7.  * @copyright ColoCall 2007
  8.  * @version $Id: fsource_energine_core_frameworkTreeNode.class.php.html,v 1.1 2007/09/17 14:32:35 pavka Exp $
  9.  */
  10.  
  11. //require_once('core/framework/ИМЯ_РОДИТЕЛЬСКОГО_КЛАССА.class.php');
  12.  
  13. /**
  14.  * Класс реализующий работу с узлом дерева
  15.  *
  16.  * @package energine
  17.  * @subpackage core
  18.  * @final
  19.  */
  20. final class TreeNode implements IteratorAggregate{
  21.     /**
  22.      * Идентификатор узла
  23.      *
  24.      * @var int 
  25.      * @access private
  26.      */
  27.     private $id;
  28.     /**
  29.      * Идентификатор родительского узла
  30.      *
  31.      * @var TreeNode 
  32.      * @access private
  33.      */
  34.     private $parent = null;
  35.     /**
  36.      * Массив дочерних узлов
  37.      *
  38.      * @var TreeNodeList 
  39.      * @access private
  40.      */
  41.     private $children;
  42.  
  43.     /**
  44.      * Конструктор класса
  45.      *
  46.      * @return void 
  47.      */
  48.     public function __construct($id{
  49.         $this->children = new TreeNodeList();
  50.         $this->id = $id;
  51.     }
  52.  
  53.     /**
  54.      * Возвращает идентификатор узла
  55.      *
  56.      * @return int 
  57.      * @access public
  58.      */
  59.  
  60.     public function getID({
  61.         return $this->id;
  62.     }
  63.  
  64.     /**
  65.      * Возвращает родительский узел
  66.      *
  67.      * @return TreeNode 
  68.      * @access public
  69.      */
  70.  
  71.     public function getParent({
  72.         return $this->parent;
  73.     }
  74.  
  75.     /**
  76.      * Возвращает флаг указывающий на наличие детей
  77.      *
  78.      * @return bool 
  79.      * @access public
  80.      */
  81.  
  82.     public function hasChildren({
  83.         return (bool)$this->children->getLength();
  84.     }
  85.  
  86.     /**
  87.      * Возвращает массив потомков
  88.      *
  89.      * @return TreeNodeList 
  90.      * @access public
  91.      */
  92.  
  93.     public function getChildren({
  94.         return $this->children;
  95.     }
  96.     /**
  97.      * Возвращает итератор объекта
  98.      *
  99.      * @see IteratorAggregate
  100.      * @return TreeNodeList 
  101.      * @access public
  102.      */
  103.     public function getIterator({
  104.         return $this->getChildren();
  105.     }
  106.  
  107.     /**
  108.      * Добавление узла как дочернего
  109.      *
  110.      * @param TreeNode 
  111.      * @return TreeNode 
  112.      * @access public
  113.      */
  114.  
  115.     public function addChild(TreeNode $node{
  116.         $node $this->children->add($node);
  117.         $node->parent $this;
  118.  
  119.         return $node;
  120.     }
  121.  
  122.     /**
  123.      * Удаление узла из списка дочерних узлов
  124.      *
  125.      * @param TreeNode 
  126.      * @return TreeNode 
  127.      * @access public
  128.      */
  129.  
  130.     public function removeChild($node{
  131.         $this->children->remove($node)->parent null;
  132.         return $node;
  133.     }
  134.  
  135.     /**
  136.      * Возвращает всех родителей узла
  137.      *
  138.      * @return TreeNodeList 
  139.      * @access public
  140.      */
  141.  
  142.     public function getParents({
  143.         $result new TreeNodeList();
  144.         $node $this;
  145.         while (!is_null($node)) {
  146.             if (!is_null($node $node->getParent())) {
  147.                 $result->add($node);
  148.             }
  149.         }
  150.         return $result;
  151.     }
  152.  
  153.     /**
  154.      * Возвращает всех потомков
  155.      *
  156.      * @return TreeNodeList 
  157.      * @access public
  158.      */
  159.  
  160.     public function getDescendants({
  161.         $result $this->iterateDescendants($this->getChildren());
  162.         return $result;
  163.     }
  164.  
  165.     /**
  166.      * Внутренний метод возвращаения потомков
  167.      *
  168.      * @return TreeNodeList 
  169.      * @access private
  170.      */
  171.  
  172.     private function iterateDescendants(TreeNodeList $nodeList{
  173.         $result new TreeNodeList();
  174.         foreach ($nodeList as $node{
  175.             $result->add($node);
  176.             $result->merge($node->iterateDescendants($node->getChildren()));
  177.         }
  178.         return $result;
  179.     }
  180.  
  181.     /**
  182.      * Возвращает объект в виде массива
  183.      *
  184.      * @param bool рекурсия
  185.      * @return array 
  186.      * @access public
  187.      */
  188.  
  189.     public function asList($isRecursive true{
  190.         $result[$this->getID()(!is_null($this->getParent()))?$this->getParent()->getID():null;
  191.         if ($this->hasChildren(&& $isRecursive{
  192.             $result += $this->getChildren()->asList();
  193.         }
  194.         return $result;
  195.     }
  196. }

Documentation generated on Mon, 17 Sep 2007 13:33:00 +0300 by phpDocumentor 1.4.0a2