-- Copyright (c) 1995/6    John Beidler
--                         Computing Sciences Dept.
--                         Univ. of Scranton, Scranton, PA 18510
--
--                         (717) 941-7446 voice
--                         (717) 941-4250 FAX
--                         beidler@cs.uofs.edu
--
--  For use by non-profit educational institutions only.
--  This software is GUARANTEED.  Please report any errors.  All
--  corrections will be made as soon as possible (normally within
--  one working day).
------------------------------------------------------------------
package List_Polymorphic_Cntl.Iterators is

type Process_Type is access
   procedure (Object  : in out Holder_Class_Ptr;
              Continue: in out Boolean);

procedure Front_To_Rear (List   : in     List_Type;
                         Process:        Process_Type);
   ----------------------------------------------------
   --  Iterate through the list recursively performing
   --  Process on each object on the way down the structure
   --  until Continue is set to false, or until all objects
   --  are visited
   ----------------------------------------------------

procedure Rear_To_Front (List   : in     List_Type;
                         Process:        Process_Type);
   ----------------------------------------------------
   --  Iterate through the list recursively performing
   --  Process on each object on the way up the structure
   --  until Continue is set to false, or until all objects
   --  are visited
   ----------------------------------------------------

procedure Round_Trip (List     : in     List_Type;
                      Down_Proc,
                      Up_Proc  :        Process_Type);
   ----------------------------------------------------
   --  Iterate through the list recursively performing
   --  Down_Proc on each object on the way down the structure
   --  and performing Up_Proc on each object on the way back
   --  until Continue is set to false, or until all objects
   --  are visited in both directions
   ----------------------------------------------------

end List_Polymorphic_Cntl.Iterators;