2010-11-21 23:48:11 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Buffer class for a string.
|
|
|
|
* Will fix issues with sockets that don't care about linebreaks.
|
|
|
|
* Can also be used for all kinds of purpose.
|
2010-11-28 19:35:08 +01:00
|
|
|
* TODO: implement a method to return the next X bytes (return false if not enough bytes there,yet)
|
2010-11-21 23:48:11 +01:00
|
|
|
* @author jpt
|
|
|
|
* @package Misc
|
|
|
|
*/
|
|
|
|
class Misc_Buffer {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Bufferstring - contains all the data.
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $buffer;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Linebreak to use for pulling lines out of the buffer.
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $linebreak;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Default constructor. Sets a default linebreak and initializes the buffer.
|
|
|
|
* @param $linebreak
|
|
|
|
* @return void
|
|
|
|
*/
|
2010-11-28 19:35:08 +01:00
|
|
|
function __construct($linebreak = "") {
|
2010-11-21 23:48:11 +01:00
|
|
|
$this->buffer = "";
|
|
|
|
$this->linebreak = $linebreak;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Prunes empty lines out of the buffer.
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
protected function pruneEmptyLines() {
|
2010-11-28 19:35:08 +01:00
|
|
|
//no need to do this when there are no linebreaks.
|
|
|
|
if($this->linebreak === "") return;
|
2010-11-21 23:48:11 +01:00
|
|
|
if(strpos($this->buffer, $this->linebreak) === FALSE) return;
|
|
|
|
$has_linebreak_at_end = (substr($this->buffer, (-1) * strlen($this->linebreak)) === $this->linebreak) ? TRUE : FALSE;
|
|
|
|
$lines = explode($this->linebreak, $this->buffer);
|
|
|
|
foreach($lines AS $key=>$line) {
|
|
|
|
$line = str_replace($this->linebreak, "", $line);
|
|
|
|
$line = trim($line);
|
|
|
|
if($line === "") unset($lines[$key]);
|
|
|
|
}
|
|
|
|
$this->buffer = implode($this->linebreak, $lines);
|
|
|
|
if($has_linebreak_at_end) $this->buffer .= $this->linebreak;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Appends data to the buffer.
|
|
|
|
* @param string $data
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function addData($data) {
|
|
|
|
$this->buffer .= $data;
|
|
|
|
$this->pruneEmptyLines();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the next line in the buffer and removes it from the buffer.
|
|
|
|
* @return string
|
2010-11-28 19:35:08 +01:00
|
|
|
* @throws Exception_GeneralException
|
2010-11-21 23:48:11 +01:00
|
|
|
*/
|
|
|
|
public function getNextLine() {
|
2010-11-28 19:35:08 +01:00
|
|
|
if($this->linebreak === "") throw new Exception_GeneralException("Cannot return a line - no linebreak is set!", 1290964174);
|
2010-11-21 23:48:11 +01:00
|
|
|
if(!$this->hasLines()) return "";
|
|
|
|
list($line) = explode($this->linebreak, $this->buffer);
|
|
|
|
$this->buffer = str_replace($line.$this->linebreak, "", $this->buffer);
|
|
|
|
$line = trim($line);
|
|
|
|
$result = ($line !== "") ? $line.$this->linebreak : "";
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
|
2010-11-28 19:35:08 +01:00
|
|
|
/**
|
|
|
|
* Returns the next $length chars from the buffer.
|
|
|
|
* @return string Returns "" if no
|
|
|
|
*/
|
|
|
|
public function getNextChars($length) {
|
|
|
|
//TODO: substr und so
|
2010-12-08 17:47:04 +01:00
|
|
|
throw new Exception_GeneralException("This feature is not implemented yet!", 1291824224);
|
2010-11-28 19:35:08 +01:00
|
|
|
}
|
|
|
|
|
2010-11-21 23:48:11 +01:00
|
|
|
/**
|
|
|
|
* Checks whether the buffer contains more lines to process.
|
|
|
|
* @return boolean
|
2010-11-28 19:35:08 +01:00
|
|
|
* @throws Exception_GeneralException
|
2010-11-21 23:48:11 +01:00
|
|
|
*/
|
|
|
|
public function hasLines() {
|
2010-11-28 19:35:08 +01:00
|
|
|
if($this->linebreak === "") throw new Exception_GeneralException("Cannot tell whether the buffer has lines - no linebreak set!", 1290964243);
|
2010-11-21 23:48:11 +01:00
|
|
|
return (trim(strstr($this->buffer, $this->linebreak, TRUE)) !== "") ? TRUE : FALSE;
|
|
|
|
}
|
|
|
|
|
2010-12-01 00:25:15 +01:00
|
|
|
/**
|
|
|
|
* Returns TRUE when there is data in the buffer.
|
|
|
|
* @return boolean
|
|
|
|
*/
|
|
|
|
public function hasData() {
|
|
|
|
return (strlen($this->buffer) > 0) ? TRUE : FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the full buffer contents.
|
|
|
|
* Also truncates the buffer.
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function getAllBufferContents() {
|
|
|
|
$return = $this->buffer;
|
|
|
|
$this->buffer = "";
|
|
|
|
return $return;
|
|
|
|
}
|
|
|
|
|
2010-11-21 23:48:11 +01:00
|
|
|
}
|
|
|
|
?>
|