All pastes #904900 Raw Edit

APPLE IPHONES FOR SALE$250/NOKIA

public text v1 · immutable
·published 2008-02-15 11:20 UTC
rendered paste body
-- GENERIC PACKAGE FOR QUEUES
   --------------------------

-- Last Modified By: Mats Weber
-- Last Modified On: Mon Jun  8 11:46:32 1998
-- Update Count    : 10

-- Revision : 19-May-1998 by Mats Weber, made full view of type Queue limited.
-- Revision : 18-Nov-1993 by Mats Weber, added generic procedure Update_All.
-- Revision :  8-SEP-1988 by Mats Weber, added procedure GET(QUEUE).
-- Revision : 31-AUG-1988 by Mats Weber, added procedures ASSIGN and SWAP.
-- Revision : 12-APR-1988 by Mats Weber, added function "=" (QUEUE, QUEUE) : BOOLEAN
--                                       and generic formal type COUNT,
--                                       and changed parameter names.

-- Creation : 28-JUL-1985 by Mats Weber


generic
   type Item_Type is private;
   type Count is range <>;     -- must include 0
package Queues is
--------------

   type Queue is limited private;
   ----------

   subtype Natural_Count is Count range 0 .. Count'Last;


   procedure Put (Item : in Item_Type; Into : in out Queue);
   procedure Get (From : in out Queue; Item : out Item_Type);
   procedure Get (From : in out Queue);

   function First  (Of_Queue  : Queue) return Item_Type;
   function Last   (Of_Queue  : Queue) return Item_Type;
   function Length (Of_Queue  : Queue) return Natural_Count;
   function Empty  (The_Queue : Queue) return Boolean;

   function "=" (Left, Right : Queue) return Boolean;
      -- Returns TRUE if and only if both queues have the same
      -- contents in the same sequence.

   generic
      with procedure Action (Item : in Item_Type);
   procedure Traversal (On_Queue : in Queue);
      -- Calls ACTION for all items in the queue, from FIRST to LAST.

   generic
      with procedure Update_Item (Item : in out Item_Type);
   procedure Update_All (On_Queue : in out Queue);
      -- Calls UPDATE_ITEM for all items in the queue, from FIRST to LAST.

   procedure Assign (Object : in out Queue; Value : in Queue);
      -- OBJECT := VALUE.

   procedure Swap (Left, Right : in out Queue);
      -- Exchanges LEFT and RIGHT.

   procedure Destroy (The_Queue : in out Queue);
      -- Removes all items from THE_QUEUE.

   Queue_Empty : exception;

private

   type Cell;

   type Link is access Cell;

   type Cell is
      record
         Val  : Item_Type;
         Next : Link;
      end record;

   type Queue is limited
      record
         First, Last : Link;
         Length      : Natural_Count := 0;
      end record;


   pragma Inline(Put, Get, First, Last, Length, Empty, Swap);

end Queues;