Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Collections; Chris@0: Chris@0: use Closure; Chris@0: Chris@0: /** Chris@0: * Lazy collection that is backed by a concrete collection Chris@0: * Chris@0: * @author Michaƫl Gallego Chris@0: * @since 1.2 Chris@0: */ Chris@0: abstract class AbstractLazyCollection implements Collection Chris@0: { Chris@0: /** Chris@0: * The backed collection to use Chris@0: * Chris@0: * @var Collection Chris@0: */ Chris@0: protected $collection; Chris@0: Chris@0: /** Chris@0: * @var boolean Chris@0: */ Chris@0: protected $initialized = false; Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function count() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->count(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function add($element) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->add($element); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function clear() Chris@0: { Chris@0: $this->initialize(); Chris@0: $this->collection->clear(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function contains($element) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->contains($element); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function isEmpty() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->isEmpty(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function remove($key) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->remove($key); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function removeElement($element) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->removeElement($element); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function containsKey($key) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->containsKey($key); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function get($key) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->get($key); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getKeys() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->getKeys(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getValues() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->getValues(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function set($key, $value) Chris@0: { Chris@0: $this->initialize(); Chris@0: $this->collection->set($key, $value); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function toArray() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->toArray(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function first() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->first(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function last() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->last(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function key() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->key(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function current() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->current(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function next() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->next(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function exists(Closure $p) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->exists($p); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function filter(Closure $p) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->filter($p); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function forAll(Closure $p) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->forAll($p); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function map(Closure $func) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->map($func); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function partition(Closure $p) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->partition($p); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function indexOf($element) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->indexOf($element); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function slice($offset, $length = null) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->slice($offset, $length); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getIterator() Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->getIterator(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function offsetExists($offset) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->offsetExists($offset); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function offsetGet($offset) Chris@0: { Chris@0: $this->initialize(); Chris@0: return $this->collection->offsetGet($offset); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function offsetSet($offset, $value) Chris@0: { Chris@0: $this->initialize(); Chris@0: $this->collection->offsetSet($offset, $value); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function offsetUnset($offset) Chris@0: { Chris@0: $this->initialize(); Chris@0: $this->collection->offsetUnset($offset); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Is the lazy collection already initialized? Chris@0: * Chris@0: * @return bool Chris@0: */ Chris@0: public function isInitialized() Chris@0: { Chris@0: return $this->initialized; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Initialize the collection Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: protected function initialize() Chris@0: { Chris@0: if ( ! $this->initialized) { Chris@0: $this->doInitialize(); Chris@0: $this->initialized = true; Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Do the initialization logic Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: abstract protected function doInitialize(); Chris@0: }