| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | 
							- <?php namespace Sieve;
 
- class SieveTree
 
- {
 
-     protected $childs_;
 
-     protected $parents_;
 
-     protected $nodes_;
 
-     protected $max_id_;
 
-     protected $dump_;
 
-     public function __construct($name = 'tree')
 
-     {
 
-         $this->childs_ = array();
 
-         $this->parents_ = array();
 
-         $this->nodes_ = array();
 
-         $this->max_id_ = 0;
 
-         $this->parents_[0] = null;
 
-         $this->nodes_[0] = $name;
 
-     }
 
-     public function addChild(SieveDumpable $child)
 
-     {
 
-         return $this->addChildTo($this->max_id_, $child);
 
-     }
 
-     public function addChildTo($parent_id, SieveDumpable $child)
 
-     {
 
-         if (!is_int($parent_id)
 
-          || !isset($this->nodes_[$parent_id]))
 
-             return null;
 
-         if (!isset($this->childs_[$parent_id]))
 
-             $this->childs_[$parent_id] = array();
 
-         $child_id = ++$this->max_id_;
 
-         $this->nodes_[$child_id] = $child;
 
-         $this->parents_[$child_id] = $parent_id;
 
-         array_push($this->childs_[$parent_id], $child_id);
 
-         return $child_id;
 
-     }
 
-     public function getRoot()
 
-     {
 
-         return 0;
 
-     }
 
-     public function getChilds($node_id)
 
-     {
 
-         if (!is_int($node_id)
 
-         || !isset($this->nodes_[$node_id]))
 
-             return null;
 
-         if (!isset($this->childs_[$node_id]))
 
-             return array();
 
-         return $this->childs_[$node_id];
 
-     }
 
-     public function getNode($node_id)
 
-     {
 
-         if ($node_id == 0 || !is_int($node_id)
 
-          || !isset($this->nodes_[$node_id]))
 
-             return null;
 
-         return $this->nodes_[$node_id];
 
-     }
 
-     public function dump()
 
-     {
 
-         $this->dump_ = $this->nodes_[$this->getRoot()] ."\n";
 
-         $this->dumpChilds_($this->getRoot(), ' ');
 
-         return $this->dump_;
 
-     }
 
-     protected function dumpChilds_($parent_id, $prefix)
 
-     {
 
-         if (!isset($this->childs_[$parent_id]))
 
-             return;
 
-         $childs = $this->childs_[$parent_id];
 
-         $last_child = count($childs);
 
-         for ($i=1; $i <= $last_child; ++$i)
 
-         {
 
-             $child_node = $this->nodes_[$childs[$i-1]];
 
-             $infix = ($i == $last_child ? '`--- ' : '|--- ');
 
-             $this->dump_ .= $prefix . $infix . $child_node->dump() . " (id:" . $childs[$i-1] . ")\n";
 
-             $next_prefix = $prefix . ($i == $last_child ? '   ' : '|  ');
 
-             $this->dumpChilds_($childs[$i-1], $next_prefix);
 
-         }
 
-     }
 
-     public function getText()
 
-     {
 
-         $this->dump_ = '';
 
-         $this->childText_($this->getRoot());
 
-         return $this->dump_;
 
-     }
 
-     protected function childText_($parent_id)
 
-     {
 
-         if (!isset($this->childs_[$parent_id]))
 
-             return;
 
-         $childs = $this->childs_[$parent_id];
 
-         for ($i = 0; $i < count($childs); ++$i)
 
-         {
 
-             $child_node = $this->nodes_[$childs[$i]];
 
-             $this->dump_ .= $child_node->text();
 
-             $this->childText_($childs[$i]);
 
-         }
 
-     }
 
- }
 
 
  |