API - XOOPS 2.5.11 Beta 2
By monxoops.fr
|
Public Member Functions | |
__construct ($front, $back) | |
toArray ($t=NULL) | |
next ($t) | |
advance ($t, $n) | |
prev ($t) | |
delete () | |
done () | |
insertBefore ($t) | |
insertAfter ($t) | |
splice ($t, $delete, $replacement) | |
Static Public Member Functions | |
static | fromArray ($array) |
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.
__construct | ( | $front, | |
$back | |||
) |
advance | ( | $t, | |
$n | |||
) |
Iterated hole advancement.
$t | Element to fill hole with |
$i | How many forward to advance hole |
delete | ( | ) |
Delete contents of current hole, shifting hole to next element.
done | ( | ) |
Returns true if we are at the end of the list.
|
static |
Creates a zipper from an array, with a hole in the 0-index position.
Array | to zipper-ify. |
insertAfter | ( | $t | ) |
Insert element after hole.
Element | to insert |
insertBefore | ( | $t | ) |
Insert element before hole.
Element | to insert |
next | ( | $t | ) |
Move hole to the next element.
$t | Element to fill hole with |
prev | ( | $t | ) |
Move hole to the previous element
$t | Element to fill hole with |
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. |
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.)
$back |
$front |