Chris@0: provider = $pagedRouteProvider; Chris@0: $this->routesBatchSize = $routesBatchSize; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Loads the next routes into the elements array. Chris@0: * Chris@0: * @param int $offset The offset used in the db query. Chris@0: */ Chris@0: protected function loadNextElements($offset) Chris@0: { Chris@0: // If the last batch was smaller than the batch size, this means there Chris@0: // are no more routes available. Chris@0: if (isset($this->currentRoutes) && count($this->currentRoutes) < $this->routesBatchSize) { Chris@0: $this->currentRoutes = array(); Chris@0: } else { Chris@0: $this->currentRoutes = $this->provider->getRoutesPaged($offset, $this->routesBatchSize); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function current() Chris@0: { Chris@0: return current($this->currentRoutes); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function next() Chris@0: { Chris@0: $result = next($this->currentRoutes); Chris@0: if (false === $result) { Chris@0: $this->loadNextElements($this->current + 1); Chris@0: } Chris@0: ++$this->current; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function key() Chris@0: { Chris@0: return key($this->currentRoutes); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function valid() Chris@0: { Chris@0: return key($this->currentRoutes); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function rewind() Chris@0: { Chris@0: $this->current = 0; Chris@0: $this->currentRoutes = null; Chris@0: $this->loadNextElements($this->current); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the number of Routes in this collection. Chris@0: * Chris@0: * @return int The number of routes Chris@0: */ Chris@0: public function count() Chris@0: { Chris@0: return $this->provider->getRoutesCount(); Chris@0: } Chris@0: }