From c2d380651279903d74e32fdaa4261b02530c37ea Mon Sep 17 00:00:00 2001
From: abid <chiheb.abid@gmail.com>
Date: Mon, 27 May 2019 23:50:58 +0100
Subject: [PATCH] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?=
 =?UTF-8?q?=20src/ModelCheckLace.cpp?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/ModelCheckLace.cpp | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/src/ModelCheckLace.cpp b/src/ModelCheckLace.cpp
index 2cf50d1..69d802d 100644
--- a/src/ModelCheckLace.cpp
+++ b/src/ModelCheckLace.cpp
@@ -214,6 +214,47 @@ void ModelCheckLace::buildSucc(LDDState *agregate)
 {
    if (!agregate->isVisited()) {
    // It's first time to visit agregate, then we have to build its successors
+        LDDState *reached_class=nullptr;
+        LACE_ME;
+        MDD meta_state(CALL(Aggregate_epsilon_lace,agregate->getLDDValue(),&m_nonObservable,&m_tb_relation));
+
+        Set fire=fire_obs_lace(meta_state,&m_observable,&m_tb_relation);
+        unsigned int onb_it=0;
+        Set::const_iterator iter=fire.begin();
+        while(iter!=fire.end())
+        {
+            int t = *iter;
+            SPAWN(Aggregate_epsilon_lace,get_successor(meta_state,t),&m_nonObservable,&m_tb_relation);
+            onb_it++;iter++;
+        }
+
+        for (unsigned int i=0; i<onb_it; i++)
+        {
+            Set::iterator it = fire.end();
+            it--;
+            int t=*it;
+            fire.erase(it);
+            MDD Complete_meta_state=SYNC(Aggregate_epsilon_lace);
+            reached_class=new LDDState;
+            reached_class->m_lddstate=Complete_meta_state;
+            LDDState* pos=m_graph->find(reached_class);
+
+            if(!pos)
+            {
+                m_graph->addArc();
+                m_graph->insert(reached_class);
+                agregate->Successors.insert(agregate->Successors.begin(),LDDEdge(reached_class,t));
+                reached_class->Predecessors.insert(reached_class->Predecessors.begin(),LDDEdge(agregate,t));
+
+            }
+            else
+            {
+                m_graph->addArc();
+                agregate->Successors.insert(agregate->Successors.begin(),LDDEdge(pos,t));
+                pos->Predecessors.insert(pos->Predecessors.begin(),LDDEdge(agregate,t));
+                delete reached_class;
+            }
+        }
 
 
    }
-- 
GitLab