summaryrefslogtreecommitdiff
path: root/vendor/theseer/tokenizer/src/TokenCollection.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/theseer/tokenizer/src/TokenCollection.php')
-rw-r--r--vendor/theseer/tokenizer/src/TokenCollection.php93
1 files changed, 93 insertions, 0 deletions
diff --git a/vendor/theseer/tokenizer/src/TokenCollection.php b/vendor/theseer/tokenizer/src/TokenCollection.php
new file mode 100644
index 000000000..e5e6e401c
--- /dev/null
+++ b/vendor/theseer/tokenizer/src/TokenCollection.php
@@ -0,0 +1,93 @@
+<?php declare(strict_types = 1);
+namespace TheSeer\Tokenizer;
+
+class TokenCollection implements \ArrayAccess, \Iterator, \Countable {
+
+ /** @var Token[] */
+ private $tokens = [];
+
+ /** @var int */
+ private $pos;
+
+ public function addToken(Token $token): void {
+ $this->tokens[] = $token;
+ }
+
+ public function current(): Token {
+ return \current($this->tokens);
+ }
+
+ public function key(): int {
+ return \key($this->tokens);
+ }
+
+ public function next(): void {
+ \next($this->tokens);
+ $this->pos++;
+ }
+
+ public function valid(): bool {
+ return $this->count() > $this->pos;
+ }
+
+ public function rewind(): void {
+ \reset($this->tokens);
+ $this->pos = 0;
+ }
+
+ public function count(): int {
+ return \count($this->tokens);
+ }
+
+ public function offsetExists($offset): bool {
+ return isset($this->tokens[$offset]);
+ }
+
+ /**
+ * @throws TokenCollectionException
+ */
+ public function offsetGet($offset): Token {
+ if (!$this->offsetExists($offset)) {
+ throw new TokenCollectionException(
+ \sprintf('No Token at offest %s', $offset)
+ );
+ }
+
+ return $this->tokens[$offset];
+ }
+
+ /**
+ * @param Token $value
+ *
+ * @throws TokenCollectionException
+ */
+ public function offsetSet($offset, $value): void {
+ if (!\is_int($offset)) {
+ $type = \gettype($offset);
+
+ throw new TokenCollectionException(
+ \sprintf(
+ 'Offset must be of type integer, %s given',
+ $type === 'object' ? \get_class($value) : $type
+ )
+ );
+ }
+
+ if (!$value instanceof Token) {
+ $type = \gettype($value);
+
+ throw new TokenCollectionException(
+ \sprintf(
+ 'Value must be of type %s, %s given',
+ Token::class,
+ $type === 'object' ? \get_class($value) : $type
+ )
+ );
+ }
+ $this->tokens[$offset] = $value;
+ }
+
+ public function offsetUnset($offset): void {
+ unset($this->tokens[$offset]);
+ }
+}