diff options
Diffstat (limited to 'ext/spl/internal/splstack.inc')
-rw-r--r-- | ext/spl/internal/splstack.inc | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/ext/spl/internal/splstack.inc b/ext/spl/internal/splstack.inc index a83d2c4b8e..4d3c62babf 100644 --- a/ext/spl/internal/splstack.inc +++ b/ext/spl/internal/splstack.inc @@ -9,27 +9,40 @@ * SPL - Standard PHP Library */ - /** @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. - * + * 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. + * The SplStack class provides the main functionalities of a + * stack implemented using a doubly linked list (DLL). */ class SplStack extends SplDoublyLinkedList { - /** Changes the iteration mode. For stacks, the direction mode - * is frozen. Attempting to modify it will result in an RuntimeException. + protected $_it_mode = parent::IT_MODE_LIFO; + + /** Changes the iteration mode. There are two orthogonal sets of modes that + * can be set: * - * @throws RuntimeException - * @param $mode new mode of iteration - * @see SplDoublyLinkedList::setIteratorMode + * - 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_LIFO | SplDoublyLnkedList::IT_MODE_KEEP + * + * @note The iteration's direction is not modifiable for stack instances + * @param $mode New mode of iteration + * @throw RuntimeException If the new mode affects the iteration's direction. */ - function setIteratorMode($mode) {/**/} + public function setIteratorMode($mode) + { + if ($mode & parent::IT_MODE_LIFO !== parent::IT_MODE_LIFO) { + throw new RuntimeException("Iterators' LIFO/FIFO modes for SplStack/SplQueue objects are frozen"); + } + + $this->_it_mode = $mode; + } } ?> |