generic
    type Item is private;
    The_Size : Positive;
package Pipe_Bounded_Managed is

    type Pipe is limited private;

    procedure Read (The_Item : out Item;
                    From_The_Pipe : in out Pipe;
                    Wait : in Duration);
    procedure Write (The_Item : in Item;
                     To_The_Pipe : in out Pipe;
                     Wait : in Duration);

    function Extent_Of (The_Pipe : in Pipe) return Natural;

    Overflow : exception;
    Timeout : exception;

private
    task type Pipe is
        entry Read (The_Item : out Item);
        entry Write (The_Item : in Item);
        entry Get_Extent (The_Value : out Natural);
    end Pipe;
end Pipe_Bounded_Managed;