generic

    type Object_Type is private;
    Object : in out Object_Type;

    Read_Time_Limit : in Duration := Duration'Last;
    Write_Time_Limit : in Duration := Duration'Last;

    -- FOR TESTING ONLY
    with procedure Read_Put (Item : in Object_Type) is <>;

    -- FOR TESTING ONLY
    with procedure Write_Put (Item : in Object_Type) is <>;

    -- FOR TESTING ONLY
    with procedure Copy (From : in Object_Type; To : in out Object_Type);

package Shared_Variable is

    -- FOR TESTING ONLY: ITEM MADE "IN OUT" INSTEAD OF "OUT"
    procedure Read (Item : in out Object_Type);
    procedure Write (Item : in Object_Type);

    Timed_Out : exception;

end Shared_Variable;