aboutsummaryrefslogtreecommitdiff
path: root/src/kompsos-collector.adb
diff options
context:
space:
mode:
authorJedidiah Barber <contact@jedbarber.id.au>2026-01-17 22:13:19 +1300
committerJedidiah Barber <contact@jedbarber.id.au>2026-01-17 22:13:19 +1300
commitab0154499e1b0ad8c3f104bc8a1d8ea7f1fb4a5c (patch)
treee3ed8438d14e92c03b193693a6492db229f5e33d /src/kompsos-collector.adb
parent52d24305fe9a5f47270b713708664d4968f75fed (diff)
Counter for next available Variable now held by each Goal instead of being global
Diffstat (limited to 'src/kompsos-collector.adb')
-rw-r--r--src/kompsos-collector.adb46
1 files changed, 34 insertions, 12 deletions
diff --git a/src/kompsos-collector.adb b/src/kompsos-collector.adb
index 7ccdb57..592979f 100644
--- a/src/kompsos-collector.adb
+++ b/src/kompsos-collector.adb
@@ -44,6 +44,8 @@ package body Kompsos.Collector is
Book : Eval_Maps.Map renames Bookkeep.Actual;
+ Global_Var : Variable := Relation.Next_Var;
+
Next_Index : Long_Positive := 1;
Next_State : State;
State_Valid : Boolean := False;
@@ -139,7 +141,11 @@ package body Kompsos.Collector is
procedure Reset
- (Ptr : in Constant_Goal_Access) is
+ (Ptr : in Constant_Goal_Access);
+
+
+ procedure Do_Reset
+ (Ptr : in Constant_Graph_Access) is
begin
if Ptr = null or else Ptr.Actual = null then
return;
@@ -150,11 +156,11 @@ package body Kompsos.Collector is
case Ptr.Actual.Kind is
when Unify_Node =>
Book.Exclude (Ptr.Actual);
- Reset (Ptr.Actual.Uni_Goal'Unchecked_Access);
+ Do_Reset (Ptr.Actual.Uni_Goal'Unchecked_Access);
when Disjunct_Node =>
Book.Exclude (Ptr.Actual);
- Reset (Ptr.Actual.Dis_Goal1'Unchecked_Access);
- Reset (Ptr.Actual.Dis_Goal2'Unchecked_Access);
+ Do_Reset (Ptr.Actual.Dis_Goal1'Unchecked_Access);
+ Do_Reset (Ptr.Actual.Dis_Goal2'Unchecked_Access);
when Conjunct_Node =>
if Book.Contains (Ptr.Actual) then
Reset (Constant_Goal_Access (Book.Element (Ptr.Actual).Con_Part));
@@ -162,16 +168,27 @@ package body Kompsos.Collector is
Free (Book (Ptr.Actual).Con_Base);
Book.Delete (Ptr.Actual);
end if;
- Reset (Ptr.Actual.Con_Goal'Unchecked_Access);
+ Do_Reset (Ptr.Actual.Con_Goal'Unchecked_Access);
when Recurse_Node =>
Book.Exclude (Ptr.Actual);
- Reset (Ptr.Actual.Rec_Goal'Unchecked_Access);
+ Do_Reset (Ptr.Actual.Rec_Goal'Unchecked_Access);
end case;
+ end Do_Reset;
+
+
+ procedure Reset
+ (Ptr : in Constant_Goal_Access) is
+ begin
+ if Ptr = null then
+ return;
+ else
+ Do_Reset (Ptr.Graph'Access);
+ end if;
end Reset;
function Get_Next
- (Ptr : in Constant_Goal_Access;
+ (Ptr : in Constant_Graph_Access;
Base : in State;
Index : in Long_Positive;
Result : out State)
@@ -179,7 +196,7 @@ package body Kompsos.Collector is
function Do_Get_Next
- (Ptr : in Goal_Component_Access;
+ (Ptr : in Graph_Component_Access;
Base : in State;
Index : in Long_Positive;
Result : out State)
@@ -295,14 +312,19 @@ package body Kompsos.Collector is
Book (Ptr).Con_Gone := True;
else
Book (Ptr).Con_Base := new State'(Result);
- Book (Ptr).Con_Part := new Goal'(Call_Lazy (Empty_Goal, Ptr.Con_Data));
+ Book (Ptr).Con_Part := new Goal'(
+ Call_Lazy
+ ((Graph => (Ada.Finalization.Controlled with Actual => null),
+ Next_Var => Global_Var),
+ Ptr.Con_Data));
+ Global_Var := Book (Ptr).Con_Part.Next_Var;
end if;
end if;
if Book (Ptr).Con_Gone then
return False;
end if;
while not Get_Next
- (Constant_Goal_Access (Book.Element (Ptr).Con_Part),
+ (Constant_Graph_Access'(Book.Element (Ptr).Con_Part.Graph'Access),
Book.Element (Ptr).Con_Base.all,
Book.Element (Ptr).Con_Next,
Result)
@@ -363,7 +385,7 @@ package body Kompsos.Collector is
function Get_Next
- (Ptr : in Constant_Goal_Access;
+ (Ptr : in Constant_Graph_Access;
Base : in State;
Index : in Long_Positive;
Result : out State)
@@ -406,7 +428,7 @@ package body Kompsos.Collector is
function Has_Next
return Boolean
is
- Ptr : constant Constant_Goal_Access := Relation'Access;
+ Ptr : constant Constant_Graph_Access := Relation.Graph'Access;
begin
if State_Valid then
return True;