![]() |
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 |