buffer = ""; $this->linebreak = $linebreak; } /** * Prunes empty lines out of the buffer. * @return void */ protected function pruneEmptyLines() { //no need to do this when there are no linebreaks. if($this->linebreak === "") return; 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 * @throws Exception_GeneralException */ public function getNextLine() { if($this->linebreak === "") throw new Exception_GeneralException("Cannot return a line - no linebreak is set!", 1290964174); 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; } /** * Returns the next $length chars from the buffer. * @return string Returns "" if no */ public function getNextChars($length) { //TODO: substr und so throw new Exception_GeneralException("This feature is not implemented yet!", 1291824224); } /** * Checks whether the buffer contains more lines to process. * @return boolean * @throws Exception_GeneralException */ public function hasLines() { if($this->linebreak === "") throw new Exception_GeneralException("Cannot tell whether the buffer has lines - no linebreak set!", 1290964243); return (trim(strstr($this->buffer, $this->linebreak, TRUE)) !== "") ? TRUE : FALSE; } /** * 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; } } ?>