diff --git a/src/.HybridKripkeState.h.kate-swp b/src/.HybridKripkeState.h.kate-swp new file mode 100644 index 0000000000000000000000000000000000000000..779eacdfc4dc852635675663db21ac8d1f87d37e Binary files /dev/null and b/src/.HybridKripkeState.h.kate-swp differ diff --git a/src/CommonSOG.cpp b/src/CommonSOG.cpp index 6b570d2a5446aeb66b4e0378194613e26980bd83..498a6d400c268c974848be3e3eb3c19229292171 100644 --- a/src/CommonSOG.cpp +++ b/src/CommonSOG.cpp @@ -20,7 +20,6 @@ MDD CommonSOG::Accessible_epsilon(MDD From) { MDD M1; MDD M2=From; - do { M1=M2; diff --git a/src/HybridKripke.cpp b/src/HybridKripke.cpp index 27c1e4db0c230e9d28ab0c967fa39222febf8023..3770bab909ce8753db8d1906cabc55782d3693b7 100644 --- a/src/HybridKripke.cpp +++ b/src/HybridKripke.cpp @@ -49,11 +49,12 @@ state* HybridKripke::get_init_state() const { MPI_Get_count(&status, MPI_UNSIGNED_CHAR, &v); cout<<" Message size : "<<v<<endl; MPI_Recv(message, 17, MPI_UNSIGNED_CHAR,MPI_ANY_SOURCE,TAG_ACK_INITIAL,MPI_COMM_WORLD, &status); - message[17]='\0'; + message[17]='\0'; cout<<"Message received : "<<message<<endl; - string id(message+1); + + uint16_t p_container=message[0]; - return new HybridKripkeState(id,p_container); + return new HybridKripkeState(message+1,p_container); } // Allows to print state label representing its id @@ -62,7 +63,7 @@ std::string HybridKripke::format_state(const spot::state* s) const //cout<<__func__<<endl; auto ss = static_cast<const HybridKripkeState*>(s); std::ostringstream out; - out << "( " << ss->getLDDState()->getLDDValue() << ")"; + out << "( " << ss->getId() << ")"; // cout << " ( " << ss->getLDDState()->getLDDValue() << ")"; return out.str(); } @@ -70,7 +71,7 @@ std::string HybridKripke::format_state(const spot::state* s) const HybridKripkeIterator* HybridKripke::succ_iter(const spot::state* s) const { auto ss = static_cast<const HybridKripkeState*>(s); - LDDState *aggregate=ss->getLDDState(); + LDDState *aggregate;//=ss->getLDDState(); bdd cond = state_condition(ss); if (iter_cache_) { @@ -79,7 +80,7 @@ HybridKripkeIterator* HybridKripke::succ_iter(const spot::state* s) const { it->recycle(aggregate, cond); return it; } - return new HybridKripkeIterator(aggregate,cond); + return new HybridKripkeIterator(*ss,cond); diff --git a/src/HybridKripkeIterator.cpp b/src/HybridKripkeIterator.cpp index 7a49bf3509096a3974b3e89b62705d81e3c241f2..b7cc6c33086cfb455d3df892d948e3f27498ed4d 100644 --- a/src/HybridKripkeIterator.cpp +++ b/src/HybridKripkeIterator.cpp @@ -2,10 +2,13 @@ #include "LDDGraph.h" #include "HybridKripkeState.h" #include "HybridKripkeIterator.h" +#define TAG_ASK_SUCC 4 - -HybridKripkeIterator::HybridKripkeIterator(const LDDState* lddstate, bdd cnd):m_lddstate(lddstate), kripke_succ_iterator(cnd) +HybridKripkeIterator::HybridKripkeIterator(const HybridKripkeState &kstate, bdd cnd):m_current_state(&kstate), kripke_succ_iterator(cnd) { + LDDState* lddstate; + cout<<"Send ask container"<<endl; + MPI_Send(m_current_state->getId(),16,MPI_UNSIGNED_CHAR,m_current_state->getContainerProcess(), TAG_ASK_SUCC, MPI_COMM_WORLD); for (int i=0;i<m_lddstate->getSuccessors()->size();i++) { m_lsucc.push_back(m_lddstate->getSuccessors()->at(i)); } @@ -43,7 +46,7 @@ HybridKripkeState* HybridKripkeIterator::dst() const { /*cout<<"Source "<<m_lddstate->getLDDValue()<<"Destination :"<<m_lsucc.at(m_current_edge).first->getLDDValue()<<" in "<<m_lsucc.size()<<" / "<<m_current_edge<<endl;*/ // return new HybridKripkeState(m_lsucc.at(m_current_edge).first); - string id; + char* id; uint16_t p_container; return new HybridKripkeState(id,p_container); // return new HybridKripkeState(m_lsucc.at(m_current_edge).first); @@ -78,6 +81,9 @@ void HybridKripkeIterator::recycle(LDDState* aggregate, bdd cond) spot::kripke_succ_iterator::recycle(cond); } +HybridKripkeState* HybridKripkeIterator::current_state() const { + return m_current_state; +} static ModelCheckBaseMT * HybridKripkeIterator::m_builder; static spot::bdd_dict_ptr* HybridKripkeIterator::m_dict_ptr; static LDDState HybridKripkeIterator::m_deadlock; diff --git a/src/HybridKripkeIterator.h b/src/HybridKripkeIterator.h index a4e5d85fb6079254517d898ca4df6fd33f6bd45b..17a81d346e9d536b6d99dc0627d9d18ab54f4e63 100644 --- a/src/HybridKripkeIterator.h +++ b/src/HybridKripkeIterator.h @@ -12,7 +12,7 @@ public: static ModelCheckBaseMT * m_builder; static spot::bdd_dict_ptr* m_dict_ptr; // sog_succ_iterator(const RdPBDD& pn, const SogKripkeState& s, const bdd& c); - HybridKripkeIterator(const LDDState* lddstate, bdd cnd); + HybridKripkeIterator(const HybridKripkeState &kstate, bdd cnd); virtual ~HybridKripkeIterator(); bool first() override; bool next() override; @@ -28,6 +28,7 @@ public: std::string format_transition() const; private: + HybridKripkeState *m_current_state; LDDState * m_lddstate; vector<pair<LDDState*, int>> m_lsucc; unsigned int m_current_edge=0; diff --git a/src/HybridKripkeState.h b/src/HybridKripkeState.h index a286ee994a9f6f3b90081691c9176fb628f30d4a..57dd8bddc8e4d17de14680757f5dd20d2643d227 100644 --- a/src/HybridKripkeState.h +++ b/src/HybridKripkeState.h @@ -4,18 +4,17 @@ #include <mpi.h> #include "LDDState.h" #include "ModelCheckBaseMT.h" -#define TAG_ASK_SUCC 4 + class HybridKripkeState : public spot::state { public: static ModelCheckBaseMT * m_builder; - HybridKripkeState(string &id,uint16_t pcontainer):m_id(id),m_container(pcontainer) { - int v=1; - MPI_Send( &v, 1, MPI_INT, m_container, TAG_ASK_SUCC, MPI_COMM_WORLD); - + HybridKripkeState(unsigned char * id,uint16_t pcontainer):m_container(pcontainer) { + memcpy(m_id,id,16); }; // Constructor for cloning - HybridKripkeState(const string &id,uint16_t pcontainer,bool ddiv, bool deadlock):m_id(id),m_container(pcontainer),m_div(ddiv),m_deadlock(deadlock) { + HybridKripkeState(unsigned char *id,uint16_t pcontainer,bool ddiv, bool deadlock):m_container(pcontainer),m_div(ddiv),m_deadlock(deadlock) { + memcpy(m_id,id,16); } virtual ~HybridKripkeState(); @@ -39,14 +38,17 @@ public: else return h > oh; } - LDDState* getLDDState() { - return m_state; + unsigned char * getId() { + return m_id; + } + uint16_t getContainerProcess() { + return m_container; } protected: private: LDDState *m_state; - string m_id; + unsigned char m_id[16]; bool m_div; bool m_deadlock; uint16_t m_container; diff --git a/src/MCHybridSOG.cpp b/src/MCHybridSOG.cpp index e7e872f4f9540192b6c11441e3966458a8a83bc7..6b07f6d31b25f486ddac6d15abb3f223f478ea37 100644 --- a/src/MCHybridSOG.cpp +++ b/src/MCHybridSOG.cpp @@ -487,16 +487,18 @@ void MCHybridSOG::read_message() LDDState *i_agregate=m_graph->getInitialState(); stringstream ss; - ss<<(task_id); + ss<<(task_id);ss<<'\0'; ss<<i_agregate->getSHAValue(); cout<<"Ldd Value :"<<i_agregate->getLDDValue()<<endl; - cout<<"string :"<<ss.str()<<endl; + cout<<"string :"<<ss.str()<<endl; + MPI_Send(ss.str().c_str(),17,MPI_UNSIGNED_CHAR,m_status.MPI_SOURCE, TAG_ACK_INITIAL, MPI_COMM_WORLD); break; case TAG_ASK_SUCC : int id; MPI_Recv(&id, 1, MPI_INT, m_status.MPI_SOURCE, m_status.MPI_TAG, MPI_COMM_WORLD, &m_status); - LDDState *aggregate=m_graph->getLDDStateById(id); + // LDDState *aggregate=m_graph->findSHA() + // Send successors break; case TAG_AGREGATE : break; default : //cout<<"unknown received "<<status.MPI_TAG<<" by task "<<task_id<<endl;