File : reference_finalization.adb
with Ada.Unchecked_Deallocation;
--with Text_IO; Use text_IO;
package body Reference_Finalization is
procedure Free is new Ada.Unchecked_Deallocation(Ref_Count,Access_Count);
------------
-- Adjust --
------------
procedure Adjust (Object : in out Controlled_Reference) is
begin
Object.Refer.All := Object.Refer.All+1;
end Adjust;
--------------
-- Finalize --
--------------
procedure Finalize (Object : in out Controlled_Reference) is
internal_error : exception;
begin
if Object.Refer.All=0 then
Destroy(Controlled_Reference'Class(Object));
Free(Object.Refer);
elsif Object.Refer.All>0 then
Object.Refer.All := Object.Refer.All-1;
else raise Internal_Error;
end if;
end Finalize;
end Reference_Finalization;