/var/www/hkosl.com/littleark/webadmin/libraies/guzzlehttp/psr7/src/BufferStream.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
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.
 */
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->buffer0$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 : [];
    }
}