| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | 
							- <?php
 
- namespace Elgg\Cache;
 
- /**
 
-  * Least Recently Used Cache
 
-  *
 
-  * A fixed sized cache that removes the element used last when it reaches its
 
-  * size limit.
 
-  * 
 
-  * Based on https://github.com/cash/LRUCache
 
-  * 
 
-  * @access private
 
-  * 
 
-  * @package    Elgg.Core
 
-  * @subpackage Cache
 
-  */
 
- class LRUCache implements \ArrayAccess {
 
- 	/** @var int */
 
- 	protected $maximumSize;
 
- 	/**
 
- 	 * The front of the array contains the LRU element
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	protected $data = array();
 
- 	/**
 
- 	 * Create a LRU Cache
 
- 	 *
 
- 	 * @param int $size The size of the cache
 
- 	 * @throws \InvalidArgumentException
 
- 	 */
 
- 	public function __construct($size) {
 
- 		if (!is_int($size) || $size <= 0) {
 
- 			throw new \InvalidArgumentException();
 
- 		}
 
- 		$this->maximumSize = $size;
 
- 	}
 
- 	/**
 
- 	 * Get the value cached with this key
 
- 	 *
 
- 	 * @param int|string $key     The key. Strings that are ints are cast to ints.
 
- 	 * @param mixed      $default The value to be returned if key not found. (Optional)
 
- 	 * @return mixed
 
- 	 */
 
- 	public function get($key, $default = null) {
 
- 		if (isset($this->data[$key])) {
 
- 			$this->recordAccess($key);
 
- 			return $this->data[$key];
 
- 		} else {
 
- 			return $default;
 
- 		}
 
- 	}
 
- 	/**
 
- 	 * Add something to the cache
 
- 	 *
 
- 	 * @param int|string $key   The key. Strings that are ints are cast to ints.
 
- 	 * @param mixed      $value The value to cache
 
- 	 * @return void
 
- 	 */
 
- 	public function set($key, $value) {
 
- 		if (isset($this->data[$key])) {
 
- 			$this->data[$key] = $value;
 
- 			$this->recordAccess($key);
 
- 		} else {
 
- 			$this->data[$key] = $value;
 
- 			if ($this->size() > $this->maximumSize) {
 
- 				// remove least recently used element (front of array)
 
- 				reset($this->data);
 
- 				unset($this->data[key($this->data)]);
 
- 			}
 
- 		}
 
- 	}
 
- 	/**
 
- 	 * Get the number of elements in the cache
 
- 	 *
 
- 	 * @return int
 
- 	 */
 
- 	public function size() {
 
- 		return count($this->data);
 
- 	}
 
- 	/**
 
- 	 * Does the cache contain an element with this key
 
- 	 *
 
- 	 * @param int|string $key The key
 
- 	 * @return boolean
 
- 	 */
 
- 	public function containsKey($key) {
 
- 		return isset($this->data[$key]);
 
- 	}
 
- 	/**
 
- 	 * Remove the element with this key.
 
- 	 *
 
- 	 * @param int|string $key The key
 
- 	 * @return mixed Value or null if not set
 
- 	 */
 
- 	public function remove($key) {
 
- 		if (isset($this->data[$key])) {
 
- 			$value = $this->data[$key];
 
- 			unset($this->data[$key]);
 
- 			return $value;
 
- 		} else {
 
- 			return null;
 
- 		}
 
- 	}
 
- 	/**
 
- 	 * Clear the cache
 
- 	 * 
 
- 	 * @return void
 
- 	 */
 
- 	public function clear() {
 
- 		$this->data = array();
 
- 	}
 
- 	/**
 
- 	 * Moves the element from current position to end of array
 
- 	 * 
 
- 	 * @param int|string $key The key
 
- 	 * @return void
 
- 	 */
 
- 	protected function recordAccess($key) {
 
- 		$value = $this->data[$key];
 
- 		unset($this->data[$key]);
 
- 		$this->data[$key] = $value;
 
- 	}
 
- 	/**
 
- 	 * Assigns a value for the specified key
 
- 	 *
 
- 	 * @see \ArrayAccess::offsetSet()
 
- 	 *
 
- 	 * @param int|string $key   The key to assign the value to.
 
- 	 * @param mixed      $value The value to set.
 
- 	 * @return void
 
- 	 */
 
- 	public function offsetSet($key, $value) {
 
- 		$this->set($key, $value);
 
- 	}
 
- 	/**
 
- 	 * Get the value for specified key
 
- 	 *
 
- 	 * @see \ArrayAccess::offsetGet()
 
- 	 *
 
- 	 * @param int|string $key The key to retrieve.
 
- 	 * @return mixed
 
- 	 */
 
- 	public function offsetGet($key) {
 
- 		return $this->get($key);
 
- 	}
 
- 	/**
 
- 	 * Unsets a key.
 
- 	 *
 
- 	 * @see \ArrayAccess::offsetUnset()
 
- 	 *
 
- 	 * @param int|string $key The key to unset.
 
- 	 * @return void
 
- 	 */
 
- 	public function offsetUnset($key) {
 
- 		$this->remove($key);
 
- 	}
 
- 	/**
 
- 	 * Does key exist?
 
- 	 *
 
- 	 * @see \ArrayAccess::offsetExists()
 
- 	 *
 
- 	 * @param int|string $key A key to check for.
 
- 	 * @return boolean
 
- 	 */
 
- 	public function offsetExists($key) {
 
- 		return $this->containsKey($key);
 
- 	}
 
- }
 
 
  |