is_member.hppGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ADOBE_FUNCTIONAL_IS_MEMBER_HPP
00010 #define ADOBE_FUNCTIONAL_IS_MEMBER_HPP
00011
00012 #include <adobe/config.hpp>
00013
00014 #include <boost/iterator/iterator_traits.hpp>
00015 #include <boost/range/begin.hpp>
00016 #include <boost/range/const_iterator.hpp>
00017 #include <boost/range/end.hpp>
00018
00019 #include <adobe/algorithm/binary_search.hpp>
00020 #include <adobe/functional/operator.hpp>
00021
00022
00023
00024 namespace adobe {
00025
00026
00027
00032 template <typename I,
00033 typename O = less>
00034 struct is_member
00035 {
00036 typedef bool result_type;
00037
00038 is_member(I f, I l, O o = O()) : first(f), last(l), compare(o) { }
00039
00040 bool operator()(const typename boost::iterator_value<I>::type& x) const
00041 { return binary_search(first, last, x, compare) != last; }
00042
00043 I first;
00044 I last;
00045 O compare;
00046 };
00047
00048 template <typename I>
00049 is_member<I, less> make_is_member(I f, I l) { return is_member<I, less>(f, l); }
00050
00051 template <typename I,
00052 typename O>
00053 is_member<I, O> make_is_member(I f, I l, O o) { return is_member<I, O>(f, l, o); }
00054
00055 template <typename I>
00056 is_member<typename boost::range_const_iterator<I>::type, less> make_is_member(const I& r)
00057 { return make_is_member(begin(r), end(r)); }
00058
00059 template <typename I,
00060 typename O>
00061 is_member<typename boost::range_const_iterator<I>::type, O> make_is_member(const I& r, O o)
00062 { return make_is_member(begin(r), end(r), o); }
00063
00065
00066
00067
00068 }
00069
00070
00071
00072 #endif
00073
00074
|