locations = array_values($locations); } /** * {@inheritdoc} */ public function getIterator(): Traversable { return new \ArrayIterator($this->all()); } /** * {@inheritdoc} */ public function count(): int { return count($this->locations); } /** * {@inheritdoc} */ public function first(): Location { if ([] === $this->locations) { throw new CollectionIsEmpty(); } return reset($this->locations); } /** * {@inheritdoc} */ public function isEmpty(): bool { return [] === $this->locations; } /** * @return Location[] */ public function slice(int $offset, int $length = null) { return array_slice($this->locations, $offset, $length); } /** * @return bool */ public function has(int $index): bool { return isset($this->locations[$index]); } /** * {@inheritdoc} */ public function get(int $index): Location { if (!isset($this->locations[$index])) { throw new OutOfBounds(sprintf('The index "%s" does not exist in this collection.', $index)); } return $this->locations[$index]; } /** * {@inheritdoc} */ public function all(): array { return $this->locations; } }