You are here

class BufferStream in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/guzzlehttp/psr7/src/BufferStream.php \GuzzleHttp\Psr7\BufferStream

Provides a buffer stream that can be written to to fill a buffer, and read from to remove bytes from the buffer.

This stream returns a "hwm" metadata value that tells upstream consumers what the configured high water mark of the stream is, or the maximum preferred size of the buffer.

Hierarchy

Expanded class hierarchy of BufferStream

2 files declare their use of BufferStream
BufferStreamTest.php in vendor/guzzlehttp/psr7/tests/BufferStreamTest.php
DroppingStreamTest.php in vendor/guzzlehttp/psr7/tests/DroppingStreamTest.php

File

vendor/guzzlehttp/psr7/src/BufferStream.php, line 14

Namespace

GuzzleHttp\Psr7
View source
class BufferStream implements StreamInterface {
  private $hwm;
  private $buffer = '';

  /**
   * @param int $hwm High water mark, representing the preferred maximum
   *                 buffer size. If the size of the buffer exceeds the high
   *                 water mark, then calls to write will continue to succeed
   *                 but will return false to inform writers to slow down
   *                 until the buffer has been drained by reading from it.
   */
  public function __construct($hwm = 16384) {
    $this->hwm = $hwm;
  }
  public function __toString() {
    return $this
      ->getContents();
  }
  public function getContents() {
    $buffer = $this->buffer;
    $this->buffer = '';
    return $buffer;
  }
  public function close() {
    $this->buffer = '';
  }
  public function detach() {
    $this
      ->close();
  }
  public function getSize() {
    return strlen($this->buffer);
  }
  public function isReadable() {
    return true;
  }
  public function isWritable() {
    return true;
  }
  public function isSeekable() {
    return false;
  }
  public function rewind() {
    $this
      ->seek(0);
  }
  public function seek($offset, $whence = SEEK_SET) {
    throw new \RuntimeException('Cannot seek a BufferStream');
  }
  public function eof() {
    return strlen($this->buffer) === 0;
  }
  public function tell() {
    throw new \RuntimeException('Cannot determine the position of a BufferStream');
  }

  /**
   * Reads data from the buffer.
   */
  public function read($length) {
    $currentLength = strlen($this->buffer);
    if ($length >= $currentLength) {

      // No need to slice the buffer because we don't have enough data.
      $result = $this->buffer;
      $this->buffer = '';
    }
    else {

      // Slice up the result to provide a subset of the buffer.
      $result = substr($this->buffer, 0, $length);
      $this->buffer = substr($this->buffer, $length);
    }
    return $result;
  }

  /**
   * Writes data to the buffer.
   */
  public function write($string) {
    $this->buffer .= $string;

    // TODO: What should happen here?
    if (strlen($this->buffer) >= $this->hwm) {
      return false;
    }
    return strlen($string);
  }
  public function getMetadata($key = null) {
    if ($key == 'hwm') {
      return $this->hwm;
    }
    return $key ? null : [];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BufferStream::$buffer private property
BufferStream::$hwm private property
BufferStream::close public function Closes the stream and any underlying resources. Overrides StreamInterface::close
BufferStream::detach public function Separates any underlying resources from the stream. Overrides StreamInterface::detach
BufferStream::eof public function Returns true if the stream is at the end of the stream. Overrides StreamInterface::eof
BufferStream::getContents public function Returns the remaining contents in a string Overrides StreamInterface::getContents
BufferStream::getMetadata public function Get stream metadata as an associative array or retrieve a specific key. Overrides StreamInterface::getMetadata
BufferStream::getSize public function Get the size of the stream if known. Overrides StreamInterface::getSize
BufferStream::isReadable public function Returns whether or not the stream is readable. Overrides StreamInterface::isReadable
BufferStream::isSeekable public function Returns whether or not the stream is seekable. Overrides StreamInterface::isSeekable
BufferStream::isWritable public function Returns whether or not the stream is writable. Overrides StreamInterface::isWritable
BufferStream::read public function Reads data from the buffer. Overrides StreamInterface::read
BufferStream::rewind public function Seek to the beginning of the stream. Overrides StreamInterface::rewind
BufferStream::seek public function Seek to a position in the stream. Overrides StreamInterface::seek
BufferStream::tell public function Returns the current position of the file read/write pointer Overrides StreamInterface::tell
BufferStream::write public function Writes data to the buffer. Overrides StreamInterface::write
BufferStream::__construct public function
BufferStream::__toString public function Reads all data from the stream into a string, from the beginning to end. Overrides StreamInterface::__toString