This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
lnkohana/modules/khemail/vendor/swift/classes/Swift/KeyCache/ArrayKeyCache.php
2013-04-22 14:19:54 +10:00

210 lines
5.1 KiB
PHP

<?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/KeyCache.php';
//@require 'Swift/KeyCacheInputStream.php';
//@require 'Swift/InputByteStream.php';
//@require 'Swift/OutputByteStrean.php';
//@require 'Swift/SwiftException.php';
/**
* A basic KeyCache backed by an array.
* @package Swift
* @subpackage KeyCache
* @author Chris Corbyn
*/
class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
{
/**
* Cache contents.
* @var array
* @access private
*/
private $_contents = array();
/**
* An InputStream for cloning.
* @var Swift_KeyCache_KeyCacheInputStream
* @access private
*/
private $_stream;
/**
* Create a new ArrayKeyCache with the given $stream for cloning to make
* InputByteStreams.
* @param Swift_KeyCache_KeyCacheInputStream $stream
*/
public function __construct(Swift_KeyCache_KeyCacheInputStream $stream)
{
$this->_stream = $stream;
}
/**
* Set a string into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param string $string
* @param int $mode
* @see MODE_WRITE, MODE_APPEND
*/
public function setString($nsKey, $itemKey, $string, $mode)
{
$this->_prepareCache($nsKey);
switch ($mode)
{
case self::MODE_WRITE:
$this->_contents[$nsKey][$itemKey] = $string;
break;
case self::MODE_APPEND:
if (!$this->hasKey($nsKey, $itemKey))
{
$this->_contents[$nsKey][$itemKey] = '';
}
$this->_contents[$nsKey][$itemKey] .= $string;
break;
default:
throw new Swift_SwiftException(
'Invalid mode [' . $mode . '] used to set nsKey='.
$nsKey . ', itemKey=' . $itemKey
);
}
}
/**
* Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @param Swift_OutputByteStream $os
* @param int $mode
* @see MODE_WRITE, MODE_APPEND
*/
public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os,
$mode)
{
$this->_prepareCache($nsKey);
switch ($mode)
{
case self::MODE_WRITE:
$this->clearKey($nsKey, $itemKey);
case self::MODE_APPEND:
if (!$this->hasKey($nsKey, $itemKey))
{
$this->_contents[$nsKey][$itemKey] = '';
}
while (false !== $bytes = $os->read(8192))
{
$this->_contents[$nsKey][$itemKey] .= $bytes;
}
break;
default:
throw new Swift_SwiftException(
'Invalid mode [' . $mode . '] used to set nsKey='.
$nsKey . ', itemKey=' . $itemKey
);
}
}
/**
* Provides a ByteStream which when written to, writes data to $itemKey.
* NOTE: The stream will always write in append mode.
* @param string $nsKey
* @param string $itemKey
* @return Swift_InputByteStream
*/
public function getInputByteStream($nsKey, $itemKey,
Swift_InputByteStream $writeThrough = null)
{
$is = clone $this->_stream;
$is->setKeyCache($this);
$is->setNsKey($nsKey);
$is->setItemKey($itemKey);
if (isset($writeThrough))
{
$is->setWriteThroughStream($writeThrough);
}
return $is;
}
/**
* Get data back out of the cache as a string.
* @param string $nsKey
* @param string $itemKey
* @return string
*/
public function getString($nsKey, $itemKey)
{
$this->_prepareCache($nsKey);
if ($this->hasKey($nsKey, $itemKey))
{
return $this->_contents[$nsKey][$itemKey];
}
}
/**
* Get data back out of the cache as a ByteStream.
* @param string $nsKey
* @param string $itemKey
* @param Swift_InputByteStream $is to write the data to
*/
public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is)
{
$this->_prepareCache($nsKey);
$is->write($this->getString($nsKey, $itemKey));
}
/**
* Check if the given $itemKey exists in the namespace $nsKey.
* @param string $nsKey
* @param string $itemKey
* @return boolean
*/
public function hasKey($nsKey, $itemKey)
{
$this->_prepareCache($nsKey);
return array_key_exists($itemKey, $this->_contents[$nsKey]);
}
/**
* Clear data for $itemKey in the namespace $nsKey if it exists.
* @param string $nsKey
* @param string $itemKey
*/
public function clearKey($nsKey, $itemKey)
{
unset($this->_contents[$nsKey][$itemKey]);
}
/**
* Clear all data in the namespace $nsKey if it exists.
* @param string $nsKey
*/
public function clearAll($nsKey)
{
unset($this->_contents[$nsKey]);
}
// -- Private methods
/**
* Initialize the namespace of $nsKey if needed.
* @param string $nsKey
* @access private
*/
private function _prepareCache($nsKey)
{
if (!array_key_exists($nsKey, $this->_contents))
{
$this->_contents[$nsKey] = array();
}
}
}