Ada: change Mal_Type to a class (tagged record)
[jackhill/mal.git] / ada / smart_pointers.ads
CommitLineData
acb927d4
CM
1with Ada.Finalization;
2
3package Smart_Pointers is
4
5 -- Classes we want to track derrive from Base Class.
6 type Base_Class is abstract tagged private;
7
8 type Base_Class_Accessor is access Base_Class'Class;
9
10
11 type Smart_Pointer is private;
12
13 function New_Ptr (Base_Class : Base_Class_Accessor) return Smart_Pointer;
14
15 function Deref (Ptr : Smart_Pointer) return Base_Class_Accessor;
16
17 Null_Smart_Pointer : constant Smart_Pointer;
18
19private
20
21 type Base_Class is abstract tagged record
22 Ref_Count : Natural := 1;
23 end record;
24
25
26 type Smart_Pointer is new Ada.Finalization.Controlled with record
27 Pointer : Base_Class_Accessor;
28 end record;
29
30 overriding procedure Adjust (Object : in out Smart_Pointer);
31
32 overriding procedure Finalize (Object : in out Smart_Pointer);
33
34 Null_Smart_Pointer : constant Smart_Pointer :=
35 (Ada.Finalization.Controlled with Pointer => null);
36
37end Smart_Pointers;