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_FIND_HPP
00008 #define INSTIGATE_STL_FIND_HPP
00009
00058
00059 #include "concept.hpp"
00060 #include "_basis.hpp"
00061
00062
00063 #include <generic/base.hpp>
00064
00065
00066
00067
00068 namespace instigate {
00069 namespace stl {
00070 template <typename I, typename V>
00071 I find(I b, I e, const V& v);
00072 }
00073 }
00074
00104 template <typename I, typename V>
00105 inline I instigate::stl::find(I b, I e, const V& v)
00106 {
00107 namespace SP = instigate::stl::single_pass_iterator;
00108 namespace RI = instigate::stl::readable_iterator;
00109 namespace EQ = instigate::generic::equality_comparable;
00110 typedef typename instigate::stl::readable_iterator::interface<I>::
00111 value_type value_type;
00112 CHECK(SP::requirements<I>);
00113 CHECK(RI::requirements<I>);
00114 CHECK(EQ::requirements<V>);
00115 while(!equal(b, e) && !equal(const_dereference(b), v))
00116 {
00117 increment(b);
00118 }
00119 return b;
00120 }
00121
00122
00123
00124 #endif // INSTIGATE_STL_FIND_HPP