* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Core\Localization\Specification; use ArrayIterator; use Countable; use IteratorAggregate; use PrestaShop\PrestaShop\Core\Localization\Specification\NumberInterface as NumberSpecificationInterface; use Traversable; /** * Number specifications collection * Contains a list of Number specification items (all implementing NumberInterface). */ class NumberCollection implements IteratorAggregate, Countable { /** * The Number specification items. * * @var NumberSpecificationInterface[] */ protected $numberSpecifications = []; /** * Gets the current NumberCollection as an Iterator that includes all Number specification items. * * It implements \IteratorAggregate. * * @return ArrayIterator|NumberSpecificationInterface[] * An ArrayIterator object for iterating over Number specification items */ public function getIterator(): Traversable { return new ArrayIterator($this->numberSpecifications); } /** * Gets the number of Number specification items in this collection. * * @return int * The number of Number specification items */ public function count(): int { return count($this->numberSpecifications); } /** * Adds a Number specification item at the end of the collection. * * @param int|string $index * The item index * @param numberSpecificationInterface $numberSpecification * The Number specification item to add * * @return NumberCollection * Fluent interface */ public function add($index, NumberSpecificationInterface $numberSpecification) { $this->numberSpecifications[$index] = $numberSpecification; return $this; } /** * Returns all Number specification items in this collection. * * @return NumberSpecificationInterface[] * An array of Number specification items */ public function all() { return $this->numberSpecifications; } /** * Gets a Number specification item by index. * * @param int|string $index * The Number specification item index into this collection * (@see NumberCollection::add()) * * @return NumberSpecificationInterface|null * A Number specification instance or null when not found */ public function get($index) { return $this->numberSpecifications[$index] ?? null; } /** * Removes a Number specification item or an array of Number specification items by index from the collection. * * @param int|string|int[]|string[]|array $index * The Number specification item index or an array of Number specification item indexes * * @return NumberCollection * Fluent interface */ public function remove($index) { foreach ((array) $index as $i) { unset($this->numberSpecifications[$i]); } return $this; } /** * Clear the collection, removing all contained Number specification items. * * @return NumberCollection * Fluent interface */ public function clear() { $this->numberSpecifications = []; return $this; } }