Added (inefficient) size() for Values Filtered Views
parent
b5bb607a44
commit
25f1f25062
|
|
@ -151,11 +151,22 @@ namespace gtsam {
|
|||
typedef _KeyValuePair<ValueType> KeyValuePair;
|
||||
|
||||
private:
|
||||
typedef boost::transformed_range<
|
||||
KeyValuePair(*)(Values::KeyValuePair key_value),
|
||||
const boost::filtered_range<
|
||||
boost::function<bool(const Values::ConstKeyValuePair&)>,
|
||||
const boost::iterator_range<iterator> > > Base;
|
||||
typedef boost::transformed_range<
|
||||
KeyValuePair(*)(Values::KeyValuePair key_value),
|
||||
const boost::filtered_range<
|
||||
boost::function<bool(const Values::ConstKeyValuePair&)>,
|
||||
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) {}
|
||||
|
||||
|
|
@ -178,6 +189,18 @@ namespace gtsam {
|
|||
boost::function<bool(const Values::ConstKeyValuePair&)>,
|
||||
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) {}
|
||||
|
||||
friend class Values;
|
||||
|
|
|
|||
|
|
@ -274,6 +274,7 @@ TEST(Values, filter) {
|
|||
// Filter by key
|
||||
int i = 0;
|
||||
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) {
|
||||
if(i == 0) {
|
||||
LONGS_EQUAL(2, key_value.key);
|
||||
|
|
@ -300,6 +301,7 @@ TEST(Values, filter) {
|
|||
// Filter by type
|
||||
i = 0;
|
||||
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) {
|
||||
if(i == 0) {
|
||||
EXPECT_LONGS_EQUAL(1, key_value.key);
|
||||
|
|
|
|||
Loading…
Reference in New Issue