diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3c737d71afcb6164c04b47f6414fd68c140867f2..9f92226db0b2debf6130b80c34b40a366ecffc22 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -58,6 +58,8 @@ add_executable(hybrid-sog main.cpp SogKripkeIterator.h SogKripke.cpp SogKripke.h + ModelCheckLace.cpp + ModelCheckLace.h ) target_link_libraries(hybrid-sog diff --git a/src/ModelCheckLace.cpp b/src/ModelCheckLace.cpp index 2c13e55e61d820904827766d15c973de0638f421..e7d3276ff014a5bce6bd004211f901a93d288843 100644 --- a/src/ModelCheckLace.cpp +++ b/src/ModelCheckLace.cpp @@ -6,29 +6,18 @@ #include <sylvan_int.h> using namespace sylvan; -ModelCheckLace::ModelCheckLace(const NewNet &R, int BOUND) +ModelCheckLace::ModelCheckLace(const NewNet &R, int BOUND,int nbThread) { - m_nb_thread=nbThread; - if (uselace) { + m_nb_thread=nbThread; lace_init(m_nb_thread, 10000000); - } - else lace_init(1, 10000000); lace_startup(0, NULL, NULL); - - // Simple Sylvan initialization, also initialize MDD support - //sylvan_set_sizes(1LL<<27, 1LL<<27, 1LL<<20, 1LL<<22); sylvan_set_limits(2LL<<30, 16, 3); - //sylvan_set_sizes(1LL<<30, 2LL<<20, 1LL<<18, 1LL<<20); - //sylvan_init_bdd(1); sylvan_init_package(); sylvan_init_ldd(); LACE_ME; - /*sylvan_gc_hook_pregc(TASK(gc_start)); - sylvan_gc_hook_postgc(TASK(gc_end)); - sylvan_gc_enable();*/ - m_net=R; + m_net=R; + - m_init=init; int i; vector<Place>::const_iterator it_places; @@ -47,14 +36,19 @@ ModelCheckLace::ModelCheckLace(const NewNet &R, int BOUND) cout<<"Toutes les Transitions:"<<endl; map<string,int>::iterator it2=m_transitionName.begin(); - for (;it2!=m_transitionName.end();it2++) { - cout<<(*it2).first<<" : "<<(*it2).second<<endl;} + for (; it2!=m_transitionName.end(); it2++) + { + cout<<(*it2).first<<" : "<<(*it2).second<<endl; + } cout<<"Transitions observables :"<<endl; Set::iterator it=m_observable.begin(); - for (;it!=m_observable.end();it++) {cout<<*it<<" ";} + for (; it!=m_observable.end(); it++) + { + cout<<*it<<" "; + } cout<<endl; InterfaceTrans=R.InterfaceTrans; m_nbPlaces=R.places.size(); @@ -67,7 +61,7 @@ ModelCheckLace::ModelCheckLace(const NewNet &R, int BOUND) liste_marques[i] =it_places->marking; } - M0=lddmc_cube(liste_marques,R.places.size()); + m_initalMarking=lddmc_cube(liste_marques,R.places.size()); @@ -114,7 +108,7 @@ ModelCheckLace::ModelCheckLace(const NewNet &R, int BOUND) m_tb_relation.push_back(TransSylvan(_minus,_plus)); } - // sylvan_gc_seq(); + // sylvan_gc_seq(); delete [] prec; diff --git a/src/ModelCheckLace.h b/src/ModelCheckLace.h index d18881f82ab3fb5de0656b996d7667933be1cb43..717f1006b009d896fa306434e7641667b51aeb75 100644 --- a/src/ModelCheckLace.h +++ b/src/ModelCheckLace.h @@ -1,5 +1,12 @@ -#ifndef THREADSOG_H -#define THREADSOG_H +#ifndef MODELCHECKLACE_H +#define MODELCHECKLACE_H +#include "CommonSOG.h" class ModelCheckLace : public CommonSOG { +public: + ModelCheckLace(const NewNet &R, int BOUND,int nbThread); + LDDState & getInitialMetaState(); +private: + int m_nb_thread; + MDD m_initalMarking; }; #endif diff --git a/src/main.cpp b/src/main.cpp index 5c4333cbca9a563ff79ef6e6e82519eec8ee5a8c..e48bd281a167cee4bee6d21c432cb78b90595053 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,7 +12,7 @@ #include "threadSOG.h" #include "HybridSOG.h" #include "LDDGraph.h" - +#include "ModelCheckLace.h" #include <spot/misc/version.hh> #include <spot/twaalgos/dot.hh> @@ -144,6 +144,9 @@ int main(int argc, char** argv) spot::print_dot(file, af); file.close(); } + // Initialize SOG builder + ModelCheckLace* mcl=new ModelCheckLace(R,bound,nb_th); + // Performing on the fly Modelchecking } else if (n_tasks==1) {