1<?php
2
3/*
4 * This file is part of the Assetic package, an OpenSky project.
5 *
6 * (c) 2010-2014 OpenSky Project Inc
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Assetic\Cache;
13
14/**
15 * Uses APC to cache files
16 *
17 * @author André Roaldseth <andre@roaldseth.net>
18 */
19class ApcCache implements CacheInterface
20{
21    public $ttl = 0;
22
23    /**
24     * @see CacheInterface::has()
25     */
26    public function has($key)
27    {
28        return apc_exists($key);
29    }
30
31    /**
32     * @see CacheInterface::get()
33     */
34    public function get($key)
35    {
36        $value = apc_fetch($key, $success);
37
38        if (!$success) {
39            throw new \RuntimeException('There is no cached value for '.$key);
40        }
41
42        return $value;
43    }
44
45    /**
46     * @see CacheInterface::set()
47     */
48    public function set($key, $value)
49    {
50        $store = apc_store($key, $value, $this->ttl);
51
52        if (!$store) {
53            throw new \RuntimeException('Unable to store "'.$key.'" for '.$this->ttl.' seconds.');
54        }
55
56        return $store;
57    }
58
59    /**
60     * @see CacheInterface::remove()
61     */
62    public function remove($key)
63    {
64        return apc_delete($key);
65    }
66}
67