annotate vendor/theseer/tokenizer/src/TokenCollection.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@14 1 <?php declare(strict_types = 1);
Chris@14 2 namespace TheSeer\Tokenizer;
Chris@14 3
Chris@14 4 class TokenCollection implements \ArrayAccess, \Iterator, \Countable {
Chris@14 5
Chris@14 6 /**
Chris@14 7 * @var Token[]
Chris@14 8 */
Chris@14 9 private $tokens = [];
Chris@14 10
Chris@14 11 /**
Chris@14 12 * @var int
Chris@14 13 */
Chris@14 14 private $pos;
Chris@14 15
Chris@14 16 /**
Chris@14 17 * @param Token $token
Chris@14 18 */
Chris@14 19 public function addToken(Token $token) {
Chris@14 20 $this->tokens[] = $token;
Chris@14 21 }
Chris@14 22
Chris@14 23 /**
Chris@14 24 * @return Token
Chris@14 25 */
Chris@14 26 public function current(): Token {
Chris@14 27 return current($this->tokens);
Chris@14 28 }
Chris@14 29
Chris@14 30 /**
Chris@14 31 * @return int
Chris@14 32 */
Chris@14 33 public function key(): int {
Chris@14 34 return key($this->tokens);
Chris@14 35 }
Chris@14 36
Chris@14 37 /**
Chris@14 38 * @return void
Chris@14 39 */
Chris@14 40 public function next() {
Chris@14 41 next($this->tokens);
Chris@14 42 $this->pos++;
Chris@14 43 }
Chris@14 44
Chris@14 45 /**
Chris@14 46 * @return bool
Chris@14 47 */
Chris@14 48 public function valid(): bool {
Chris@14 49 return $this->count() > $this->pos;
Chris@14 50 }
Chris@14 51
Chris@14 52 /**
Chris@14 53 * @return void
Chris@14 54 */
Chris@14 55 public function rewind() {
Chris@14 56 reset($this->tokens);
Chris@14 57 $this->pos = 0;
Chris@14 58 }
Chris@14 59
Chris@14 60 /**
Chris@14 61 * @return int
Chris@14 62 */
Chris@14 63 public function count(): int {
Chris@14 64 return count($this->tokens);
Chris@14 65 }
Chris@14 66
Chris@14 67 /**
Chris@14 68 * @param mixed $offset
Chris@14 69 *
Chris@14 70 * @return bool
Chris@14 71 */
Chris@14 72 public function offsetExists($offset): bool {
Chris@14 73 return isset($this->tokens[$offset]);
Chris@14 74 }
Chris@14 75
Chris@14 76 /**
Chris@14 77 * @param mixed $offset
Chris@14 78 *
Chris@14 79 * @return Token
Chris@14 80 * @throws TokenCollectionException
Chris@14 81 */
Chris@14 82 public function offsetGet($offset): Token {
Chris@14 83 if (!$this->offsetExists($offset)) {
Chris@14 84 throw new TokenCollectionException(
Chris@14 85 sprintf('No Token at offest %s', $offset)
Chris@14 86 );
Chris@14 87 }
Chris@14 88
Chris@14 89 return $this->tokens[$offset];
Chris@14 90 }
Chris@14 91
Chris@14 92 /**
Chris@14 93 * @param mixed $offset
Chris@14 94 * @param Token $value
Chris@14 95 *
Chris@14 96 * @throws TokenCollectionException
Chris@14 97 */
Chris@14 98 public function offsetSet($offset, $value) {
Chris@14 99 if (!is_int($offset)) {
Chris@14 100 $type = gettype($offset);
Chris@14 101 throw new TokenCollectionException(
Chris@14 102 sprintf(
Chris@14 103 'Offset must be of type integer, %s given',
Chris@14 104 $type === 'object' ? get_class($value) : $type
Chris@14 105 )
Chris@14 106 );
Chris@14 107 }
Chris@14 108 if (!$value instanceof Token) {
Chris@14 109 $type = gettype($value);
Chris@14 110 throw new TokenCollectionException(
Chris@14 111 sprintf(
Chris@14 112 'Value must be of type %s, %s given',
Chris@14 113 Token::class,
Chris@14 114 $type === 'object' ? get_class($value) : $type
Chris@14 115 )
Chris@14 116 );
Chris@14 117 }
Chris@14 118 $this->tokens[$offset] = $value;
Chris@14 119 }
Chris@14 120
Chris@14 121 /**
Chris@14 122 * @param mixed $offset
Chris@14 123 */
Chris@14 124 public function offsetUnset($offset) {
Chris@14 125 unset($this->tokens[$offset]);
Chris@14 126 }
Chris@14 127
Chris@14 128 }