00001
00002 #ifndef _INSTIGATE_STL_INTERNAL_HEADER_IN_ALGORITHM
00003 #error This is an internal header file used to implement Instigate STL.\
00004 It should never be included directly by a program.
00005 #endif
00006
00007 #ifndef INSTIGATE_STL_REVERSE_COPY_HPP
00008 #define INSTIGATE_STL_REVERSE_COPY_HPP
00009
00059
00060 #include "concept.hpp"
00061
00062
00063
00064
00065
00066
00067 namespace instigate {
00068 namespace stl {
00069 template <typename B, typename O>
00070 O reverse_copy(B b, B e, O r);
00071 }
00072 }
00073
00107 template <typename B, typename O>
00108 O instigate::stl::reverse_copy(B b, B e, O r)
00109 {
00110 namespace BI = instigate::stl::bidirectional_iterator;
00111 namespace INC = instigate::stl::incrementable_iterator;
00112 namespace WR = instigate::stl::writable_iterator;
00113 namespace RI = instigate::stl::readable_iterator;
00114 namespace EQ = instigate::generic::equality_comparable;
00115 CHECK(BI::requirements<B>);
00116 CHECK(RI::requirements<B>);
00117 CHECK(INC::requirements<O>);
00118 CHECK(WR::requirements<O>);
00119 while (!equal(b, e)) {
00120 decrement(e);
00121 dereference_assign(r, const_dereference(e));
00122 increment(r);
00123 }
00124 return r;
00125 }
00126
00127
00128
00129 #endif // INSTIGATE_STL_REVERSE_COPY_HPP