29 #include <gtsam/base/DerivedValue.h> 36 template<
class ValueType>
45 template<
class ValueType>
51 key(_key), value(_value) {
62 template<
class ValueType,
class CastedKeyValuePairType,
class KeyValuePairType>
64 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
66 return CastedKeyValuePairType(key_value.key,
68 ValueType>&>(key_value.value)).
value());
72 template<
class CastedKeyValuePairType,
class KeyValuePairType>
74 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
78 return CastedKeyValuePairType(key_value.key, key_value.value);
82 template<
class CastedKeyValuePairType,
class KeyValuePairType>
84 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
88 return CastedKeyValuePairType(key_value.key, key_value.value);
93 template<
class ValueType>
102 boost::transform_iterator<
104 boost::filter_iterator<
109 typedef iterator const_iterator;
112 boost::transform_iterator<
114 boost::filter_iterator<
117 const_const_iterator;
119 iterator begin() {
return begin_; }
120 iterator end() {
return end_; }
121 const_iterator begin()
const {
return begin_; }
122 const_iterator end()
const {
return end_; }
123 const_const_iterator beginConst()
const {
return constBegin_; }
124 const_const_iterator endConst()
const {
return constEnd_; }
129 for (const_const_iterator it = beginConst(); it != endConst(); ++it)
139 boost::make_transform_iterator(
140 boost::make_filter_iterator(filter, values.begin(), values.end()),
142 boost::make_transform_iterator(
143 boost::make_filter_iterator(filter, values.end(), values.end()),
145 boost::make_transform_iterator(
146 boost::make_filter_iterator(filter,
147 ((
const Values&) values).begin(),
148 ((
const Values&) values).end()),
151 boost::make_transform_iterator(
152 boost::make_filter_iterator(filter,
153 ((
const Values&) values).end(),
154 ((
const Values&) values).end()),
162 const_const_iterator constBegin_;
163 const_const_iterator constEnd_;
167 template<
class ValueType>
172 typedef KeyValuePair value_type;
174 typedef typename Filtered<ValueType>::const_const_iterator iterator;
175 typedef typename Filtered<ValueType>::const_const_iterator const_iterator;
179 begin_(rhs.beginConst()),
180 end_(rhs.endConst()) {}
182 iterator begin() {
return begin_; }
183 iterator end() {
return end_; }
184 const_iterator begin()
const {
return begin_; }
185 const_iterator end()
const {
return end_; }
190 for (const_iterator it = begin(); it != end(); ++it)
197 for(const_iterator it = begin(); it != end(); ++it)
198 result.push_back(it->key);
204 const_iterator begin_;
212 begin_ = filtered.beginConst();
213 end_ = filtered.endConst();
219 template<
class ValueType>
223 insert(key, static_cast<const ValueType&>(key_value.value));
228 template<
class ValueType>
232 insert(key, static_cast<const ValueType&>(key_value.value));
239 return filter<Value>(filterFcn);
243 template<
class ValueType>
252 return filter<Value>(filterFcn);
256 template<
class ValueType>
264 inline bool Values::filterHelper<Value>(
const boost::function<bool(Key)> filter,
265 const ConstKeyValuePair& key_value) {
267 return filter(key_value.key);
276 template <
typename ValueType>
278 ValueType operator()(
Key j,
const Value*
const pointer) {
282 }
catch (std::bad_cast&) {
288 template <
typename MatrixType,
bool isDynamic>
292 template <
int M,
int N>
294 Eigen::Matrix<double, M, N> operator()(
Key j,
const Value*
const pointer) {
298 }
catch (std::bad_cast&) {
306 template <
int M,
int N>
308 Eigen::Matrix<double, M, N> operator()(
Key j,
const Value*
const pointer) {
312 }
catch (std::bad_cast&) {
322 if (A.rows() != M || A.cols() != N)
331 template <
int M,
int N>
332 struct handle<Eigen::Matrix<double, M, N>> {
333 Eigen::Matrix<double, M, N> operator()(
Key j,
const Value*
const pointer) {
335 (M == Eigen::Dynamic || N == Eigen::Dynamic)>()(j, pointer);
342 template<
typename ValueType>
345 KeyValueMap::const_iterator item = values_.find(j);
348 if(item == values_.end())
356 template<
typename ValueType>
359 KeyValueMap::const_iterator item = values_.find(j);
361 if(item != values_.end()) {
366 }
catch (std::bad_cast &) {
368 const Value* value = item->second;
379 template<
typename ValueType>
385 template <
typename ValueType>
_ValuesKeyValuePair< ValueType > KeyValuePair
A key-value pair, with the value a specific derived Value type.
Definition: Values-inl.h:97
A filtered view of a Values, returned from Values::filter.
Definition: Values-inl.h:94
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition: Values.cpp:133
ValueType & value
The value.
Definition: Values-inl.h:39
Definition: Values-inl.h:46
const T & value() const
Return a constant value.
Definition: GenericValue.h:58
A non-templated config holding any types of Manifold-group elements.
const Key key
The key.
Definition: Values-inl.h:38
Definition: FastList.h:38
Wraps any type T so it can play as a Value.
Definition: GenericValue.h:38
boost::transform_iterator< boost::function1< ConstKeyValuePair, const ConstKeyValuePtrPair & >, KeyValueMap::const_iterator > const_iterator
Const forward iterator, with value type ConstKeyValuePair.
Definition: Values.h:123
size_t size() const
Returns the number of values in this view.
Definition: Values-inl.h:127
Definition: Values-inl.h:277
void update(Key j, const Value &val)
single element change of existing element
Definition: Values.cpp:154
A filtered view of a const Values, returned from Values::filter.
Definition: Values-inl.h:168
A non-templated config holding any types of Manifold-group elements.
Definition: Values.h:70
bool exists(Key j) const
Check if a value exists with key j.
Definition: Values.cpp:97
const ValueType & value
The value.
Definition: Values-inl.h:48
ValueType at(Key j) const
Retrieve a variable by key j.
Definition: Values-inl.h:343
const Key key
The key.
Definition: Values-inl.h:47
Values()
Default constructor creates an empty Values class.
Definition: Values.h:144
A key-value pair, which you get by dereferencing iterators.
Definition: Values.h:101
ConstFiltered(const Filtered< ValueType > &rhs)
Conversion from Filtered to ConstFiltered.
Definition: Values-inl.h:178
Definition: Values-inl.h:289
size_t size() const
Returns the number of values in this view.
Definition: Values-inl.h:188
_ValuesConstKeyValuePair< ValueType > KeyValuePair
A const key-value pair, with the value a specific derived Value type.
Definition: Values-inl.h:171
Filtered< Value > filter(const boost::function< bool(Key)> &filterFcn)
Return a filtered view of this Values class, without copying any data.
Definition: Values-inl.h:238
This is the interface class for any value that may be used as a variable assignment in a factor graph...
Definition: Value.h:83
Definition: Values-inl.h:37
boost::transform_iterator< boost::function1< KeyValuePair, const KeyValuePtrPair & >, KeyValueMap::iterator > iterator
Mutable forward iterator, with value type KeyValuePair.
Definition: Values.h:119
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:57
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
A key-value pair, which you get by dereferencing iterators.
Definition: Values.h:109
Definition: Values-inl.h:63