From efc6d71d33e129f04f4645b8dff58f48d319ce25 Mon Sep 17 00:00:00 2001 From: zYne Date: Sat, 30 Sep 2006 10:04:01 +0000 Subject: [PATCH] Moved collection iterator classes under Collection_ namespace --- lib/Doctrine/Collection.php | 2 +- lib/Doctrine/Collection/Batch.php | 2 +- lib/Doctrine/Collection/Iterator.php | 102 +++++++++++++ .../Collection/Iterator/Expandable.php | 50 +++++++ lib/Doctrine/Collection/Iterator/Normal.php | 37 +++++ lib/Doctrine/Collection/Iterator/Offset.php | 33 +++++ lib/Doctrine/Collection/Offset.php | 4 +- lib/Doctrine/Repository.php | 137 ------------------ 8 files changed, 226 insertions(+), 141 deletions(-) create mode 100644 lib/Doctrine/Collection/Iterator.php create mode 100644 lib/Doctrine/Collection/Iterator/Expandable.php create mode 100644 lib/Doctrine/Collection/Iterator/Normal.php create mode 100644 lib/Doctrine/Collection/Iterator/Offset.php delete mode 100644 lib/Doctrine/Repository.php diff --git a/lib/Doctrine/Collection.php b/lib/Doctrine/Collection.php index 3e3e22ac0..25ec5b2b9 100644 --- a/lib/Doctrine/Collection.php +++ b/lib/Doctrine/Collection.php @@ -667,7 +667,7 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator * @return Doctrine_Iterator_Normal */ public function getNormalIterator() { - return new Doctrine_Iterator_Normal($this); + return new Doctrine_Collection_Iterator_Normal($this); } /** * save diff --git a/lib/Doctrine/Collection/Batch.php b/lib/Doctrine/Collection/Batch.php index e2fe1f6ab..ba6b16897 100644 --- a/lib/Doctrine/Collection/Batch.php +++ b/lib/Doctrine/Collection/Batch.php @@ -176,7 +176,7 @@ class Doctrine_Collection_Batch extends Doctrine_Collection { * @return Doctrine_Iterator */ public function getIterator() { - return new Doctrine_Iterator_Expandable($this); + return new Doctrine_Collection_Iterator_Expandable($this); } } diff --git a/lib/Doctrine/Collection/Iterator.php b/lib/Doctrine/Collection/Iterator.php new file mode 100644 index 000000000..be20336f9 --- /dev/null +++ b/lib/Doctrine/Collection/Iterator.php @@ -0,0 +1,102 @@ +. + */ +/** + * Doctrine_Collection_Iterator + * iterates through Doctrine_Collection + * + * @package Doctrine ORM + * @url www.phpdoctrine.com + * @license LGPL + */ +abstract class Doctrine_Collection_Iterator implements Iterator { + /** + * @var Doctrine_Collection $collection + */ + protected $collection; + /** + * @var array $keys + */ + protected $keys; + /** + * @var mixed $key + */ + protected $key; + /** + * @var integer $index + */ + protected $index; + /** + * @var integer $count + */ + protected $count; + + /** + * constructor + * @var Doctrine_Collection $collection + */ + public function __construct(Doctrine_Collection $collection) { + $this->collection = $collection; + $this->keys = $this->collection->getKeys(); + $this->count = $this->collection->count(); + } + /** + * rewinds the iterator + * + * @return void + */ + public function rewind() { + $this->index = 0; + $i = $this->index; + if(isset($this->keys[$i])) + $this->key = $this->keys[$i]; + } + + /** + * returns the current key + * + * @return integer + */ + public function key() { + return $this->key; + } + /** + * returns the current record + * + * @return Doctrine_Record + */ + public function current() { + return $this->collection->get($this->key); + } + /** + * advances the internal pointer + * + * @return void + */ + public function next() { + $this->index++; + $i = $this->index; + if(isset($this->keys[$i])) + $this->key = $this->keys[$i]; + } +} + + + diff --git a/lib/Doctrine/Collection/Iterator/Expandable.php b/lib/Doctrine/Collection/Iterator/Expandable.php new file mode 100644 index 000000000..43142af53 --- /dev/null +++ b/lib/Doctrine/Collection/Iterator/Expandable.php @@ -0,0 +1,50 @@ +. + */ +Doctrine::autoload('Doctrine_Collection_Iterator'); +/** + * Doctrine_Collection_Iterator_Normal + * + * @package Doctrine ORM + * @url www.phpdoctrine.com + * @license LGPL + */ +class Doctrine_Collection_Iterator_Expandable extends Doctrine_Collection_Iterator { + public function valid() { + if($this->index < $this->count) + return true; + elseif($this->index == $this->count) { + + $coll = $this->collection->expand($this->index); + + if($coll instanceof Doctrine_Collection) { + $count = count($coll); + if($count > 0) { + $this->keys = array_merge($this->keys, $coll->getKeys()); + $this->count += $count; + return true; + } + } + + return false; + } + } +} + diff --git a/lib/Doctrine/Collection/Iterator/Normal.php b/lib/Doctrine/Collection/Iterator/Normal.php new file mode 100644 index 000000000..67fc8fbe0 --- /dev/null +++ b/lib/Doctrine/Collection/Iterator/Normal.php @@ -0,0 +1,37 @@ +. + */ +Doctrine::autoload('Doctrine_Collection_Iterator'); +/** + * Doctrine_Collection_Iterator_Normal + * + * @package Doctrine ORM + * @url www.phpdoctrine.com + * @license LGPL + */ +class Doctrine_Collection_Iterator_Normal extends Doctrine_Collection_Iterator { + /** + * @return boolean whether or not the iteration will continue + */ + public function valid() { + return ($this->index < $this->count); + } +} + diff --git a/lib/Doctrine/Collection/Iterator/Offset.php b/lib/Doctrine/Collection/Iterator/Offset.php new file mode 100644 index 000000000..a5bad4f96 --- /dev/null +++ b/lib/Doctrine/Collection/Iterator/Offset.php @@ -0,0 +1,33 @@ +. + */ +Doctrine::autoload('Doctrine_Collection_Iterator'); +/** + * Doctrine_Collection_Iterator_Normal + * + * @package Doctrine ORM + * @url www.phpdoctrine.com + * @license LGPL + */ +class Doctrine_Collection_Iterator_Offset extends Doctrine_Collection_Iterator { + public function valid() { } +} + + diff --git a/lib/Doctrine/Collection/Offset.php b/lib/Doctrine/Collection/Offset.php index ba16307ad..a33a56de7 100644 --- a/lib/Doctrine/Collection/Offset.php +++ b/lib/Doctrine/Collection/Offset.php @@ -22,10 +22,10 @@ class Doctrine_Collection_Offset extends Doctrine_Collection { return $this->limit; } /** - * @return Doctrine_Iterator_Offset + * @return Doctrine_Collection_Iterator_Expandable */ public function getIterator() { - return new Doctrine_Iterator_Expandable($this); + return new Doctrine_Collection_Iterator_Expandable($this); } } diff --git a/lib/Doctrine/Repository.php b/lib/Doctrine/Repository.php deleted file mode 100644 index 9a087cea1..000000000 --- a/lib/Doctrine/Repository.php +++ /dev/null @@ -1,137 +0,0 @@ -. - */ -/** - * Doctrine_Repository - * each record is added into Doctrine_Repository at the same time they are created, - * loaded from the database or retrieved from the cache - * - * @author Konsta Vesterinen - * @package Doctrine ORM - * @url www.phpdoctrine.com - * @license LGPL - */ -class Doctrine_Table_Repository implements Countable, IteratorAggregate { - /** - * @var object Doctrine_Table $table - */ - private $table; - /** - * @var array $registry - * an array of all records - * keys representing record object identifiers - */ - private $registry = array(); - /** - * constructor - * - * @param Doctrine_Table $table - */ - public function __construct(Doctrine_Table $table) { - $this->table = $table; - } - /** - * getTable - * - * @return object Doctrine_Table - */ - public function getTable() { - return $this->table; - } - /** - * add - * - * @param Doctrine_Record $record record to be added into registry - * @return boolean - */ - public function add(Doctrine_Record $record) { - $oid = $record->getOID(); - - if(isset($this->registry[$oid])) - return false; - - $this->registry[$oid] = $record; - - return true; - } - /** - * get - * @param integer $oid - * @throws Doctrine_Table_Repository_Exception - */ - public function get($oid) { - if( ! isset($this->registry[$oid])) - throw new Doctrine_Table_Repository_Exception("Unknown object identifier"); - - return $this->registry[$oid]; - } - /** - * count - * Doctrine_Registry implements interface Countable - * @return integer the number of records this registry has - */ - public function count() { - return count($this->registry); - } - /** - * @param integer $oid object identifier - * @return boolean whether ot not the operation was successful - */ - public function evict($oid) { - if( ! isset($this->registry[$oid])) - return false; - - unset($this->registry[$oid]); - return true; - } - /** - * @return integer number of records evicted - */ - public function evictAll() { - $evicted = 0; - foreach($this->registry as $oid=>$record) { - if($this->evict($oid)) - $evicted++; - } - return $evicted; - } - /** - * getIterator - * @return ArrayIterator - */ - public function getIterator() { - return new ArrayIterator($this->registry); - } - /** - * contains - * @param integer $oid object identifier - */ - public function contains($oid) { - return isset($this->registry[$oid]); - } - /** - * loadAll - * @return void - */ - public function loadAll() { - $this->table->findAll(); - } -} -