1<?php 2 3/** @file splqueue.inc 4 * @ingroup SPL 5 * @brief class SplQueue 6 * @author Etienne Kneuss 7 * @date 2008 - 2009 8 * 9 * SPL - Standard PHP Library 10 */ 11 12/** @ingroup SPL 13 * @brief Implementation of a Queue through a DoublyLinkedList. As SplQueue 14 * extends SplDoublyLinkedList, unshift() and pop() are still available 15 * even though they don't make much sense for a queue. For convenience, 16 * two aliases are available: 17 * - enqueue() is an alias of push() 18 * - dequeue() is an alias of shift() 19 * 20 * @since PHP 5.3 21 * 22 * The SplQueue class provides the main functionalities of a 23 * queue implemented using a doubly linked list (DLL). 24 */ 25class SplQueue extends SplDoublyLinkedList 26{ 27 protected $_it_mode = parent::IT_MODE_FIFO; 28 29 /** Changes the iteration mode. There are two orthogonal sets of modes that 30 * can be set: 31 * 32 * - The behavior of the iterator (either one or the other) 33 * - SplDoublyLnkedList::IT_MODE_DELETE (Elements are deleted by the iterator) 34 * - SplDoublyLnkedList::IT_MODE_KEEP (Elements are traversed by the iterator) 35 * 36 * The default mode is 0 : SplDoublyLnkedList::IT_MODE_LIFO | SplDoublyLnkedList::IT_MODE_KEEP 37 * 38 * @note The iteration's direction is not modifiable for queue instances 39 * @param $mode New mode of iteration 40 * @throw RuntimeException If the new mode affects the iteration's direction. 41 */ 42 public function setIteratorMode($mode) 43 { 44 if ($mode & parent::IT_MODE_LIFO === parent::IT_MODE_LIFO) { 45 throw new RuntimeException("Iterators' LIFO/FIFO modes for SplStack/SplQueue objects are frozen"); 46 } 47 48 $this->_it_mode = $mode; 49 } 50 51 /** @return the first element of the queue. 52 * @note dequeue is an alias of push() 53 * @see splDoublyLinkedList::push() 54 */ 55 public function dequeue() 56 { 57 return parent::shift(); 58 } 59 60 /** Pushes an element at the end of the queue. 61 * @param $data variable to add to the queue. 62 * @note enqueue is an alias of shift() 63 * @see splDoublyLinkedList::shift() 64 */ 65 public function enqueue($data) 66 { 67 return parent::push($data); 68 } 69} 70 71?> 72