PluginProbe
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more / 2.1
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more v2.1
3.7.0 3.6.0 3.6.1 3.5.2 trunk 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.6.1 3.0.0 3.0.1 All 71 releases
stockpack / vendor / guzzlehttp / psr7 / src / BufferStream.php

BufferStream.php in StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more 2.1, at vendor/guzzlehttp/psr7/src/BufferStream.php

138 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace GuzzleHttp\Psr7;
3
4 use Psr\Http\Message\StreamInterface;
5
6 /**
7 * Provides a buffer stream that can be written to to fill a buffer, and read
8 * from to remove bytes from the buffer.
9 *
10 * This stream returns a "hwm" metadata value that tells upstream consumers
11 * what the configured high water mark of the stream is, or the maximum
12 * preferred size of the buffer.
13 */
14 class BufferStream implements StreamInterface
15 {
16 private $hwm;
17 private $buffer = '';
18
19 /**
20 * @param int $hwm High water mark, representing the preferred maximum
21 * buffer size. If the size of the buffer exceeds the high
22 * water mark, then calls to write will continue to succeed
23 * but will return false to inform writers to slow down
24 * until the buffer has been drained by reading from it.
25 */
26 public function __construct($hwm = 16384)
27 {
28 $this->hwm = $hwm;
29 }
30
31 public function __toString()
32 {
33 return $this->getContents();
34 }
35
36 public function getContents()
37 {
38 $buffer = $this->buffer;
39 $this->buffer = '';
40
41 return $buffer;
42 }
43
44 public function close()
45 {
46 $this->buffer = '';
47 }
48
49 public function detach()
50 {
51 $this->close();
52 }
53
54 public function getSize()
55 {
56 return strlen($this->buffer);
57 }
58
59 public function isReadable()
60 {
61 return true;
62 }
63
64 public function isWritable()
65 {
66 return true;
67 }
68
69 public function isSeekable()
70 {
71 return false;
72 }
73
74 public function rewind()
75 {
76 $this->seek(0);
77 }
78
79 public function seek($offset, $whence = SEEK_SET)
80 {
81 throw new \RuntimeException('Cannot seek a BufferStream');
82 }
83
84 public function eof()
85 {
86 return strlen($this->buffer) === 0;
87 }
88
89 public function tell()
90 {
91 throw new \RuntimeException('Cannot determine the position of a BufferStream');
92 }
93
94 /**
95 * Reads data from the buffer.
96 */
97 public function read($length)
98 {
99 $currentLength = strlen($this->buffer);
100
101 if ($length >= $currentLength) {
102 // No need to slice the buffer because we don't have enough data.
103 $result = $this->buffer;
104 $this->buffer = '';
105 } else {
106 // Slice up the result to provide a subset of the buffer.
107 $result = substr($this->buffer, 0, $length);
108 $this->buffer = substr($this->buffer, $length);
109 }
110
111 return $result;
112 }
113
114 /**
115 * Writes data to the buffer.
116 */
117 public function write($string)
118 {
119 $this->buffer .= $string;
120
121 // TODO: What should happen here?
122 if (strlen($this->buffer) >= $this->hwm) {
123 return false;
124 }
125
126 return strlen($string);
127 }
128
129 public function getMetadata($key = null)
130 {
131 if ($key == 'hwm') {
132 return $this->hwm;
133 }
134
135 return $key ? null : [];
136 }
137 }
138