Project

General

Profile

Producer

This is a producer code sample

with Types_Definitions_Tp;
with Buffers;

package body Narval.Actors.Actives.Producers.Tp is

   use Log4ada.Loggers;

   procedure On_Stop (Object : access Tp_Producer_Type) is
   begin
      Producers.On_Stop (Producer_Access (Object));
      Info_Out (Object.Logger'Access,
                "Producer => number of events :" &
                  Object.Number_Of_Event_Produced'Img);
   end On_Stop;

   ---------------------
   -- Buffer_Handling --
   ---------------------
   procedure Buffer_Handling
     (Object : access Tp_Producer_Type) is
      Buffer_Handle : Buffers.Buffer_Handle_Type;
      Output_Address : System.Address;
      use Buffers;
   begin
      select
         Object.Outputs (1).Buffer.Get_Free_Buffer (Buffer_Handle);
         Output_Address := Buffer_Handle.Get_Address;
         declare
            Data : Types_Definitions_Tp.Event_Type;
            for Data'Address use Output_Address;
            use type Interfaces.Unsigned_64;
         begin
            Data.Words (Data.Words'First) := Object.Number_Of_Event_Produced;
            Object.Number_Of_Event_Produced := Object.Number_Of_Event_Produced + 1;
            Buffer_Handle.Set_Used_Bytes (Data'Size / 8);
         end;
         Object.Outputs (1).Buffer.Release_Free_Buffer (Buffer_Handle);
      or
         delay 1.0;
      end select;
   end Buffer_Handling;

end Narval.Actors.Actives.Producers.Tp;