Esempio n. 1
0
 /**
  * {@inheritdoc}
  */
 public function read(int $length = 0, string $byte = null, float $timeout = 0) : \Generator
 {
     if (!$this->isReadable()) {
         throw new UnreadableException('The stream is no longer readable.');
     }
     if (0 > $length) {
         throw new InvalidArgumentError('The length should be a positive integer.');
     }
     $byte = strlen($byte) ? $byte[0] : null;
     if (null !== $byte) {
         $data = '';
         $i = 0;
         do {
             $char = $this->iterator->current();
             $this->iterator->next();
             $data .= $char;
         } while ($char !== $byte && (0 === $length || ++$i < $length) && $this->iterator->valid());
         return $data;
     }
     if (0 === $length) {
         $length = $this->buffer->getLength();
     }
     $position = $this->iterator->key();
     $data = $this->buffer->peek($length, $position);
     $position = $length + $position;
     if ($position > $this->buffer->getLength()) {
         $position = $this->buffer->getLength();
     }
     $this->iterator->seek($position);
     return $data;
     yield;
     // Unreachable, but makes the method a coroutine.
 }