diff --git a/ext/spl/spl.php b/ext/spl/spl.php index bb6af7e..625910b 100755 --- a/ext/spl/spl.php +++ b/ext/spl/spl.php @@ -105,13 +105,21 @@ * - interface SplSubject * - class SplObjectStorage * - * 8) @ref Examples + * 8) Datastructures + * + * SPL proposes a set of datastructures implemented internally. + * + * - class SplDoublyLinkedList + * - class SplStack extends SplDoublyLinkedList + * - class SplQueue extends SplDoublyLinkedList + * + * 9) @ref Examples * * The classes and interfaces in this group are contained as PHP code in the * examples subdirectory of ext/SPL. Sooner or later they will be moved to * c-code. * - * 9) Some articles about SPL: + * 10) Some articles about SPL: * - Introduction to Standard PHP Library (SPL) * - Introducing PHP 5's Standard Library * - Iterators in PHP5 @@ -120,13 +128,13 @@ * - The Standard PHP Library, Part 2 * - Die Standard PHP Library (SPL) [german] * - * 10) Talks on SPL: + * 11) Talks on SPL: * - SPL Update [pps], [pdf] * - Happy SPLing [pps], [pdf] * - From engine overloading to SPL [pps], [pdf] * - SPL for the masses [pps], [pdf] * - * 11) Debug sessions: + * 12) Debug sessions: * - Debug session 1 [pps], [pdf] * - Debug session 2 [pps], [pdf], [swf] * - Debug session 3 [pps], [pdf] @@ -1138,4 +1146,151 @@ interface SplSubject function notify(); } +/** @ingroup SPL + * @brief Doubly Linked List + * @since PHP 5.3 + * + * The SplDoublyLinkedList class provides the main functionnalities of a + * doubly linked list (DLL). + */ +class SplDoublyLinkedList implements Traversable, ArrayAccess, Countable +{ + + /** Iterator mode + * @see setIteratorMode + */ + const IT_MODE_LIFO = 0x00000001; + + /** Iterator mode + * @see setIteratorMode + */ + const IT_MODE_FIFO = 0x00000000; + + + /** Iterator mode + * @see setIteratorMode + */ + const IT_MODE_KEEP = 0x00000000; + + /** Iterator mode + * @see setIteratorMode + */ + const IT_MODE_DELETE = 0x00000002; + + /** @return the element popped from the end of the DLL. + */ + function pop() {/**/} + + /** @return the element shifted from the beginning of the DLL. + */ + function shift() {/**/} + + /** Pushes an element to the end of the DLL. + * @param $data variable to add to the DLL. + */ + function push($data) {/**/} + + /** Adds an element to the beginning of the DLL. + * @param $data variable to add to the DLL. + */ + function unshift($data) {/**/} + + /** @return the element at the beginning of the DLL. + */ + function top() {/**/} + + /** @return the element at the end of the DLL. + */ + function bottom() {/**/} + + /** @return number elements in the DLL. + */ + function count() {/**/} + + /** @return whether the DLL is empty. + */ + function isEmpty() {/**/} + + /** Changes the iteration mode. There are two orthogonal sets of modes that + * can be set: + * - The direction of the iteration (either one or the other) + * - SplDoublyLnkedList::IT_MODE_LIFO (Stack style) + * - SplDoublyLnkedList::IT_MODE_FIFO (Queue style) + * + * - The behavior of the iterator (either one or the other) + * - SplDoublyLnkedList::IT_MODE_DELETE (Elements are deleted by the iterator) + * - SplDoublyLnkedList::IT_MODE_KEEP (Elements are traversed by the iterator) + * + * The default mode is 0 : SplDoublyLnkedList::IT_MODE_FIFO | SplDoublyLnkedList::IT_MODE_KEEP + * + * @param $mode new mode of iteration + */ + function setIteratorMode($mode) {/**/} + + /** @return the current iteration mode + * @see setIteratorMode + */ + function getIteratorMode() {/**/} + +} + +/** @ingroup SPL + * @brief Implementation of a stack through a DoublyLinkedList. As SplStack + * extends SplDoublyLinkedList, shift() and unshift() are still available even + * though they don't make much sense for a stack. + * + * @since PHP 5.3 + * + * The SplStack class provides the main functionnalities of a + * stack implemented by a doubly linked list. + */ +class SplStack extends SplDoublyLinkedList +{ + /** Changes the iteration mode. For stacks, the direction mode + * is frozen. Attempting to modify it will result in an RuntimeException. + * + * @throws RuntimeException + * @param $mode new mode of iteration + * @see SplDoublyLinkedList::setIteratorMode + */ + function setIteratorMode($mode) {/**/} +} + +/** @ingroup SPL + * @brief Implementation of a Queue through a DoublyLinkedList. As SplQueue + * extends SplDoublyLinkedList, unshift() and pop() are still available even + * though they don't make much sense for a queue. For convenience, two aliases + * are available: + * - enqueue() is an alias of push() + * - dequeue() is an alias of shift() + * + * @since PHP 5.3 + * + * The SplQueue class provides the main functionnalities of a + * queue implemented by a doubly linked list. + */ +class SplQueue extends SplDoublyLinkedList +{ + /** Changes the iteration mode. For queues, the direction mode + * is frozen. Attempting to modify it will result in an RuntimeException. + * + * @throws RuntimeException + * @param $mode new mode of iteration + * @see SplDoublyLinkedList::setIteratorMode + */ + function setIteratorMode($mode) {/**/} + + /** @return the first element of the queue. + * @note dequeue is an alias of push() + * @see splDoublyLinkedList::push() + */ + function dequeue() {/**/} + + /** Pushes an element at the end of the queue. + * @param $data variable to add to the queue. + * @note enqueue is an alias of shift() + * @see splDoublyLinkedList::shift() + */ + function enqueue($data) {/**/} +} ?>