Added Values::tryInsert

release/4.3a0
Luca Carlone 2013-08-13 22:30:02 +00:00
parent deaabeb0bf
commit 4efdf497cd
2 changed files with 13 additions and 2 deletions

View File

@ -125,8 +125,7 @@ namespace gtsam {
/* ************************************************************************* */
void Values::insert(Key j, const Value& val) {
Key key = j; // Non-const duplicate to deal with non-const insert argument
std::pair<KeyValueMap::iterator,bool> insertResult = values_.insert(key, val.clone_());
std::pair<iterator,bool> insertResult = tryInsert(j, val);
if(!insertResult.second)
throw ValuesKeyAlreadyExists(j);
}
@ -139,6 +138,12 @@ namespace gtsam {
}
}
/* ************************************************************************* */
std::pair<Values::iterator, bool> Values::tryInsert(Key j, const Value& value) {
std::pair<KeyValueMap::iterator, bool> result = values_.insert(j, value.clone_());
return std::make_pair(boost::make_transform_iterator(result.first, &make_deref_pair), result.second);
}
/* ************************************************************************* */
void Values::update(Key j, const Value& val) {
// Find the value to update

View File

@ -232,6 +232,12 @@ namespace gtsam {
/** Add a set of variables, throws KeyAlreadyExists<J> if a key is already present */
void insert(const Values& values);
/** insert that mimics the STL map insert - if the value already exists, the map is not modified
* and an iterator to the existing value is returned, along with 'false'. If the value did not
* exist, it is inserted and an iterator pointing to the new element, along with 'true', is
* returned. */
std::pair<iterator, bool> tryInsert(Key j, const Value& value);
/** single element change of existing element */
void update(Key j, const Value& val);