with Gmface.Gm_MIDI.Instruments;       use Gmface.Gm_MIDI.Instruments;
with Gmface.Gm_Virtual;                use Gmface.Gm_Virtual;
with Gmface.Gm_Processing.Gm_Common;   use Gmface.Gm_Processing.Gm_Common;
with Gmface.Gm_Processing.Gm_Plugins;  use Gmface.Gm_Processing.Gm_Plugins;

package Gmface.Gm_Processing.Gm_Work_Processing is
         
   type Gm_Plugin_Processing_Access is access all Gm_Plugin_Processing'Class;
   
   
   
   --  function Process_Initialize(Class : in Plugin_Enum;
   --  			       Plugin : in Abstract_Plugin_Access)
   --  			      return Plugin_Processing_Access is abstract;
   
   
   type Process_Array is array (Plugin_Num'Range) of Gm_Plugin_Processing_Access;
   

   type Work_Processing_Record is abstract tagged limited
      record	 
	 Box          : aliased Messages_box;	 
	 Processes    : Process_Array;	 	 	 
	 Instruments   : access Bandmaster_Record;
      end record;
   
   procedure Initialize(Processing : in out Work_Processing_Record;
			Work       : in Work_Access;
			Insts      : access Bandmaster_record)
      is abstract;
   
   
   
   type Work_Processing_Access is access all Work_Processing_Record'Class;
   
   type Work_Process_Array is array (Work_Num'Range) of Work_Processing_Access;
   
end Gmface.Gm_Processing.Gm_Work_Processing;