diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index 17fe5d3482619a62f2cf37123f3e50e371c366ac..8ba9bd9acab0ef571d8859b361b369428ddeba4f 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -1694,7 +1694,7 @@ bool Problem::check(int verbose_level) const if ( Fo ) // case FRAME: { if (verbose_level > 0) - cout << " --> Frm" << Fo->id() << " <- "; + cout << " ( --> Frm" << Fo->id() << " <- "; bool found = false; for (auto cby : Fo->getConstrainedByList()) { @@ -1703,7 +1703,7 @@ bool Problem::check(int verbose_level) const found = found || (c == cby); } if (verbose_level > 0) - cout << endl; + cout << ")"; // check constrained_by pointer in constrained frame // is_consistent = is_consistent && found; @@ -1719,7 +1719,7 @@ bool Problem::check(int verbose_level) const if ( Co ) // case CAPTURE: { if (verbose_level > 0) - cout << " --> Cap" << Co->id() << " <- "; + cout << " ( --> Cap" << Co->id() << " <- "; bool found = false; for (auto cby : Co->getConstrainedByList()) { @@ -1728,7 +1728,7 @@ bool Problem::check(int verbose_level) const found = found || (c == cby); } if (verbose_level > 0) - cout << endl; + cout << ")"; // check constrained_by pointer in constrained frame // is_consistent = is_consistent && found; @@ -1744,7 +1744,7 @@ bool Problem::check(int verbose_level) const if ( fo ) // case FEATURE: { if (verbose_level > 0) - cout << " --> Ftr" << fo->id() << " <- "; + cout << " ( --> Ftr" << fo->id() << " <- "; bool found = false; for (auto cby : fo->getConstrainedByList()) { @@ -1753,7 +1753,7 @@ bool Problem::check(int verbose_level) const found = found || (c == cby); } if (verbose_level > 0) - cout << endl; + cout << ")"; // check constrained_by pointer in constrained feature // is_consistent = is_consistent && found; @@ -1768,7 +1768,7 @@ bool Problem::check(int verbose_level) const if ( Lo ) // case LANDMARK: { if (verbose_level > 0) - cout << " --> Lmk" << Lo->id() << " <- "; + cout << " ( --> Lmk" << Lo->id() << " <- "; bool found = false; for (auto cby : Lo->getConstrainedByList()) { @@ -1777,7 +1777,7 @@ bool Problem::check(int verbose_level) const found = found || (c == cby); } if (verbose_level > 0) - cout << endl; + cout << ")"; // check constrained_by pointer in constrained landmark // is_consistent = is_consistent && found; @@ -1787,6 +1787,9 @@ bool Problem::check(int verbose_level) const //Clear inconsistency_explanation std::stringstream().swap(inconsistency_explanation); } + if (verbose_level > 0) + cout << endl; + if (verbose_level > 0) { cout << " -> Prb @ " << c->getProblem().get() << endl; @@ -1824,38 +1827,102 @@ bool Problem::check(int verbose_level) const cout << " (lp @ " << lp.get() << ")"; } } + bool found_here; + std::vector<StateBlockPtr> sb_vec; + // find in own Frame - found = found || (std::find_if(F->getStateBlockMap().begin(), F->getStateBlockMap().end(), [sb](const std::pair<std::string, StateBlockPtr> & t)->bool {return t.second == sb;}) != F->getStateBlockMap().end()); + sb_vec = F->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " F" << F->id(); + found = found || found_here; + // find in own Capture - found = found || (std::find(C->getStateBlockVec().begin(), C->getStateBlockVec().end(), sb) != C->getStateBlockVec().end()); + sb_vec = C->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " C" << C->id(); + found = found || found_here; + + // Find in other Captures of the own Frame + if (!found_here) + for (auto FC : F->getCaptureList()) + { + sb_vec = FC->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " F" << F->id() << ".C" << FC->id(); + found = found || found_here; + } + // find in own Sensor if (S) { - auto sb_vec = S->getStateBlockVec(); - found = found || (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + sb_vec = S->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " S" << S->id(); + found = found || found_here; } + // find in constrained Frame - if (Fo) - found = found || (std::find_if(Fo->getStateBlockMap().begin(), Fo->getStateBlockMap().end(), [sb](const std::pair<std::string, StateBlockPtr> & t)->bool {return t.second == sb;}) != Fo->getStateBlockMap().end()); + if (Fo){ + sb_vec = Fo->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " Fo" << Fo->id(); + found = found || found_here; + + } + // find in constrained Capture if (Co) - found = found || (std::find(Co->getStateBlockVec().begin(), Co->getStateBlockVec().end(), sb) != Co->getStateBlockVec().end()); + { + sb_vec = Co->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " Co" << Co->id(); + found = found || found_here; + } + + // Find in other Captures of the constrained Frame + if (!found_here && Fo) + for (auto FoC : Fo->getCaptureList()) + { + sb_vec = FoC->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " Fo" << Fo->id() << ".C" << FoC->id(); + found = found || found_here; + } + // find in constrained Feature if (fo) { // find in constrained feature's Frame - FrameBasePtr foF = fo->getFrame(); - found = found || (std::find_if(foF->getStateBlockMap().begin(), foF->getStateBlockMap().end(), [sb](const std::pair<std::string, StateBlockPtr> & t)->bool {return t.second == sb;}) != foF->getStateBlockMap().end()); + auto foF = fo->getFrame(); + sb_vec = foF->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " foF" << foF->id(); + found = found || found_here; + // find in constrained feature's Capture - CaptureBasePtr foC = fo->getCapture(); - found = found || (std::find(foC->getStateBlockVec().begin(), foC->getStateBlockVec().end(), sb) != foC->getStateBlockVec().end()); + auto foC = fo->getCapture(); + sb_vec = foC->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " foC" << foC->id(); + found = found || found_here; + // find in constrained feature's Sensor - SensorBasePtr foS = fo->getCapture()->getSensor(); - found = found || (std::find(foS->getStateBlockVec().begin(), foS->getStateBlockVec().end(), sb) != foS->getStateBlockVec().end()); + auto foS = fo->getCapture()->getSensor(); + sb_vec = foS->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " foS" << foS->id(); + found = found || found_here; } + // find in constrained landmark if (Lo) - found = found || (std::find_if(Lo->getStateBlockMap().begin(), Lo->getStateBlockMap().end(), [sb](const std::pair<std::string, StateBlockPtr> & t)->bool {return t.second == sb;}) != Lo->getStateBlockMap().end()); + { + sb_vec = Lo->getStateBlockVec(); + found_here = (std::find(sb_vec.begin(), sb_vec.end(), sb) != sb_vec.end()); + if (found_here) cout << " Lo" << Lo->id(); + found = found || found_here; + } + if (verbose_level > 0) { if (found)