Errors is now a list

release/4.3a0
Frank Dellaert 2009-12-30 17:13:36 +00:00
parent f80ac5d7d5
commit 793a9d58ae
3 changed files with 17 additions and 13 deletions

View File

@ -16,19 +16,22 @@ namespace gtsam {
/* ************************************************************************* */
void Errors::print(const std::string& s) const {
odprintf("%s:\n", s.c_str());
for (size_t i=0;i<size();i++) {
odprintf("%d:", i);
gtsam::print((*this)[i]);
}
BOOST_FOREACH(const Vector& v, *this)
gtsam::print(v);
}
/* ************************************************************************* */
struct equalsVector : public std::binary_function<const Vector&, const Vector&, bool> {
double tol_;
equalsVector(double tol = 1e-9) : tol_(tol) {}
bool operator()(const Vector& expected, const Vector& actual) {
return equal_with_abs_tol(expected, actual,tol_);
}
};
bool Errors::equals(const Errors& expected, double tol) const {
if( size() != expected.size() ) return false;
for (size_t i=0;i<size();i++)
if(!equal_with_abs_tol(expected[i],(*this)[i],tol))
return false;
return true;
return equal(begin(),end(),expected.begin(),equalsVector(tol));
}
/* ************************************************************************* */
@ -37,8 +40,9 @@ double dot(const Errors& a, const Errors& b) {
if (b.size()!=m)
throw(std::invalid_argument("Errors::dot: incompatible sizes"));
double result = 0.0;
for (size_t i = 0; i < m; i++)
result += gtsam::dot(a[i], b[i]);
Errors::const_iterator it = b.begin();
BOOST_FOREACH(const Vector& ai, a)
result += gtsam::dot(ai, *(it++));
return result;
}

View File

@ -16,7 +16,7 @@
namespace gtsam {
/** vector of errors */
class Errors : public std::vector<Vector>, public Testable<Errors> {
class Errors : public std::list<Vector>, public Testable<Errors> {
public:

View File

@ -60,9 +60,9 @@ Errors GaussianFactorGraph::operator*(const VectorConfig& x) const {
VectorConfig GaussianFactorGraph::operator^(const Errors& e) const {
VectorConfig x;
// For each factor add the gradient contribution
size_t i=0;
Errors::const_iterator it = e.begin();
BOOST_FOREACH(sharedFactor Ai,factors_)
x += (*Ai)^e[i++];
x += (*Ai)^(*(it++));
return x;
}