more compulsive checking, more efficient removing
parent
73848d9e0e
commit
38ed1a5cdd
|
@ -234,13 +234,21 @@ list<int> FactorGraph<Factor>::factors(const Symbol& key) const {
|
||||||
template<class Factor>
|
template<class Factor>
|
||||||
vector<boost::shared_ptr<Factor> >
|
vector<boost::shared_ptr<Factor> >
|
||||||
FactorGraph<Factor>::findAndRemoveFactors(const Symbol& key) {
|
FactorGraph<Factor>::findAndRemoveFactors(const Symbol& key) {
|
||||||
vector<sharedFactor> found;
|
|
||||||
|
|
||||||
const list<int>& indices = indices_.at(key);
|
// find all factor indices associated with the key
|
||||||
BOOST_FOREACH(const int& i, indices) {
|
Indices::const_iterator it = indices_.find(key);
|
||||||
if(factors_[i] == NULL) continue; // skip NULL factors
|
if (it==indices_.end())
|
||||||
found.push_back(factors_[i]); // add to found
|
throw std::invalid_argument(
|
||||||
remove(i); // set factor to NULL.
|
"FactorGraph::findAndRemoveFactors: key "
|
||||||
|
+ (string)key + " not found");
|
||||||
|
const list<int>& factorsAssociatedWithKey = it->second;
|
||||||
|
|
||||||
|
vector<sharedFactor> found;
|
||||||
|
BOOST_FOREACH(const int& i, factorsAssociatedWithKey) {
|
||||||
|
sharedFactor& fi = factors_.at(i); // throws exception !
|
||||||
|
if(fi == NULL) continue; // skip NULL factors
|
||||||
|
found.push_back(fi); // add to found
|
||||||
|
fi.reset(); // set factor to NULL == remove(i)
|
||||||
}
|
}
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue