Added keys() function to LieConfig to return an ordered list of keys
parent
98b98d14d7
commit
badc7b6ee6
|
@ -67,6 +67,14 @@ namespace gtsam {
|
||||||
dim_ += cfg.dim_;
|
dim_ += cfg.dim_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class J, class T>
|
||||||
|
std::list<J> LieConfig<J,T>::keys() const {
|
||||||
|
std::list<J> ret;
|
||||||
|
BOOST_FOREACH(const typename Values::value_type& v, values_)
|
||||||
|
ret.push_back(v.first);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
template<class J, class T>
|
template<class J, class T>
|
||||||
void LieConfig<J,T>::erase(const J& j) {
|
void LieConfig<J,T>::erase(const J& j) {
|
||||||
size_t dim; // unused
|
size_t dim; // unused
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
#include "Vector.h"
|
#include "Vector.h"
|
||||||
#include "Testable.h"
|
#include "Testable.h"
|
||||||
|
@ -93,6 +94,12 @@ namespace gtsam {
|
||||||
*/
|
*/
|
||||||
void erase(const J& j, size_t& dim);
|
void erase(const J& j, size_t& dim);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a set of keys in the config
|
||||||
|
* Note: by construction, the list is ordered
|
||||||
|
*/
|
||||||
|
std::list<J> keys() const;
|
||||||
|
|
||||||
/** Replace all keys and variables */
|
/** Replace all keys and variables */
|
||||||
LieConfig& operator=(const LieConfig& rhs) {
|
LieConfig& operator=(const LieConfig& rhs) {
|
||||||
values_ = rhs.values_;
|
values_ = rhs.values_;
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
#include <CppUnitLite/TestHarness.h>
|
#include <CppUnitLite/TestHarness.h>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include <boost/assign/std/list.hpp> // for operator +=
|
||||||
|
using namespace boost::assign;
|
||||||
|
|
||||||
#define GTSAM_MAGIC_KEY
|
#define GTSAM_MAGIC_KEY
|
||||||
|
|
||||||
#include <Pose2.h>
|
#include <Pose2.h>
|
||||||
|
@ -147,6 +150,28 @@ TEST(LieConfig, expmap_d)
|
||||||
CHECK(config0.equals(config0));
|
CHECK(config0.equals(config0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
TEST(LieConfig, extract_keys)
|
||||||
|
{
|
||||||
|
typedef TypedSymbol<Pose2, 'x'> PoseKey;
|
||||||
|
LieConfig<PoseKey, Pose2> config;
|
||||||
|
|
||||||
|
config.insert(PoseKey(1), Pose2());
|
||||||
|
config.insert(PoseKey(2), Pose2());
|
||||||
|
config.insert(PoseKey(4), Pose2());
|
||||||
|
config.insert(PoseKey(5), Pose2());
|
||||||
|
|
||||||
|
list<PoseKey> expected, actual;
|
||||||
|
expected += PoseKey(1), PoseKey(2), PoseKey(4), PoseKey(5);
|
||||||
|
actual = config.keys();
|
||||||
|
|
||||||
|
CHECK(actual.size() == expected.size());
|
||||||
|
list<PoseKey>::const_iterator itAct = actual.begin(), itExp = expected.begin();
|
||||||
|
for (; itAct != actual.end() && itExp != expected.end(); ++itAct, ++itExp) {
|
||||||
|
CHECK(assert_equal(*itExp, *itAct));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
int main() { TestResult tr; return TestRegistry::runAllTests(tr); }
|
int main() { TestResult tr; return TestRegistry::runAllTests(tr); }
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
Loading…
Reference in New Issue