ILIAS
Release_5_0_x_branch Revision 61816
|
A zipper is a purely-functional data structure which contains a focus that can be efficiently manipulated. More...
Public Member Functions | |
__construct ($front, $back) | |
toArray ($t=NULL) | |
Convert zipper back into a normal array, optionally filling in the hole with a value. | |
next ($t) | |
Move hole to the next element. | |
advance ($t, $n) | |
Iterated hole advancement. | |
prev ($t) | |
Move hole to the previous element. | |
delete () | |
Delete contents of current hole, shifting hole to next element. | |
done () | |
Returns true if we are at the end of the list. | |
insertBefore ($t) | |
Insert element before hole. | |
insertAfter ($t) | |
Insert element after hole. | |
splice ($t, $delete, $replacement) | |
Splice in multiple elements at hole. |
Static Public Member Functions | |
static | fromArray ($array) |
Creates a zipper from an array, with a hole in the 0-index position. |
Data Fields | |
$front | |
$back |
A zipper is a purely-functional data structure which contains a focus that can be efficiently manipulated.
It is known as a "one-hole context". This mutable variant implements a zipper for a list as a pair of two arrays, laid out as follows:
Base list: 1 2 3 4 [ ] 6 7 8 9 Front list: 1 2 3 4 Back list: 9 8 7 6
User is expected to keep track of the "current element" and properly fill it back in as necessary. (ToDo: Maybe it's more user friendly to implicitly track the current element?)
Nota bene: the current class gets confused if you try to store NULLs in the list.
Definition at line 21 of file Zipper.php.
HTMLPurifier_Zipper::__construct | ( | $front, | |
$back | |||
) |
HTMLPurifier_Zipper::advance | ( | $t, | |
$n | |||
) |
Iterated hole advancement.
$t | Element to fill hole with |
$i | How many forward to advance hole |
Definition at line 72 of file Zipper.php.
References $n, $t, and next().
HTMLPurifier_Zipper::delete | ( | ) |
Delete contents of current hole, shifting hole to next element.
Definition at line 94 of file Zipper.php.
HTMLPurifier_Zipper::done | ( | ) |
Returns true if we are at the end of the list.
Definition at line 102 of file Zipper.php.
|
static |
Creates a zipper from an array, with a hole in the 0-index position.
Array | to zipper-ify. |
Definition at line 36 of file Zipper.php.
References $t.
Referenced by HTMLPurifier_Strategy_MakeWellFormed\execute().
HTMLPurifier_Zipper::insertAfter | ( | $t | ) |
HTMLPurifier_Zipper::insertBefore | ( | $t | ) |
Insert element before hole.
Element | to insert |
Definition at line 110 of file Zipper.php.
References $t.
HTMLPurifier_Zipper::next | ( | $t | ) |
Move hole to the next element.
$t | Element to fill hole with |
Definition at line 61 of file Zipper.php.
References $t.
Referenced by advance().
HTMLPurifier_Zipper::prev | ( | $t | ) |
Move hole to the previous element.
$t | Element to fill hole with |
Definition at line 84 of file Zipper.php.
References $t.
HTMLPurifier_Zipper::splice | ( | $t, | |
$delete, | |||
$replacement | |||
) |
Splice in multiple elements at hole.
Functional specification in terms of array_splice:
$arr1 = $arr; $old1 = array_splice($arr1, $i, $delete, $replacement); list($z, $t) = HTMLPurifier_Zipper::fromArray($arr); $t = $z->advance($t, $i); list($old2, $t) = $z->splice($t, $delete, $replacement); $arr2 = $z->toArray($t); assert($old1 === $old2); assert($arr1 === $arr2);
NB: the absolute index location after this operation is unchanged!
Current | contents of hole. |
Definition at line 142 of file Zipper.php.
References $t, and insertAfter().
HTMLPurifier_Zipper::toArray | ( | $t = NULL | ) |
Convert zipper back into a normal array, optionally filling in the hole with a value.
(Usually you should supply a $t, unless you are at the end of the array.)
Definition at line 47 of file Zipper.php.
HTMLPurifier_Zipper::$back |
Definition at line 23 of file Zipper.php.
Referenced by __construct().
HTMLPurifier_Zipper::$front |
Definition at line 23 of file Zipper.php.
Referenced by __construct(), and toArray().