Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Cache; Chris@0: Chris@0: /** Chris@0: * Array cache driver. Chris@0: * Chris@0: * @link www.doctrine-project.org Chris@0: * @since 2.0 Chris@0: * @author Benjamin Eberlei Chris@0: * @author Guilherme Blanco Chris@0: * @author Jonathan Wage Chris@0: * @author Roman Borschel Chris@0: * @author David Abdemoulaie Chris@0: */ Chris@0: class ArrayCache extends CacheProvider Chris@0: { Chris@0: /** Chris@0: * @var array[] $data each element being a tuple of [$data, $expiration], where the expiration is int|bool Chris@0: */ Chris@0: private $data = []; Chris@0: Chris@0: /** Chris@0: * @var int Chris@0: */ Chris@0: private $hitsCount = 0; Chris@0: Chris@0: /** Chris@0: * @var int Chris@0: */ Chris@0: private $missesCount = 0; Chris@0: Chris@0: /** Chris@0: * @var int Chris@0: */ Chris@0: private $upTime; Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function __construct() Chris@0: { Chris@0: $this->upTime = time(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFetch($id) Chris@0: { Chris@0: if (! $this->doContains($id)) { Chris@0: $this->missesCount += 1; Chris@0: Chris@0: return false; Chris@0: } Chris@0: Chris@0: $this->hitsCount += 1; Chris@0: Chris@0: return $this->data[$id][0]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doContains($id) Chris@0: { Chris@0: if (! isset($this->data[$id])) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: $expiration = $this->data[$id][1]; Chris@0: Chris@0: if ($expiration && $expiration < time()) { Chris@0: $this->doDelete($id); Chris@0: Chris@0: return false; Chris@0: } Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doSave($id, $data, $lifeTime = 0) Chris@0: { Chris@0: $this->data[$id] = [$data, $lifeTime ? time() + $lifeTime : false]; Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doDelete($id) Chris@0: { Chris@0: unset($this->data[$id]); Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doFlush() Chris@0: { Chris@0: $this->data = []; Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function doGetStats() Chris@0: { Chris@0: return [ Chris@0: Cache::STATS_HITS => $this->hitsCount, Chris@0: Cache::STATS_MISSES => $this->missesCount, Chris@0: Cache::STATS_UPTIME => $this->upTime, Chris@0: Cache::STATS_MEMORY_USAGE => null, Chris@0: Cache::STATS_MEMORY_AVAILABLE => null, Chris@0: ]; Chris@0: } Chris@0: }