Viewing file: BufferStream.php (3.14 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
declare(strict_types=1);
namespace GuzzleHttp\Psr7;
use Psr\Http\Message\StreamInterface;
/** * 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. */ final class BufferStream implements StreamInterface { /** @var int */ private $hwm;
/** @var string */ 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 0 to inform writers to slow down * until the buffer has been drained by reading from it. */ public function __construct(int $hwm = 16384) { $this->hwm = $hwm; }
public function __toString(): string { return $this->getContents(); }
public function getContents(): string { $buffer = $this->buffer; $this->buffer = '';
return $buffer; }
public function close(): void { $this->buffer = ''; }
public function detach() { $this->close();
return null; }
public function getSize(): ?int { return strlen($this->buffer); }
public function isReadable(): bool { return true; }
public function isWritable(): bool { return true; }
public function isSeekable(): bool { return false; }
public function rewind(): void { $this->seek(0); }
public function seek($offset, $whence = SEEK_SET): void { throw new \RuntimeException('Cannot seek a BufferStream'); }
public function eof(): bool { return strlen($this->buffer) === 0; }
public function tell(): int { throw new \RuntimeException('Cannot determine the position of a BufferStream'); }
/** * Reads data from the buffer. */ public function read($length): string { $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): int { $this->buffer .= $string;
if (strlen($this->buffer) >= $this->hwm) { return 0; }
return strlen($string); }
/** * @return mixed */ public function getMetadata($key = null) { if ($key === 'hwm') { return $this->hwm; }
return $key ? null : []; } }
|