private with Ada.Finalization;
generic
type Content is limited private; -- Must have proper defaults
type Ptr is access Content;
package Rx.Tools.Lazies is
-- Protected wrapper around a type that is created on first use
type Lazy is tagged limited private;
function Get (This : in out Lazy) return Ptr;
private
protected type Safes (Parent : access Lazy) is
procedure Get (X : in out Ptr);
procedure Free;
private
Instance : Ptr;
end Safes;
use Ada.Finalization;
type Lazy is new Limited_Controlled with record
Safe : Safes (Lazy'Access);
end record;
overriding procedure Finalize (This : in out Lazy);
end Rx.Tools.Lazies;