00001
00002
00011 #ifndef ATHCONTAINERS_TOOLS_DVL_ITER_SWAP_H
00012 #define ATHCONTAINERS_TOOLS_DVL_ITER_SWAP_H
00013
00014
00015 #include "AthContainers/tools/DVLIterator.h"
00016 #include "AthContainers/tools/ATHCONTAINERS_ASSERT.h"
00017 #include <iterator>
00018
00019
00020 namespace std {
00021
00022
00030 template <class DV>
00031 void iter_swap (typename DataModel_detail::iterator<DV> a,
00032 typename DataModel_detail::iterator<DV> b)
00033 {
00034 DV::iter_swap (a, b);
00035 }
00036
00037
00045 template <class DV>
00046 void
00047 iter_swap (typename std::reverse_iterator<DataModel_detail::iterator<DV> > a,
00048 typename std::reverse_iterator<DataModel_detail::iterator<DV> > b)
00049 {
00050 DataModel_detail::iterator<DV> ai = a.base();
00051 DataModel_detail::iterator<DV> bi = b.base();
00052 --ai;
00053 --bi;
00054 DV::iter_swap (ai, bi);
00055 }
00056
00057
00067 template <class DV>
00068 DataModel_detail::iterator<DV>
00069 swap_ranges (DataModel_detail::iterator<DV> first1,
00070 DataModel_detail::iterator<DV> last1,
00071 DataModel_detail::iterator<DV> first2)
00072 {
00073
00074 for (; first1 != last1; ++first1, ++first2)
00075 std::iter_swap(first1, first2);
00076 return first2;
00077 }
00078
00079
00089 template <class DV>
00090 std::reverse_iterator<DataModel_detail::iterator<DV> >
00091 swap_ranges (std::reverse_iterator<DataModel_detail::iterator<DV> > first1,
00092 std::reverse_iterator<DataModel_detail::iterator<DV> > last1,
00093 std::reverse_iterator<DataModel_detail::iterator<DV> > first2)
00094 {
00095
00096 for (; first1 != last1; ++first1, ++first2)
00097 std::iter_swap(first1, first2);
00098 return first2;
00099 }
00100
00101
00102 }
00103
00104
00105 #endif // not ATHCONTAINERS_TOOLS_DVL_ITER_SWAP_H