scratch – Blame information for rev 115

Subversion Repositories:
Rev:
Rev Author Line No. Line
115 office 1 <?php
2 /*
3 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14 *
15 * This software consists of voluntary contributions made by many individuals
16 * and is licensed under the MIT license. For more information, see
17 * <http://www.doctrine-project.org>.
18 */
19  
20 namespace Doctrine\Common\Cache;
21  
22 /**
23 * Cache provider that allows to easily chain multiple cache providers
24 *
25 * @author Michaƫl Gallego <mic.gallego@gmail.com>
26 */
27 class ChainCache extends CacheProvider
28 {
29 /**
30 * @var CacheProvider[]
31 */
32 private $cacheProviders = array();
33  
34 /**
35 * Constructor
36 *
37 * @param CacheProvider[] $cacheProviders
38 */
39 public function __construct($cacheProviders = array())
40 {
41 $this->cacheProviders = $cacheProviders;
42 }
43  
44 /**
45 * {@inheritDoc}
46 */
47 public function setNamespace($namespace)
48 {
49 parent::setNamespace($namespace);
50  
51 foreach ($this->cacheProviders as $cacheProvider) {
52 $cacheProvider->setNamespace($namespace);
53 }
54 }
55  
56 /**
57 * {@inheritDoc}
58 */
59 protected function doFetch($id)
60 {
61 foreach ($this->cacheProviders as $key => $cacheProvider) {
62 if ($cacheProvider->doContains($id)) {
63 $value = $cacheProvider->doFetch($id);
64  
65 // We populate all the previous cache layers (that are assumed to be faster)
66 for ($subKey = $key - 1 ; $subKey >= 0 ; $subKey--) {
67 $this->cacheProviders[$subKey]->doSave($id, $value);
68 }
69  
70 return $value;
71 }
72 }
73  
74 return false;
75 }
76  
77 /**
78 * {@inheritDoc}
79 */
80 protected function doContains($id)
81 {
82 foreach ($this->cacheProviders as $cacheProvider) {
83 if ($cacheProvider->doContains($id)) {
84 return true;
85 }
86 }
87  
88 return false;
89 }
90  
91 /**
92 * {@inheritDoc}
93 */
94 protected function doSave($id, $data, $lifeTime = 0)
95 {
96 $stored = true;
97  
98 foreach ($this->cacheProviders as $cacheProvider) {
99 $stored = $cacheProvider->doSave($id, $data, $lifeTime) && $stored;
100 }
101  
102 return $stored;
103 }
104  
105 /**
106 * {@inheritDoc}
107 */
108 protected function doDelete($id)
109 {
110 $deleted = true;
111  
112 foreach ($this->cacheProviders as $cacheProvider) {
113 $deleted = $cacheProvider->doDelete($id) && $deleted;
114 }
115  
116 return $deleted;
117 }
118  
119 /**
120 * {@inheritDoc}
121 */
122 protected function doFlush()
123 {
124 $flushed = true;
125  
126 foreach ($this->cacheProviders as $cacheProvider) {
127 $flushed = $cacheProvider->doFlush() && $flushed;
128 }
129  
130 return $flushed;
131 }
132  
133 /**
134 * {@inheritDoc}
135 */
136 protected function doGetStats()
137 {
138 // We return all the stats from all adapters
139 $stats = array();
140  
141 foreach ($this->cacheProviders as $cacheProvider) {
142 $stats[] = $cacheProvider->doGetStats();
143 }
144  
145 return $stats;
146 }
147 }