Go to the documentation of this file. 1 #ifndef _utl_IteratorRange_h_
2 #define _utl_IteratorRange_h_
4 #include <boost/range/iterator_range.hpp>
24 #define OFFLINE_MAKE_ITERATOR_RANGE(_Iterator_, _NamePrefix_) \
25 boost::iterator_range<_Iterator_> _NamePrefix_##Range() \
26 { return boost::make_iterator_range(_NamePrefix_##Begin(), _NamePrefix_##End()); }
28 #define OFFLINE_MAKE_CONST_ITERATOR_RANGE(_ConstIterator_, _NamePrefix_) \
29 boost::iterator_range<_ConstIterator_> _NamePrefix_##Range() const \
30 { return boost::make_iterator_range(_NamePrefix_##Begin(), _NamePrefix_##End()); }
32 #define OFFLINE_DECLARE_CONST_ITERATOR_RANGE(_ConstIterator_, _NamePrefix_) \
33 boost::iterator_range<_ConstIterator_> _NamePrefix_##Range() const
35 #define OFFLINE_DEFINE_CONST_ITERATOR_RANGE(_ConstIterator_, _Class_, _NamePrefix_) \
36 boost::iterator_range<_Class_::_ConstIterator_> \
37 _Class_::_NamePrefix_##Range() \
40 return boost::make_iterator_range(_NamePrefix_##Begin(), _NamePrefix_##End()); \
43 #define OFFLINE_MAKE_BOTH_ITERATOR_RANGES(_Iterator_, _ConstIterator_, _NamePrefix_) \
44 OFFLINE_MAKE_ITERATOR_RANGE(_Iterator_, _NamePrefix_) \
45 OFFLINE_MAKE_CONST_ITERATOR_RANGE(_ConstIterator_, _NamePrefix_)
61 #define OFFLINE_MAKE_ITERATOR_RANGE_ARG(_Iterator_, _NamePrefix_, _Arg_) \
62 boost::iterator_range<_Iterator_> _NamePrefix_##Range(_Arg_) \
63 { return boost::make_iterator_range(_NamePrefix_##Begin(arg), _NamePrefix_##End(arg)); }
65 #define OFFLINE_MAKE_CONST_ITERATOR_RANGE_ARG(_ConstIterator_, _NamePrefix_, _Arg_) \
66 boost::iterator_range<_ConstIterator_> _NamePrefix_##Range(_Arg_) const \
67 { return boost::make_iterator_range(_NamePrefix_##Begin(arg), _NamePrefix_##End(arg)); }
69 #define OFFLINE_MAKE_BOTH_ITERATOR_RANGES_ARG(_Iterator_, _ConstIterator_, _NamePrefix_, _Arg_) \
70 OFFLINE_MAKE_ITERATOR_RANGE_ARG(_Iterator_, _NamePrefix_, _Arg_) \
71 OFFLINE_MAKE_CONST_ITERATOR_RANGE_ARG(_ConstIterator_, _NamePrefix_, _Arg_)
87 #define OFFLINE_MAKE_ITERATOR_RANGE_ARG2(_Iterator_, _NamePrefix_, _Arg1_, _Arg2_) \
88 boost::iterator_range<_Iterator_> _NamePrefix_##Range(_Arg1_, _Arg2_) \
89 { return boost::make_iterator_range(_NamePrefix_##Begin(arg1, arg2), _NamePrefix_##End(arg1, arg2)); }
91 #define OFFLINE_MAKE_CONST_ITERATOR_RANGE_ARG2(_ConstIterator_, _NamePrefix_, _Arg1_, _Arg2_) \
92 boost::iterator_range<_ConstIterator_> _NamePrefix_##Range(_Arg1_, _Arg2_) const \
93 { return boost::make_iterator_range(_NamePrefix_##Begin(arg1, arg2), _NamePrefix_##End(arg1, arg2)); }
95 #define OFFLINE_MAKE_BOTH_ITERATOR_RANGES_ARG2(_Iterator_, _ConstIterator_, _NamePrefix_, _Arg1_, _Arg2_) \
96 OFFLINE_MAKE_ITERATOR_RANGE_ARG2(_Iterator_, _NamePrefix_, _Arg1_, _Arg2_) \
97 OFFLINE_MAKE_CONST_ITERATOR_RANGE_ARG2(_ConstIterator_, _NamePrefix_, _Arg1_, _Arg2_)
112 #define OFFLINE_MAKE_FRIEND_RANGES(_Iterator_, _Class_) \
113 friend _Iterator_ begin(_Class_& x) { return x.Begin(); } \
114 friend _Iterator_ end(_Class_& x) { return x.End(); }
116 #define OFFLINE_MAKE_FRIEND_CONST_RANGES(_ConstIterator_, _Class_) \
117 friend _ConstIterator_ begin(const _Class_& x) { return x.Begin(); } \
118 friend _ConstIterator_ cbegin(const _Class_& x) { return x.Begin(); } \
119 friend _ConstIterator_ end(const _Class_& x) { return x.End(); } \
120 friend _ConstIterator_ cend(const _Class_& x) { return x.End(); }
122 #define OFFLINE_MAKE_BOTH_FRIEND_RANGES(_Iterator_, _ConstIterator_, _Class_) \
123 OFFLINE_MAKE_FRIEND_RANGES(_Iterator_, _Class_) \
124 OFFLINE_MAKE_FRIEND_CONST_RANGES(_ConstIterator_, _Class_)
, generated on Tue Sep 26 2023.