Files
scylladb/util/transform_iterator.hh
Avi Kivity d63489d6b8 util: add transform_iterator
Like boost's - an iterator that applies a function to the result
of an underlying iterator.  Unlike boost, it supports using lambdas
for the function.
2014-10-15 17:16:55 +03:00

40 lines
955 B
C++

/*
* Copyright (C) 2014 Cloudius Systems, Ltd.
*/
#ifndef UTIL_TRANSFORM_ITERATOR_HH_
#define UTIL_TRANSFORM_ITERATOR_HH_
template <typename Iterator, typename Func>
class transform_iterator {
Iterator _i;
Func _f;
public:
transform_iterator(Iterator i, Func f) : _i(i), _f(f) {}
auto operator*() { return _f(*_i); }
transform_iterator& operator++() {
++_i;
return *this;
}
transform_iterator operator++(int) {
transform_iterator ret(*this);
_i++;
return ret;
}
bool operator==(const transform_iterator& x) const {
return _i == x._i;
}
bool operator!=(const transform_iterator& x) const {
return !operator==(x);
}
};
template <typename Iterator, typename Func>
inline
transform_iterator<Iterator, Func>
make_transform_iterator(Iterator i, Func f) {
return transform_iterator<Iterator, Func>(i, f);
}
#endif /* UTIL_TRANSFORM_ITERATOR_HH_ */