# SimpleAggregateCache.class.php

Go to the documentation of this file.

    00001 <?php
    00002 /****************************************************************************
    00003  *   Copyright (C) 2010 by Evgeny V. Kokovikhin                             *
    00004  *                                                                          *
    00005  *   This program is free software; you can redistribute it and/or modify   *
    00006  *   it under the terms of the GNU Lesser General Public License as         *
    00007  *   published by the Free Software Foundation; either version 3 of the     *
    00008  *   License, or (at your option) any later version.                        *
    00009  *                                                                          *
    00010  ****************************************************************************/
    00011
    00018     final class SimpleAggregateCache extends AggregateCache
    00019     {
    00020         private $peerAmount = null;
    00021         private $labels     = null;
    00022
    00026         public static function create()
    00027         {
    00028             return new self;
    00029         }
    00030
    00031         public function addPeer(
    00032             $label, CachePeer $peer, $level = self::LEVEL_NORMAL
    00033         )
    00034         {
    00035             parent::addPeer($label, $peer, $level);
    00036
    00037             return $this->dropHelpers();
    00038         }
    00039
    00040         public function dropPeer($label)
    00041         {
    00042             parent::dropPeer($label);
    00043
    00044             return $this->dropHelpers();
    00045         }
    00046
    00047         public function checkAlive()
    00048         {
    00049             parent::checkAlive();
    00050
    00051             return $this->dropHelpers();
    00052         }
    00053
    00057         protected function guessLabel($key)
    00058         {
    00059             if ($this->peerAmount === null)
    00060                 $this->peerAmount = count($this->peers);
    00061
    00062             if ($this->labels === null)
    00063                 $this->labels = array_keys($this->peers);
    00064
    00065             Assert::isGreaterOrEqual($this->peerAmount, 1);
    00066
    00067             return
    00068                 $this->labels[ord(substr($key, -1)) % $this->peerAmount];
    00069         }
    00070
    00071         private function dropHelpers()
    00072         {
    00073             $this->peerAmount   = null;
    00074             $this->labels       = null;
    00075
    00076             return $this;
    00077         }
    00078     }
    00079 ?>