HEX
Server: LiteSpeed
System: Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
User: swifizcd (1555)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/swifizcd/shoppers-joy.com.ng/wp-content/plugins/yaysmtp/vendor_amazon/Aws/LruArrayCache.php
<?php

namespace YaySMTP\Aws3\Aws;

/**
 * Simple in-memory LRU cache that limits the number of cached entries.
 *
 * The LRU cache is implemented using PHP's ordered associative array. When
 * accessing an element, the element is removed from the hash and re-added to
 * ensure that recently used items are always at the end of the list while
 * least recently used are at the beginning. When a value is added to the
 * cache, if the number of cached items exceeds the allowed number, the first
 * N number of items are removed from the array.
 */
class LruArrayCache implements \YaySMTP\Aws3\Aws\CacheInterface, \Countable {
  /** @var int */
  private $maxItems;
  /** @var array */
  private $items = array();
  /**
   * @param int $maxItems Maximum number of allowed cache items.
   */
  public function __construct($maxItems = 1000) {
    $this->maxItems = $maxItems;
  }
  public function get($key) {
    if (!isset($this->items[$key])) {
      return null;
    }
    $entry = $this->items[$key];
    // Ensure the item is not expired.
    if (!$entry[1] || time() < $entry[1]) {
      // LRU: remove the item and push it to the end of the array.
      unset($this->items[$key]);
      $this->items[$key] = $entry;
      return $entry[0];
    }
    unset($this->items[$key]);
    return null;
  }
  public function set($key, $value, $ttl = 0) {
    // Only call time() if the TTL is not 0/false/null
    $ttl = $ttl ? time() + $ttl : 0;
    $this->items[$key] = [$value, $ttl];
    // Determine if there are more items in the cache than allowed.
    $diff = count($this->items) - $this->maxItems;
    // Clear out least recently used items.
    if ($diff > 0) {
      // Reset to the beginning of the array and begin unsetting.
      reset($this->items);
      for ($i = 0; $i < $diff; $i++) {
        unset($this->items[key($this->items)]);
        next($this->items);
      }
    }
  }
  public function remove($key) {
    unset($this->items[$key]);
  }
  /**
   * @return int
   */
  #[\ReturnTypeWillChange]
  public function count() {
    return count($this->items);
  }
}