Commit efc6d71d authored by zYne's avatar zYne

Moved collection iterator classes under Collection_ namespace

parent 8e9a8af6
...@@ -667,7 +667,7 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator ...@@ -667,7 +667,7 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
* @return Doctrine_Iterator_Normal * @return Doctrine_Iterator_Normal
*/ */
public function getNormalIterator() { public function getNormalIterator() {
return new Doctrine_Iterator_Normal($this); return new Doctrine_Collection_Iterator_Normal($this);
} }
/** /**
* save * save
......
...@@ -176,7 +176,7 @@ class Doctrine_Collection_Batch extends Doctrine_Collection { ...@@ -176,7 +176,7 @@ class Doctrine_Collection_Batch extends Doctrine_Collection {
* @return Doctrine_Iterator * @return Doctrine_Iterator
*/ */
public function getIterator() { public function getIterator() {
return new Doctrine_Iterator_Expandable($this); return new Doctrine_Collection_Iterator_Expandable($this);
} }
} }
...@@ -19,119 +19,84 @@ ...@@ -19,119 +19,84 @@
* <http://www.phpdoctrine.com>. * <http://www.phpdoctrine.com>.
*/ */
/** /**
* Doctrine_Repository * Doctrine_Collection_Iterator
* each record is added into Doctrine_Repository at the same time they are created, * iterates through Doctrine_Collection
* loaded from the database or retrieved from the cache
* *
* @author Konsta Vesterinen
* @package Doctrine ORM * @package Doctrine ORM
* @url www.phpdoctrine.com * @url www.phpdoctrine.com
* @license LGPL * @license LGPL
*/ */
class Doctrine_Table_Repository implements Countable, IteratorAggregate { abstract class Doctrine_Collection_Iterator implements Iterator {
/** /**
* @var object Doctrine_Table $table * @var Doctrine_Collection $collection
*/ */
private $table; protected $collection;
/** /**
* @var array $registry * @var array $keys
* an array of all records
* keys representing record object identifiers
*/ */
private $registry = array(); protected $keys;
/** /**
* constructor * @var mixed $key
*
* @param Doctrine_Table $table
*/ */
public function __construct(Doctrine_Table $table) { protected $key;
$this->table = $table;
}
/** /**
* getTable * @var integer $index
*
* @return object Doctrine_Table
*/ */
public function getTable() { protected $index;
return $this->table;
}
/** /**
* add * @var integer $count
*
* @param Doctrine_Record $record record to be added into registry
* @return boolean
*/ */
public function add(Doctrine_Record $record) { protected $count;
$oid = $record->getOID();
if(isset($this->registry[$oid]))
return false;
$this->registry[$oid] = $record;
return true;
}
/** /**
* get * constructor
* @param integer $oid * @var Doctrine_Collection $collection
* @throws Doctrine_Table_Repository_Exception
*/ */
public function get($oid) { public function __construct(Doctrine_Collection $collection) {
if( ! isset($this->registry[$oid])) $this->collection = $collection;
throw new Doctrine_Table_Repository_Exception("Unknown object identifier"); $this->keys = $this->collection->getKeys();
$this->count = $this->collection->count();
return $this->registry[$oid];
} }
/** /**
* count * rewinds the iterator
* Doctrine_Registry implements interface Countable *
* @return integer the number of records this registry has * @return void
*/ */
public function count() { public function rewind() {
return count($this->registry); $this->index = 0;
$i = $this->index;
if(isset($this->keys[$i]))
$this->key = $this->keys[$i];
} }
/**
* @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 * returns the current key
* @return ArrayIterator *
* @return integer
*/ */
public function getIterator() { public function key() {
return new ArrayIterator($this->registry); return $this->key;
} }
/** /**
* contains * returns the current record
* @param integer $oid object identifier *
* @return Doctrine_Record
*/ */
public function contains($oid) { public function current() {
return isset($this->registry[$oid]); return $this->collection->get($this->key);
} }
/** /**
* loadAll * advances the internal pointer
*
* @return void * @return void
*/ */
public function loadAll() { public function next() {
$this->table->findAll(); $this->index++;
$i = $this->index;
if(isset($this->keys[$i]))
$this->key = $this->keys[$i];
} }
} }
<?php
/*
* $Id$
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
*/
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;
}
}
}
<?php
/*
* $Id$
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
*/
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);
}
}
<?php
/*
* $Id$
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
*/
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() { }
}
...@@ -22,10 +22,10 @@ class Doctrine_Collection_Offset extends Doctrine_Collection { ...@@ -22,10 +22,10 @@ class Doctrine_Collection_Offset extends Doctrine_Collection {
return $this->limit; return $this->limit;
} }
/** /**
* @return Doctrine_Iterator_Offset * @return Doctrine_Collection_Iterator_Expandable
*/ */
public function getIterator() { public function getIterator() {
return new Doctrine_Iterator_Expandable($this); return new Doctrine_Collection_Iterator_Expandable($this);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment