Change quasiquote algorithm
[jackhill/mal.git] / impls / 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
13ce1681
CM
19 function Is_Null (Ptr : Smart_Pointer) return Boolean;
20
acb927d4
CM
21private
22
23 type Base_Class is abstract tagged record
24 Ref_Count : Natural := 1;
25 end record;
26
27
28 type Smart_Pointer is new Ada.Finalization.Controlled with record
29 Pointer : Base_Class_Accessor;
30 end record;
31
32 overriding procedure Adjust (Object : in out Smart_Pointer);
33
34 overriding procedure Finalize (Object : in out Smart_Pointer);
35
36 Null_Smart_Pointer : constant Smart_Pointer :=
37 (Ada.Finalization.Controlled with Pointer => null);
38
39end Smart_Pointers;