You are here

class BufferStream in Lockr 7.3

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

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