mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-27 02:16:20 +00:00
96d4a3ecf7
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
96 lines
2.6 KiB
PHP
96 lines
2.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Registry object that contains information about the current context.
|
|
* @warning Is a bit buggy when variables are set to null: it thinks
|
|
* they don't exist! So use false instead, please.
|
|
* @note Since the variables Context deals with may not be objects,
|
|
* references are very important here! Do not remove!
|
|
*/
|
|
class HTMLPurifier_Context
|
|
{
|
|
|
|
/**
|
|
* Private array that stores the references.
|
|
* @type array
|
|
*/
|
|
private $_storage = array();
|
|
|
|
/**
|
|
* Registers a variable into the context.
|
|
* @param string $name String name
|
|
* @param mixed $ref Reference to variable to be registered
|
|
*/
|
|
public function register($name, &$ref)
|
|
{
|
|
if (array_key_exists($name, $this->_storage)) {
|
|
trigger_error(
|
|
"Name $name produces collision, cannot re-register",
|
|
E_USER_ERROR
|
|
);
|
|
return;
|
|
}
|
|
$this->_storage[$name] =& $ref;
|
|
}
|
|
|
|
/**
|
|
* Retrieves a variable reference from the context.
|
|
* @param string $name String name
|
|
* @param bool $ignore_error Boolean whether or not to ignore error
|
|
* @return mixed
|
|
*/
|
|
public function &get($name, $ignore_error = false)
|
|
{
|
|
if (!array_key_exists($name, $this->_storage)) {
|
|
if (!$ignore_error) {
|
|
trigger_error(
|
|
"Attempted to retrieve non-existent variable $name",
|
|
E_USER_ERROR
|
|
);
|
|
}
|
|
$var = null; // so we can return by reference
|
|
return $var;
|
|
}
|
|
return $this->_storage[$name];
|
|
}
|
|
|
|
/**
|
|
* Destroys a variable in the context.
|
|
* @param string $name String name
|
|
*/
|
|
public function destroy($name)
|
|
{
|
|
if (!array_key_exists($name, $this->_storage)) {
|
|
trigger_error(
|
|
"Attempted to destroy non-existent variable $name",
|
|
E_USER_ERROR
|
|
);
|
|
return;
|
|
}
|
|
unset($this->_storage[$name]);
|
|
}
|
|
|
|
/**
|
|
* Checks whether or not the variable exists.
|
|
* @param string $name String name
|
|
* @return bool
|
|
*/
|
|
public function exists($name)
|
|
{
|
|
return array_key_exists($name, $this->_storage);
|
|
}
|
|
|
|
/**
|
|
* Loads a series of variables from an associative array
|
|
* @param array $context_array Assoc array of variables to load
|
|
*/
|
|
public function loadArray($context_array)
|
|
{
|
|
foreach ($context_array as $key => $discard) {
|
|
$this->register($key, $context_array[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// vim: et sw=4 sts=4
|