with Readers_Writers;
use Readers_Writers;
pragma Elaborate (Readers_Writers);
package body Shared_Variable is

    C : Control;

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

        select
            C.Start (Read);
        or
            delay Read_Time_Limit;
            raise Timed_Out;
        end select;

        -- FOR TESTING ONLY; THIS ALLOWS THE SCHEDULER TO SCREW UP!
        Copy (From => Object, To => Item);
        -- TEMPORARILY REPLACES
        --    ITEM := OBJECT;

        -- FOR TESTING ONLY
        Read_Put (Item);

        C.Stop;
    end Read;

    procedure Write (Item : in Object_Type) is
    begin

        select
            C.Start (Write);
        or
            delay Write_Time_Limit;
            raise Timed_Out;
        end select;

        -- FOR TESTING ONLY; THIS ALLOWS THE SCHEDULER TO SCREW UP!
        Copy (From => Item, To => Object);
        -- TEMPORARILY REPLACES
        Object := Item;

        -- FOR TESTING ONLY
        Write_Put (Item);

        C.Stop;
    end Write;

end Shared_Variable;

