/** \file lyxfunctional.h
\brief Convenient function objects for use with LyX
-
+
This is currently a small collection of small function objects for use
together with std::algorithms.
**/
#include <iterator>
-//namespace lyx {
-
+namespace lyx {
template<class R, class C, class A>
class class_fun_t {
public:
- class_fun_t(C & ct, R(C::*p)(A))
+ class_fun_t(C & ct, R(C::*p)(A))
: c(ct), cmf(p) {}
R operator()(A & a) const {
return (c.*cmf)(a);
template <class C, class A> void_class_fun_t<C, A>
-class_fun(C & c, void(C::*f)(A))
+void_class_fun(C & c, void(C::*f)(A))
{
return void_class_fun_t<C, A>(c, f);
}
typedef void difference_type;
typedef void pointer;
typedef void reference;
-
+
back_insert_fun_iterator(Cont & x, MemRet(Type::*p)())
: container(&x), pmf(p) {}
typedef void difference_type;
typedef void pointer;
typedef void reference;
-
+
const_back_insert_fun_iterator(Cont & x, MemRet(Type::*p)() const)
: container(&x), pmf(p) {}
-
+
~const_back_insert_fun_iterator() {}
-
+
const_back_insert_fun_iterator &
operator=(Type const * val) {
container->push_back((val->*pmf)());
return const_compare_memfun_t<R, C, A>(p, a);
}
-
+
// Functors used in the template.
///
-template<typename T1, typename T2>
+template<typename T>
class equal_1st_in_pair {
public:
///
- equal_1st_in_pair(T1 const & value) : value_(value) {}
+ typedef typename T::first_type first_type;
+ ///
+ typedef T pair_type;
///
- typedef std::pair<T1, T2> pair_type;
+ equal_1st_in_pair(first_type const & value) : value_(value) {}
///
bool operator() (pair_type const & p) const {
return p.first == value_;
}
private:
///
- T1 const & value_;
+ first_type const & value_;
};
///
-template<typename T1, typename T2>
+template<typename T>
class equal_2nd_in_pair {
public:
///
- equal_2nd_in_pair(T2 const & value) : value_(value) {}
+ typedef typename T::second_type second_type;
///
- typedef std::pair<T1, T2> pair_type;
+ typedef T pair_type;
+ ///
+ equal_2nd_in_pair(second_type const & value) : value_(value) {}
///
bool operator() (pair_type const & p) const {
return p.second == value_;
}
private:
///
- T2 const & value_;
+ second_type const & value_;
};
-
-// } // end of namespace lyx
+} // end of namespace lyx
#endif