Chris@14: tokens[] = $token; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return Token Chris@14: */ Chris@14: public function current(): Token { Chris@14: return current($this->tokens); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return int Chris@14: */ Chris@14: public function key(): int { Chris@14: return key($this->tokens); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return void Chris@14: */ Chris@14: public function next() { Chris@14: next($this->tokens); Chris@14: $this->pos++; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return bool Chris@14: */ Chris@14: public function valid(): bool { Chris@14: return $this->count() > $this->pos; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return void Chris@14: */ Chris@14: public function rewind() { Chris@14: reset($this->tokens); Chris@14: $this->pos = 0; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return int Chris@14: */ Chris@14: public function count(): int { Chris@14: return count($this->tokens); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param mixed $offset Chris@14: * Chris@14: * @return bool Chris@14: */ Chris@14: public function offsetExists($offset): bool { Chris@14: return isset($this->tokens[$offset]); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param mixed $offset Chris@14: * Chris@14: * @return Token Chris@14: * @throws TokenCollectionException Chris@14: */ Chris@14: public function offsetGet($offset): Token { Chris@14: if (!$this->offsetExists($offset)) { Chris@14: throw new TokenCollectionException( Chris@14: sprintf('No Token at offest %s', $offset) Chris@14: ); Chris@14: } Chris@14: Chris@14: return $this->tokens[$offset]; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param mixed $offset Chris@14: * @param Token $value Chris@14: * Chris@14: * @throws TokenCollectionException Chris@14: */ Chris@14: public function offsetSet($offset, $value) { Chris@14: if (!is_int($offset)) { Chris@14: $type = gettype($offset); Chris@14: throw new TokenCollectionException( Chris@14: sprintf( Chris@14: 'Offset must be of type integer, %s given', Chris@14: $type === 'object' ? get_class($value) : $type Chris@14: ) Chris@14: ); Chris@14: } Chris@14: if (!$value instanceof Token) { Chris@14: $type = gettype($value); Chris@14: throw new TokenCollectionException( Chris@14: sprintf( Chris@14: 'Value must be of type %s, %s given', Chris@14: Token::class, Chris@14: $type === 'object' ? get_class($value) : $type Chris@14: ) Chris@14: ); Chris@14: } Chris@14: $this->tokens[$offset] = $value; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param mixed $offset Chris@14: */ Chris@14: public function offsetUnset($offset) { Chris@14: unset($this->tokens[$offset]); Chris@14: } Chris@14: Chris@14: }