Added (inefficient) size() for Values Filtered Views
parent
b5bb607a44
commit
25f1f25062
|
|
@ -151,11 +151,22 @@ namespace gtsam {
|
||||||
typedef _KeyValuePair<ValueType> KeyValuePair;
|
typedef _KeyValuePair<ValueType> KeyValuePair;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef boost::transformed_range<
|
typedef boost::transformed_range<
|
||||||
KeyValuePair(*)(Values::KeyValuePair key_value),
|
KeyValuePair(*)(Values::KeyValuePair key_value),
|
||||||
const boost::filtered_range<
|
const boost::filtered_range<
|
||||||
boost::function<bool(const Values::ConstKeyValuePair&)>,
|
boost::function<bool(const Values::ConstKeyValuePair&)>,
|
||||||
const boost::iterator_range<iterator> > > Base;
|
const boost::iterator_range<iterator> > > Base;
|
||||||
|
public:
|
||||||
|
/** Returns the number of values in this view */
|
||||||
|
size_t size() const {
|
||||||
|
typename Base::iterator it = this->begin();
|
||||||
|
size_t i = 0;
|
||||||
|
for (; it!=this->end(); ++it)
|
||||||
|
++i;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
Filtered(const Base& base) : Base(base) {}
|
Filtered(const Base& base) : Base(base) {}
|
||||||
|
|
||||||
|
|
@ -178,6 +189,18 @@ namespace gtsam {
|
||||||
boost::function<bool(const Values::ConstKeyValuePair&)>,
|
boost::function<bool(const Values::ConstKeyValuePair&)>,
|
||||||
const boost::iterator_range<const_iterator> > > Base;
|
const boost::iterator_range<const_iterator> > > Base;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/** Returns the number of values in this view */
|
||||||
|
size_t size() const {
|
||||||
|
typename Base::const_iterator it = this->begin();
|
||||||
|
size_t i = 0;
|
||||||
|
for (; it!=this->end(); ++it)
|
||||||
|
++i;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
ConstFiltered(const Base& base) : Base(base) {}
|
ConstFiltered(const Base& base) : Base(base) {}
|
||||||
|
|
||||||
friend class Values;
|
friend class Values;
|
||||||
|
|
|
||||||
|
|
@ -274,6 +274,7 @@ TEST(Values, filter) {
|
||||||
// Filter by key
|
// Filter by key
|
||||||
int i = 0;
|
int i = 0;
|
||||||
Values::Filtered<Value> filtered = values.filter(boost::bind(std::greater_equal<Key>(), _1, 2));
|
Values::Filtered<Value> filtered = values.filter(boost::bind(std::greater_equal<Key>(), _1, 2));
|
||||||
|
EXPECT_LONGS_EQUAL(2, filtered.size());
|
||||||
BOOST_FOREACH(const Values::Filtered<>::KeyValuePair& key_value, filtered) {
|
BOOST_FOREACH(const Values::Filtered<>::KeyValuePair& key_value, filtered) {
|
||||||
if(i == 0) {
|
if(i == 0) {
|
||||||
LONGS_EQUAL(2, key_value.key);
|
LONGS_EQUAL(2, key_value.key);
|
||||||
|
|
@ -300,6 +301,7 @@ TEST(Values, filter) {
|
||||||
// Filter by type
|
// Filter by type
|
||||||
i = 0;
|
i = 0;
|
||||||
Values::Filtered<Pose3> pose_filtered = values.filter<Pose3>();
|
Values::Filtered<Pose3> pose_filtered = values.filter<Pose3>();
|
||||||
|
EXPECT_LONGS_EQUAL(2, pose_filtered.size());
|
||||||
BOOST_FOREACH(const Values::Filtered<Pose3>::KeyValuePair& key_value, pose_filtered) {
|
BOOST_FOREACH(const Values::Filtered<Pose3>::KeyValuePair& key_value, pose_filtered) {
|
||||||
if(i == 0) {
|
if(i == 0) {
|
||||||
EXPECT_LONGS_EQUAL(1, key_value.key);
|
EXPECT_LONGS_EQUAL(1, key_value.key);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue