Mercurial > hg > isophonics-drupal-site
comparison vendor/guzzlehttp/psr7/src/BufferStream.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
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 } |