$front
$front
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.
splice(mixed $t, mixed $delete, mixed $replacement) : mixed
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!
mixed | $t | |
mixed | $delete | |
mixed | $replacement |