diff options
Diffstat (limited to 'src/kompsos-collector.adb')
| -rw-r--r-- | src/kompsos-collector.adb | 46 |
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; |
