PageRenderTime 39ms CodeModel.GetById 12ms app.highlight 20ms RepoModel.GetById 1ms app.codeStats 1ms

/HotelSpaWP/wp-includes/pomo/streams.php

https://bitbucket.org/Trulsh/personal-bootstrap-projects
PHP | 315 lines | 156 code | 36 blank | 123 comment | 26 complexity | beac73a17cc41d2d138d3c69f1967080 MD5 | raw file
  1<?php
  2/**
  3 * Classes, which help reading streams of data from files.
  4 * Based on the classes from Danilo Segan <danilo@kvota.net>
  5 *
  6 * @version $Id: streams.php 1157 2015-11-20 04:30:11Z dd32 $
  7 * @package pomo
  8 * @subpackage streams
  9 */
 10
 11if ( ! class_exists( 'POMO_Reader', false ) ):
 12class POMO_Reader {
 13
 14	var $endian = 'little';
 15	var $_post = '';
 16
 17	/**
 18	 * PHP5 constructor.
 19	 */
 20	function __construct() {
 21		$this->is_overloaded = ((ini_get("mbstring.func_overload") & 2) != 0) && function_exists('mb_substr');
 22		$this->_pos = 0;
 23	}
 24
 25	/**
 26	 * PHP4 constructor.
 27	 */
 28	public function POMO_Reader() {
 29		self::__construct();
 30	}
 31
 32	/**
 33	 * Sets the endianness of the file.
 34	 *
 35	 * @param $endian string 'big' or 'little'
 36	 */
 37	function setEndian($endian) {
 38		$this->endian = $endian;
 39	}
 40
 41	/**
 42	 * Reads a 32bit Integer from the Stream
 43	 *
 44	 * @return mixed The integer, corresponding to the next 32 bits from
 45	 * 	the stream of false if there are not enough bytes or on error
 46	 */
 47	function readint32() {
 48		$bytes = $this->read(4);
 49		if (4 != $this->strlen($bytes))
 50			return false;
 51		$endian_letter = ('big' == $this->endian)? 'N' : 'V';
 52		$int = unpack($endian_letter, $bytes);
 53		return reset( $int );
 54	}
 55
 56	/**
 57	 * Reads an array of 32-bit Integers from the Stream
 58	 *
 59	 * @param integer count How many elements should be read
 60	 * @return mixed Array of integers or false if there isn't
 61	 * 	enough data or on error
 62	 */
 63	function readint32array($count) {
 64		$bytes = $this->read(4 * $count);
 65		if (4*$count != $this->strlen($bytes))
 66			return false;
 67		$endian_letter = ('big' == $this->endian)? 'N' : 'V';
 68		return unpack($endian_letter.$count, $bytes);
 69	}
 70
 71	/**
 72	 * @param string $string
 73	 * @param int    $start
 74	 * @param int    $length
 75	 * @return string
 76	 */
 77	function substr($string, $start, $length) {
 78		if ($this->is_overloaded) {
 79			return mb_substr($string, $start, $length, 'ascii');
 80		} else {
 81			return substr($string, $start, $length);
 82		}
 83	}
 84
 85	/**
 86	 * @param string $string
 87	 * @return int
 88	 */
 89	function strlen($string) {
 90		if ($this->is_overloaded) {
 91			return mb_strlen($string, 'ascii');
 92		} else {
 93			return strlen($string);
 94		}
 95	}
 96
 97	/**
 98	 * @param string $string
 99	 * @param int    $chunk_size
100	 * @return array
101	 */
102	function str_split($string, $chunk_size) {
103		if (!function_exists('str_split')) {
104			$length = $this->strlen($string);
105			$out = array();
106			for ($i = 0; $i < $length; $i += $chunk_size)
107				$out[] = $this->substr($string, $i, $chunk_size);
108			return $out;
109		} else {
110			return str_split( $string, $chunk_size );
111		}
112	}
113
114	/**
115	 * @return int
116	 */
117	function pos() {
118		return $this->_pos;
119	}
120
121	/**
122	 * @return true
123	 */
124	function is_resource() {
125		return true;
126	}
127
128	/**
129	 * @return true
130	 */
131	function close() {
132		return true;
133	}
134}
135endif;
136
137if ( ! class_exists( 'POMO_FileReader', false ) ):
138class POMO_FileReader extends POMO_Reader {
139
140	/**
141	 * @param string $filename
142	 */
143	function __construct( $filename ) {
144		parent::POMO_Reader();
145		$this->_f = fopen($filename, 'rb');
146	}
147
148	/**
149	 * PHP4 constructor.
150	 */
151	public function POMO_FileReader( $filename ) {
152		self::__construct( $filename );
153	}
154
155	/**
156	 * @param int $bytes
157	 */
158	function read($bytes) {
159		return fread($this->_f, $bytes);
160	}
161
162	/**
163	 * @param int $pos
164	 * @return boolean
165	 */
166	function seekto($pos) {
167		if ( -1 == fseek($this->_f, $pos, SEEK_SET)) {
168			return false;
169		}
170		$this->_pos = $pos;
171		return true;
172	}
173
174	/**
175	 * @return bool
176	 */
177	function is_resource() {
178		return is_resource($this->_f);
179	}
180
181	/**
182	 * @return bool
183	 */
184	function feof() {
185		return feof($this->_f);
186	}
187
188	/**
189	 * @return bool
190	 */
191	function close() {
192		return fclose($this->_f);
193	}
194
195	/**
196	 * @return string
197	 */
198	function read_all() {
199		$all = '';
200		while ( !$this->feof() )
201			$all .= $this->read(4096);
202		return $all;
203	}
204}
205endif;
206
207if ( ! class_exists( 'POMO_StringReader', false ) ):
208/**
209 * Provides file-like methods for manipulating a string instead
210 * of a physical file.
211 */
212class POMO_StringReader extends POMO_Reader {
213
214	var $_str = '';
215
216	/**
217	 * PHP5 constructor.
218	 */
219	function __construct( $str = '' ) {
220		parent::POMO_Reader();
221		$this->_str = $str;
222		$this->_pos = 0;
223	}
224
225	/**
226	 * PHP4 constructor.
227	 */
228	public function POMO_StringReader( $str = '' ) {
229		self::__construct( $str );
230	}
231
232	/**
233	 * @param string $bytes
234	 * @return string
235	 */
236	function read($bytes) {
237		$data = $this->substr($this->_str, $this->_pos, $bytes);
238		$this->_pos += $bytes;
239		if ($this->strlen($this->_str) < $this->_pos) $this->_pos = $this->strlen($this->_str);
240		return $data;
241	}
242
243	/**
244	 * @param int $pos
245	 * @return int
246	 */
247	function seekto($pos) {
248		$this->_pos = $pos;
249		if ($this->strlen($this->_str) < $this->_pos) $this->_pos = $this->strlen($this->_str);
250		return $this->_pos;
251	}
252
253	/**
254	 * @return int
255	 */
256	function length() {
257		return $this->strlen($this->_str);
258	}
259
260	/**
261	 * @return string
262	 */
263	function read_all() {
264		return $this->substr($this->_str, $this->_pos, $this->strlen($this->_str));
265	}
266
267}
268endif;
269
270if ( ! class_exists( 'POMO_CachedFileReader', false ) ):
271/**
272 * Reads the contents of the file in the beginning.
273 */
274class POMO_CachedFileReader extends POMO_StringReader {
275	/**
276	 * PHP5 constructor.
277	 */
278	function __construct( $filename ) {
279		parent::POMO_StringReader();
280		$this->_str = file_get_contents($filename);
281		if (false === $this->_str)
282			return false;
283		$this->_pos = 0;
284	}
285
286	/**
287	 * PHP4 constructor.
288	 */
289	public function POMO_CachedFileReader( $filename ) {
290		self::__construct( $filename );
291	}
292}
293endif;
294
295if ( ! class_exists( 'POMO_CachedIntFileReader', false ) ):
296/**
297 * Reads the contents of the file in the beginning.
298 */
299class POMO_CachedIntFileReader extends POMO_CachedFileReader {
300	/**
301	 * PHP5 constructor.
302	 */
303	public function __construct( $filename ) {
304		parent::POMO_CachedFileReader($filename);
305	}
306
307	/**
308	 * PHP4 constructor.
309	 */
310	function POMO_CachedIntFileReader( $filename ) {
311		self::__construct( $filename );
312	}
313}
314endif;
315