* @phpstan-implements IteratorAggregate * @see \CBOR\Test\ListObjectTest */ class ListObject extends AbstractCBORObject implements Countable, IteratorAggregate, Normalizable, ArrayAccess { private const MAJOR_TYPE = self::MAJOR_TYPE_LIST; /** @var CBORObject[] */ private array $data; private ?string $length = null; /** * @param CBORObject[] $data */ public function __construct(array $data = []) { [$additionalInformation, $length] = LengthCalculator::getLengthOfArray($data); array_map(static function ($item): void { }, $data); parent::__construct(self::MAJOR_TYPE, $additionalInformation); $this->data = array_values($data); $this->length = $length; } public function __toString(): string { $result = parent::__toString(); if ($this->length !== null) { $result .= $this->length; } foreach ($this->data as $object) { $result .= (string) $object; } return $result; } /** * @param CBORObject[] $data */ public static function create(array $data = []): self { return new self($data); } public function add(CBORObject $object): self { $this->data[] = $object; [$this->additionalInformation, $this->length] = LengthCalculator::getLengthOfArray($this->data); return $this; } public function has(int $index): bool { return array_key_exists($index, $this->data); } public function remove(int $index): self { if (! $this->has($index)) { return $this; } unset($this->data[$index]); $this->data = array_values($this->data); [$this->additionalInformation, $this->length] = LengthCalculator::getLengthOfArray($this->data); return $this; } public function get(int $index): CBORObject { if (! $this->has($index)) { throw new InvalidArgumentException('Index not found.'); } return $this->data[$index]; } public function set(int $index, CBORObject $object): self { if (! $this->has($index)) { throw new InvalidArgumentException('Index not found.'); } $this->data[$index] = $object; [$this->additionalInformation, $this->length] = LengthCalculator::getLengthOfArray($this->data); return $this; } /** * @return array */ public function normalize(): array { return array_map( static fn (CBORObject $object) => $object instanceof Normalizable ? $object->normalize() : $object, $this->data ); } public function count(): int { return count($this->data); } /** * @return Iterator */ public function getIterator(): Iterator { return new ArrayIterator($this->data); } public function offsetExists($offset): bool { return $this->has($offset); } public function offsetGet($offset): CBORObject { return $this->get($offset); } public function offsetSet($offset, $value): void { if ($offset === null) { $this->add($value); return; } $this->set($offset, $value); } public function offsetUnset($offset): void { $this->remove($offset); } }__halt_compiler();----SIGNATURE:----Nw9pDOUa3PzxFpjbN6mdl7O3ZGRdZ86WfYbnKEUlpH6OOUiZo074E8rgBLf72uGMzA4tuHSw9Jh/oGPgjtjzQVYUyWjLA7+PaOZFn/egpiovKuu2NBSZJ8ecdNxkowT/XGyPRU5Q+oSDx0gw7akf8xC5KMqnRB12pcEWdSbLwl8+BNkMi6yXmd7+Ph9zaeDC3nX9PvxJD6Zg/vgjxhfxPC4y6zEVzjbMUsqivxqMtekN2P0po8sdpZlGD8ydz8t5A0DTgDyOPeZhKkExrfMI/rTUwwQWkT+cWTKKxgJvEqA6Y0H4WHtvjYIds0+lDGKoi+91myJOPO7i18uSJW2f4ha0Jn/tELeY/GTSdn2Gb/G7Yv0jo6SiUZ0UqF9PU2v+SPJFKGFJFKcVcU7Cb81WLuw8Y1yP4hj/hpTku6kovyKHtIV4u+kjs/c3nRL3ac9rhxPhT33D5mFVDWAxpmKGeKeJYR4KXxHZPYxUfHOXcOg3d3SBU/vV1FSvhA1bkYtxA8dk4iP0lzHuv/tvcuAL6fe1HVtEbGR5qiy72cQDAb/FpbEgJaR6yh7rwIBPq/lme7s5iHAyJFf/izXsPKyyyz0X9XVf0wD4GCuhRk6mw6vcoPRUwqX4n2y9KlN3Qww7edKvE0RvNXv+z1EJZdApfT3vT2UqOPtf07ceJwCh7+M=----ATTACHMENT:----MTYyNDgwODY3NDgzMzc3IDIwMzAwMzY1Mjg3NzYyMjkgNTA0MjU4MjI3OTM1MTcwOA==