summaryrefslogtreecommitdiff
path: root/ext/spl/internal/splstack.inc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/spl/internal/splstack.inc')
-rw-r--r--ext/spl/internal/splstack.inc37
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;
+ }
}
?>