1<?php
2
3/**
4 * This is in almost every respect equivalent to an array except
5 * that it keeps track of which keys were accessed.
6 *
7 * @warning For the sake of backwards compatibility with early versions
8 *     of PHP 5, you must not use the $hash[$key] syntax; if you do
9 *     our version of offsetGet is never called.
10 */
11class HTMLPurifier_StringHash extends ArrayObject
12{
13    /**
14     * @type array
15     */
16    protected $accessed = array();
17
18    /**
19     * Retrieves a value, and logs the access.
20     * @param mixed $index
21     * @return mixed
22     */
23    public function offsetGet($index)
24    {
25        $this->accessed[$index] = true;
26        return parent::offsetGet($index);
27    }
28
29    /**
30     * Returns a lookup array of all array indexes that have been accessed.
31     * @return array in form array($index => true).
32     */
33    public function getAccessed()
34    {
35        return $this->accessed;
36    }
37
38    /**
39     * Resets the access array.
40     */
41    public function resetAccessed()
42    {
43        $this->accessed = array();
44    }
45}
46
47// vim: et sw=4 sts=4
48