<?php
 
/**
 
* Queue class - under PHP 4
 
*
 
* @description This is an implementation of FIFO (First In First Out) queue.
 
*
 
* @copyright (c) 2003 Michal 'Seth' Golebiowski <sethmail at poczta dot fm>
 
*   Released under the GNU General Public License
 
*   license is attached to package in license.txt file
 
*
 
* @updated 10.08.2003
 
*
 
* @example example.php4 Simple example of puting ang geting datas from queue
 
*
 
* @requirement PHP 4
 
*
 
*
 
*
 
*
 
* @greetings goes to all developers from Poland especially from php.pl :-)
 
*/
 
 
 
/**
 
* Default size of queue
 
*/
 
define( 'QUEUE_DEFAULT_SIZE', 15 );
 
 
 
/**
 
* Implementation of FIFO queue
 
* @version 1.9
 
*/
 
class Queue
 
{
 
  var
 
    $arrQueue,       // Array of queue items
 
    $intBegin,       // Begin of queue - head
 
    $intEnd,         // End of queue - tail
 
    $intArraySize,   // Size of array
 
    $intCurrentSize; // Current size of array
 
 
 
  /**
 
  * Queue constructor
 
  * @param int $intQueue - size of queue
 
  */
 
  function Queue( $intSize = QUEUE_DEFAULT_SIZE )
 
  {
 
    $this->arrQueue     = Array();
 
    $this->intArraySize = $intSize;
 
 
    $this->Clear();
 
  }
 
  
 
 
  /**
 
  * Add item to queue
 
  * @param obj &$objQueueItem - queue item object
 
  * @return true if added to queue or false if queue is full and item could not be added
 
  */
 
  function Put( &$objQueueItem  )
 
  {
 
    if ( $this->intCurrentSize >= $this->intArraySize )
 
    {
 
      return false;
 
    }
 
 
    if ( $this->intEnd == $this->intArraySize - 1 )
 
    {
 
      $this->intEnd = 0;
 
    }
 
    else
 
    {
 
      $this->intEnd++;
 
    }
 
    
 
    $this->arrQueue[ $this->intEnd ] = $objQueueItem;
 
    $this->intCurrentSize++;
 
    
 
    return true;
 
  }
 
  
 
 
  /**
 
  * Get item from queue
 
  * @return object (queue iteme) or false if there is now items in queue
 
  */
 
  function Get()
 
  {
 
    if ( $this->IsEmpty() ){
 
      return false;
 
    }
 
    
 
    $objItem = $this->arrQueue[$this->intBegin];
 
    
 
    if ( $this->intBegin == $this->intArraySize - 1 )
 
    {
 
      $this->intBegin = 0;
 
    }
 
    else
 
    {
 
      $this->intBegin++;
 
    }
 
    
 
    $this->intCurrentSize--;
 
    
 
    return $objItem;
 
  }
 
 
 
  /**
 
  * Check if queue is empty
 
  * @return true if it is empty or false if not
 
  */
 
  function IsEmpty()
 
  {
 
    return ( $this->intCurrentSize == 0 ? true : false );
 
  }
 
 
 
  /**
 
  * Clear queue
 
  */
 
  function Clear()
 
  {
 
    $this->arrCurrentSize = 0;
 
    $this->intBegin       = 0;
 
    $this->intEnd         = $this->intArraySize - 1;
 
  }
 
}
 
?>
 
 
 |