| Current Path : /var/www/homesaver/www/bitrix/modules/main/classes/general/ |
| Current File : /var/www/homesaver/www/bitrix/modules/main/classes/general/stack_cache_entry.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage main
* @copyright 2001-2023 Bitrix
*/
class CStackCacheEntry
{
var $entity = "";
var $id = "";
var $values = array();
var $len = 10;
var $ttl = 3600;
var $cleanGet = true;
var $cleanSet = true;
function __construct($entity, $length = 0, $ttl = 0)
{
$this->entity = $entity;
if($length > 0)
$this->len = intval($length);
if($ttl > 0)
$this->ttl = intval($ttl);
}
function SetLength($length)
{
if($length > 0)
$this->len = intval($length);
while(count($this->values) > $this->len)
{
$this->cleanSet = false;
array_shift($this->values);
}
}
function SetTTL($ttl)
{
if($ttl > 0)
$this->ttl = intval($ttl);
}
function Load()
{
global $DB;
$objCache = \Bitrix\Main\Data\Cache::createInstance();
if($objCache->InitCache($this->ttl, $this->entity, $DB->type."/".$this->entity, "stack_cache"))
{
$this->values = $objCache->GetVars();
$this->cleanGet = true;
$this->cleanSet = true;
}
}
function DeleteEntry($id)
{
if(array_key_exists($id, $this->values))
{
unset($this->values[$id]);
$this->cleanSet = false;
}
}
function Clean()
{
global $DB;
$objCache = \Bitrix\Main\Data\Cache::createInstance();
$objCache->Clean($this->entity, $DB->type."/".$this->entity, "stack_cache");
$this->values = array();
$this->cleanGet = true;
$this->cleanSet = true;
}
function Get($id)
{
if(array_key_exists($id, $this->values))
{
$result = $this->values[$id];
//Move accessed value to the top of list only when it is not at the top
end($this->values);
if(key($this->values) !== $id)
{
$this->cleanGet = false;
unset($this->values[$id]);
$this->values = $this->values + array($id => $result);
}
return $result;
}
else
{
return false;
}
}
function Set($id, $value)
{
if(array_key_exists($id, $this->values))
{
unset($this->values[$id]);
$this->values = $this->values + array($id => $value);
}
else
{
$this->values = $this->values + array($id => $value);
while(count($this->values) > $this->len)
array_shift($this->values);
}
$this->cleanSet = false;
}
function Save()
{
if (defined("BITRIX_SKIP_STACK_CACHE") && BITRIX_SKIP_STACK_CACHE)
return;
global $DB;
if(
!$this->cleanSet
|| (
!$this->cleanGet
&& (count($this->values) >= $this->len)
)
)
{
$objCache = \Bitrix\Main\Data\Cache::createInstance();
//Force cache rewrite
$objCache->forceRewriting(true);
if($objCache->startDataCache($this->ttl, $this->entity, $DB->type."/".$this->entity, $this->values, "stack_cache"))
{
$objCache->endDataCache();
}
$this->cleanGet = true;
$this->cleanSet = true;
}
}
}