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 }