TYPO3  7.6
ArrayByteStream.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of SwiftMailer.
5  * (c) 2004-2009 Chris Corbyn
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10 
17 {
23  private $_array = array();
24 
30  private $_arraySize = 0;
31 
37  private $_offset = 0;
38 
44  private $_mirrors = array();
45 
53  public function __construct($stack = null)
54  {
55  if (is_array($stack)) {
56  $this->_array = $stack;
57  $this->_arraySize = count($stack);
58  } elseif (is_string($stack)) {
59  $this->write($stack);
60  } else {
61  $this->_array = array();
62  }
63  }
64 
77  public function read($length)
78  {
79  if ($this->_offset == $this->_arraySize) {
80  return false;
81  }
82 
83  // Don't use array slice
84  $end = $length + $this->_offset;
85  $end = $this->_arraySize < $end
86  ? $this->_arraySize
87  : $end;
88  $ret = '';
89  for (; $this->_offset < $end; ++$this->_offset) {
90  $ret .= $this->_array[$this->_offset];
91  }
92 
93  return $ret;
94  }
95 
101  public function write($bytes)
102  {
103  $to_add = str_split($bytes);
104  foreach ($to_add as $value) {
105  $this->_array[] = $value;
106  }
107  $this->_arraySize = count($this->_array);
108 
109  foreach ($this->_mirrors as $stream) {
110  $stream->write($bytes);
111  }
112  }
113 
117  public function commit()
118  {
119  }
120 
129  public function bind(Swift_InputByteStream $is)
130  {
131  $this->_mirrors[] = $is;
132  }
133 
143  public function unbind(Swift_InputByteStream $is)
144  {
145  foreach ($this->_mirrors as $k => $stream) {
146  if ($is === $stream) {
147  unset($this->_mirrors[$k]);
148  }
149  }
150  }
151 
159  public function setReadPointer($byteOffset)
160  {
161  if ($byteOffset > $this->_arraySize) {
162  $byteOffset = $this->_arraySize;
163  } elseif ($byteOffset < 0) {
164  $byteOffset = 0;
165  }
166 
167  $this->_offset = $byteOffset;
168  }
169 
174  public function flushBuffers()
175  {
176  $this->_offset = 0;
177  $this->_array = array();
178  $this->_arraySize = 0;
179 
180  foreach ($this->_mirrors as $stream) {
181  $stream->flushBuffers();
182  }
183  }
184 }