Source for file TreeNodeList.class.php

Documentation is available at TreeNodeList.class.php

  1. /**
  2.  * Содержит класс Tree
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author dr.Pavka
  7.  * @copyright ColoCall 2007
  8.  * @version $Id: fsource_energine_core_frameworkTreeNodeList.class.php.html,v 1.1 2007/09/17 14:32:35 pavka Exp $
  9.  */
  10.  
  11. require_once('TreeNode.class.php');
  12.  
  13. /**
  14.  * Набор узлов
  15.  *
  16.  * @package energine
  17.  * @subpackage core
  18.  */
  19. class TreeNodeList implements Iterator{
  20.     /**
  21.      * Внутренний указатель
  22.      *
  23.      * @var mixed 
  24.      * @access private
  25.      */
  26.     private $currentKey;
  27.  
  28.     /**
  29.      * Массив узлов
  30.      *
  31.      * @var array 
  32.      * @access private
  33.      */
  34.     private $nodeList = array();
  35.  
  36.     /**
  37.      * Конструктор класса
  38.      *
  39.      * @return void 
  40.      */
  41.     public function __construct({
  42.  
  43.     }
  44.  
  45.     /**
  46.      * Добавляет узел
  47.      *
  48.      * @param TreeNode 
  49.      * @return TreeNode 
  50.      * @access public
  51.      */
  52.  
  53.     public function add(TreeNode $node{
  54.         $this->nodeList[$node->getID()$node;
  55.         return $node;
  56.     }
  57.  
  58.     /**
  59.      * Вставляет узел перед указанным узлом
  60.      *
  61.      * @param TreeNode 
  62.      * @param TreeNode 
  63.      * @return TreeNode 
  64.      * @access public
  65.      */
  66.  
  67.     public function insertBefore(TreeNode $nodeTreeNode $beforeNode{
  68.  
  69.     }
  70.  
  71.     /**
  72.      * Удаляет елемент из списка
  73.      *
  74.      * @param TreeNode 
  75.      * @return TreeNode 
  76.      * @access public
  77.      */
  78.  
  79.     public function remove(TreeNode $node{
  80.         $result $node;
  81.         unset($this->nodeList[$node->getID()]);
  82.  
  83.         return $result;
  84.     }
  85.  
  86.     /**
  87.      * Возвращает количество елментов в списке
  88.      *
  89.      * @return int 
  90.      * @access public
  91.      */
  92.  
  93.     public function getLength({
  94.         return sizeof($this->nodeList);
  95.     }
  96.  
  97.     /**
  98.      * Возвращает узел по его идентификатору
  99.      *
  100.      * @param int 
  101.      * @return TreeNode 
  102.      * @access public
  103.      */
  104.  
  105.     public function getNodeById($id{
  106.         return $this->findNode($id$this);
  107.     }
  108.  
  109.     /**
  110.      * Внутренний метод поиска узла по его идентификатору
  111.      *
  112.      * @return 
  113.      * @access private
  114.      */
  115.  
  116.     private function findNode($idTreeNodeList $nodeList{
  117.         foreach ($nodeList as $node{
  118.             if ($node->getID(== $id{
  119.                 return $node;
  120.             }
  121.             elseif($node->hasChildren()) {
  122.                 $result $this->findNode($id$node->getChildren());
  123.                 if (!is_null($result)) {
  124.                     return $result;
  125.                 }
  126.             }
  127.         }
  128.         return null;
  129.     }
  130.  
  131.     /**
  132.      * Возвращает дерево в виде массива
  133.      *
  134.      * @param bool рекурсия
  135.      * @return array 
  136.      * @access public
  137.      */
  138.  
  139.     public function asList($isRecursive true{
  140.         $result array();
  141.         foreach ($this as $node{
  142.             $result += $node->asList($isRecursive);
  143.         }
  144.  
  145.         return $result;
  146.     }
  147.  
  148.     /**
  149.      * Возвращает текущий елемент
  150.      *
  151.      * @see Iterator
  152.      * @return unknown 
  153.      * @access public
  154.      */
  155.     public function current({
  156.         return $this->nodeList[$this->currentKey];
  157.     }
  158.  
  159.     /**
  160.      * Возвращает значение внутреннего указателя
  161.      *
  162.      * @see Iterator
  163.      * @return int 
  164.      * @access public
  165.      */
  166.     public function key({
  167.         return $this->currentKey;
  168.     }
  169.  
  170.     /**
  171.      * Устанавливает внутренний указатель на последний елемент
  172.      *
  173.      * @see Iterator
  174.      * @return void 
  175.      * @access public
  176.      */
  177.     public function next({
  178.         //получаем все ключи
  179.         $keys = array_keys($this->nodeList);
  180.         //меняем местами ключ со значением, получая индексы
  181.         $indexes = array_flip($keys);
  182.         //получаем индекс текущего ключа
  183.         $currentIndex $indexes[$this->currentKey];
  184.         $currentIndex++;
  185.         if(isset($keys[$currentIndex])) {
  186.             $this->currentKey = $keys[$currentIndex];
  187.         }
  188.         else {
  189.             $this->currentKey = null;
  190.         }
  191.     }
  192.  
  193.     /**
  194.      * Устанавливает внутренний указатель на первый елемент
  195.      *
  196.      * @see Iterator
  197.      * @return void 
  198.      * @access public
  199.      */
  200.     public function rewind({
  201.         if(empty($this->nodeList)) return;
  202.         //получаем все ключи
  203.         $keys = array_keys($this->nodeList);
  204.         //меняем местами ключ со значением, получая индексы
  205.         $this->currentKey = $keys[0];
  206.     }
  207.  
  208.     /**
  209.      * Возвращает bool в зависимости от того является ли текущий елемент последним или нет в списке
  210.      *
  211.      * @see Iterator
  212.      * @return boolean 
  213.      * @access public
  214.      */
  215.     public function valid({
  216.         if(!is_null($this->currentKey)){
  217.             $keys = array_keys($this->nodeList);
  218.             $indexes = array_flip($keys);
  219.             if(!isset($indexes[$this->currentKey])) {
  220.                 $result false;
  221.             }
  222.             else {
  223.                 $result $indexes[$this->currentKey< sizeof($indexes);
  224.             }
  225.         }
  226.         else {
  227.             $result false;
  228.         }
  229.         return $result;
  230.     }
  231.  
  232.     /**
  233.      * Пересекает списки узлов
  234.      *
  235.      * @param TreeNodeList 
  236.      * @return TreeNodeList 
  237.      * @access public
  238.      */
  239.  
  240.     public function merge(TreeNodeList $newNodeList{
  241.         $this->nodeList = array_merge($this->nodeList$newNodeList->nodeList);
  242.         return $this;
  243.     }
  244. }

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