00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026
00027
00028
00029
00030 #define prefix_ inline
00031
00032
00033 template <class Range, class Fn>
00034 prefix_ boost::iterator_range<
00035 boost::transform_iterator< Fn,
00036 typename boost::range_const_iterator<Range>::type > >
00037 senf::make_transform_range(Range const & range, Fn const & fn)
00038 {
00039 return boost::make_iterator_range(
00040 boost::make_transform_iterator(boost::begin(range), fn),
00041 boost::make_transform_iterator(boost::end(range), fn) );
00042 }
00043
00044 template <class Range, class Fn>
00045 prefix_ boost::iterator_range<
00046 boost::transform_iterator< Fn,
00047 typename boost::range_iterator<Range>::type > >
00048 senf::make_transform_range(Range & range, Fn const & fn)
00049 {
00050 return boost::make_iterator_range(
00051 boost::make_transform_iterator(boost::begin(range), fn),
00052 boost::make_transform_iterator(boost::end(range), fn) );
00053 }
00054
00055 template <class Range, class Iterator>
00056 prefix_ void senf::copy_range(Range const & range, Iterator const & i)
00057 {
00058 std::copy(boost::begin(range), boost::end(range), i);
00059 }
00060
00061 template <class Range, class Iterator>
00062 prefix_ void senf::copy_range(Range & range, Iterator const & i)
00063 {
00064 std::copy(boost::begin(range), boost::end(range), i);
00065 }
00066
00067 template <class Range>
00068 prefix_ bool senf::has_one_elt(Range r)
00069 {
00070 return ! r.empty() && boost::next(r.begin()) == r.end();
00071 }
00072
00073
00074 #undef prefix_
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085