From f76c7be5b29555c1bd782b67767cd4b54aaf15e2 Mon Sep 17 00:00:00 2001 From: Richard Roberts Date: Fri, 20 Jan 2012 16:26:45 +0000 Subject: [PATCH] (in branch) more implementation for DynamicValues --- gtsam/nonlinear/DynamicValues-inl.h | 4 +++- gtsam/nonlinear/DynamicValues.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/gtsam/nonlinear/DynamicValues-inl.h b/gtsam/nonlinear/DynamicValues-inl.h index f11b2f9f5..deb81d567 100644 --- a/gtsam/nonlinear/DynamicValues-inl.h +++ b/gtsam/nonlinear/DynamicValues-inl.h @@ -22,6 +22,8 @@ * which is also a manifold element, and hence supports operations dim, retract, and localCoordinates. */ +#include + #include // Only so Eclipse finds class definition namespace gtsam { @@ -94,7 +96,7 @@ namespace gtsam { /* ************************************************************************* */ template void DynamicValues::insert(const Symbol& j, const ValueType& val) { - pair insertResult = values_.insert(make_pair(j, ValuePtr(new ValueType(val)))); + std::pair insertResult = values_.insert(make_pair(j, ValuePtr(new ValueType(val)))); if(!insertResult.second) throw DynamicValuesKeyAlreadyExists(j); } diff --git a/gtsam/nonlinear/DynamicValues.cpp b/gtsam/nonlinear/DynamicValues.cpp index 6a93a29f5..1901ab40e 100644 --- a/gtsam/nonlinear/DynamicValues.cpp +++ b/gtsam/nonlinear/DynamicValues.cpp @@ -78,7 +78,7 @@ namespace gtsam { BOOST_FOREACH(const KeyValuePair& key_value, values_) { const SubVector& singleDelta = delta[ordering[key_value.first]]; // Delta for this value - const std::auto_ptr retractedValue = key_value.second->retract_(singleDelta); // Retract + ValuePtr retractedValue(key_value.second->retract_(singleDelta)); // Retract result.values_.insert(make_pair(key_value.first, retractedValue)); // Add retracted result directly to result values } @@ -96,7 +96,7 @@ namespace gtsam { void DynamicValues::localCoordinates(const DynamicValues& cp, const Ordering& ordering, VectorValues& result) const { if(this->size() != cp.size()) throw DynamicValuesMismatched(); - for(const_iterator it1=this->begin(), it2=other.begin(); it1!=this->end(); ++it1, ++it2) { + for(const_iterator it1=this->begin(), it2=cp.begin(); it1!=this->end(); ++it1, ++it2) { if(it1->first != it2->first) throw DynamicValuesMismatched(); // If keys do not match result[ordering[it1->first]] = it1->second->localCoordinates_(*it2->second); // Will throw a dynamic_cast exception if types do not match @@ -120,14 +120,14 @@ namespace gtsam { /* ************************************************************************* */ void DynamicValues::erase(const Symbol& j) { iterator item = values_.find(j); - if(item == values_end) + if(item == values_.end()) throw DynamicValuesKeyDoesNotExist("erase", j); values_.erase(item); } /* ************************************************************************* */ FastList DynamicValues::keys() const { - return list( + return FastList( boost::make_transform_iterator(values_.begin(), &KeyValuePair::first), boost::make_transform_iterator(values_.end(), &KeyValuePair::first)); }