summaryrefslogtreecommitdiff
path: root/src/kompsos.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/kompsos.ads')
-rw-r--r--src/kompsos.ads48
1 files changed, 23 insertions, 25 deletions
diff --git a/src/kompsos.ads b/src/kompsos.ads
index 5a6af5f..cf4ba31 100644
--- a/src/kompsos.ads
+++ b/src/kompsos.ads
@@ -465,27 +465,25 @@ private
- type World_Access is access World'Class;
+ type World_Root is abstract tagged null record;
- type World_Holder is new Ada.Finalization.Controlled with record
- Ptr : World_Access;
- end record;
-
- overriding procedure Initialize
- (This : in out World_Holder);
-
- overriding procedure Adjust
- (This : in out World_Holder);
+ package World_Holders is new Ada.Containers.Indefinite_Holders (World_Root'Class);
- overriding procedure Finalize
- (This : in out World_Holder);
+ type World_Access is access all World;
function Hold
- (This : in World'Class)
- return World_Holder;
+ (This : in World)
+ return World_Holders.Holder
+ with Inline;
+
+ function Ptr
+ (This : in out World_Holders.Holder)
+ return World_Access
+ with Inline;
procedure Swap
- (Left, Right : in out World_Holder);
+ (Left, Right : in out World_Holders.Holder)
+ with Inline;
type Generator_Kind is
(No_Gen,
@@ -503,30 +501,30 @@ private
when No_Gen =>
null;
when Fresh_Gen =>
- Frs_World : World_Holder;
+ Frs_World : World_Holders.Holder;
Frs_Name : SU.Unbounded_String;
when Unify_Gen =>
- Uni_World : World_Holder;
+ Uni_World : World_Holders.Holder;
Uni_Term1 : Term;
Uni_Term2 : Term;
when Buffer_Gen =>
- Buff_World : World_Holder;
+ Buff_World : World_Holders.Holder;
when Disjunct_Gen =>
- Dis_World1 : World_Holder;
- Dis_World2 : World_Holder;
+ Dis_World1 : World_Holders.Holder;
+ Dis_World2 : World_Holders.Holder;
when Conjunct_Zero_Gen =>
- ConZ_World : World_Holder;
+ ConZ_World : World_Holders.Holder;
ConZ_Func : Conjunct_Zero_Func;
when Conjunct_One_Gen =>
- ConO_World : World_Holder;
+ ConO_World : World_Holders.Holder;
ConO_Func : Conjunct_One_Func;
ConO_Input : Term;
when Conjunct_Many_Gen =>
- ConM_World : World_Holder;
+ ConM_World : World_Holders.Holder;
ConM_Func : Conjunct_Many_Func;
ConM_Inputs : Term_Array_Holders.Holder;
when Recurse_Gen =>
- Rec_World : World_Holder;
+ Rec_World : World_Holders.Holder;
Rec_Index : Positive;
end case;
end record;
@@ -535,7 +533,7 @@ private
(Index_Type => Positive,
Element_Type => State);
- type World is tagged record
+ type World is new World_Root with record
Possibles : State_Vectors.Vector;
Next_Ident : ID_Number;
Engine : Generator;