with Objects; use Objects;
private with Ada.Real_Time;
package Input_Handlers is
type Input_Handler is new Limited_Object with private;
type A_Input_Handler is access all Input_Handler'Class;
function Create_Input_Handler( hertz : Positive ) return A_Input_Handler;
pragma Postcondition( Create_Input_Handler'Result /= null );
procedure Start( this : not null access Input_Handler'Class );
procedure Stop( this : not null access Input_Handler'Class );
procedure Delete( this : in out A_Input_Handler );
pragma Postcondition( this = null );
private
use Ada.Real_Time;
task type Input_Task is
entry Init( in_handler : A_Input_Handler );
entry Start;
entry Stop;
end Input_Task;
type A_Input_Task is access all Input_Task;
procedure Delete( intask : in out A_Input_Task );
type Input_Handler is new Limited_Object with
record
tickDelta : Time_Span := Time_Span_Zero;
process : A_Input_Task := null;
started : Boolean := False;
stopped : Boolean := False;
end record;
procedure Construct( this : access Input_Handler; hertz : Positive );
procedure Delete( this : in out Input_Handler );
end Input_Handlers;