Commit | Line | Data |
---|---|---|
acb927d4 CM |
1 | with Ada.Finalization; |
2 | ||
3 | package 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 |
21 | private |
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 | ||
39 | end Smart_Pointers; |