File : reference_finalization.ads
with System,Ada.Finalization;
package Reference_Finalization is
type Controlled_Reference is abstract tagged private;
procedure Destroy (Object : in out Controlled_Reference) is abstract;
private
package AF renames Ada.Finalization;
type Ref_Count is mod System.Max_Binary_Modulus;
type Access_Count is access all Ref_Count;
type Controlled_Reference is abstract
new AF.Controlled with record
Refer : Access_Count := new Ref_Count'(0);
end record;
procedure Adjust (Object : in out Controlled_Reference);
procedure Finalize (Object : in out Controlled_Reference);
end Reference_Finalization