diff options
author | Antonio Gallo <tonicucoz@gmail.com> | 2010-10-17 13:29:57 +0000 |
---|---|---|
committer | Antonio Gallo <tonicucoz@gmail.com> | 2010-10-17 13:29:57 +0000 |
commit | 232aa1924c8c0f10d87b210b46c9f061af5c844c (patch) | |
tree | 2351f2aaff7ad244f60358954e4711692fb8aadc /h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php | |
parent | a17e3e0495bee3705d3c1e5ead2db1a8359e64e9 (diff) |
added files
Diffstat (limited to 'h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php')
-rw-r--r-- | h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php new file mode 100644 index 0000000..71bc3f1 --- /dev/null +++ b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php @@ -0,0 +1,178 @@ +<?php + +/* + * This file is part of SwiftMailer. + * (c) 2004-2009 Chris Corbyn + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +//@require 'Swift/InputByteStream.php'; +//@require 'Swift/Filterable.php'; +//@require 'Swift/StreamFilter.php'; + +/** + * Provides the base functionality for an InputStream supporting filters. + * @package Swift + * @subpackage ByteStream + * @author Chris Corbyn + */ +abstract class Swift_ByteStream_AbstractFilterableInputStream + implements Swift_InputByteStream, Swift_Filterable +{ + + /** Write sequence */ + private $_sequence = 0; + + /** StreamFilters */ + private $_filters = array(); + + /** A buffer for writing */ + private $_writeBuffer = ''; + + /** Bound streams */ + private $_mirrors = array(); + + /** + * Commit the given bytes to the storage medium immediately. + * @param string $bytes + * @access protected + */ + abstract protected function _commit($bytes); + + /** + * Flush any buffers/content with immediate effect. + * @access protected + */ + abstract protected function _flush(); + + /** + * Add a StreamFilter to this InputByteStream. + * @param Swift_StreamFilter $filter + * @param string $key + */ + public function addFilter(Swift_StreamFilter $filter, $key) + { + $this->_filters[$key] = $filter; + } + + /** + * Remove an already present StreamFilter based on its $key. + * @param string $key + */ + public function removeFilter($key) + { + unset($this->_filters[$key]); + } + + /** + * Writes $bytes to the end of the stream. + * @param string $bytes + * @throws Swift_IoException + */ + public function write($bytes) + { + $this->_writeBuffer .= $bytes; + foreach ($this->_filters as $filter) + { + if ($filter->shouldBuffer($this->_writeBuffer)) + { + return; + } + } + $this->_doWrite($this->_writeBuffer); + return ++$this->_sequence; + } + + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit() + { + $this->_doWrite($this->_writeBuffer); + } + + /** + * Attach $is to this stream. + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + $this->_mirrors[] = $is; + } + + /** + * Remove an already bound stream. + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->_mirrors as $k => $stream) + { + if ($is === $stream) + { + if ($this->_writeBuffer !== '') + { + $stream->write($this->_filter($this->_writeBuffer)); + } + unset($this->_mirrors[$k]); + } + } + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * @throws Swift_IoException + */ + public function flushBuffers() + { + if ($this->_writeBuffer !== '') + { + $this->_doWrite($this->_writeBuffer); + } + $this->_flush(); + + foreach ($this->_mirrors as $stream) + { + $stream->flushBuffers(); + } + } + + // -- Private methods + + /** Run $bytes through all filters */ + private function _filter($bytes) + { + foreach ($this->_filters as $filter) + { + $bytes = $filter->filter($bytes); + } + return $bytes; + } + + /** Just write the bytes to the stream */ + private function _doWrite($bytes) + { + $this->_commit($this->_filter($bytes)); + + foreach ($this->_mirrors as $stream) + { + $stream->write($bytes); + } + + $this->_writeBuffer = ''; + } + +} |