00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef TOOL_ITERABLE_HH_
00023 # define TOOL_ITERABLE_HH_
00024
00025 # include <wipal/tool/static_base.hh>
00026
00027 namespace wpl
00028 {
00029
00030 namespace tool
00031 {
00032
00033 template <class B>
00034 struct iterable;
00035
00037 template <class B>
00038 struct types< iterable<B> >
00039 {
00040 typedef undefined_type iterator;
00041 };
00042
00077 template <class Bottom = bottom>
00078 struct iterable: WP_INHERIT(public static_base, iterable<Bottom>)
00079 {
00081 typedef WP_GET_EXACT(Bottom, iterable<Bottom>) exact_type;
00082
00084
00085 typedef WP_TYPE(iterator, exact_type) iterator;
00086 typedef iterator const_iterator;
00088
00090 iterator begin() const;
00091
00093 iterator end() const;
00094
00096 template <class OutputIterator>
00097 void
00098 operator () (const OutputIterator& output) const;
00099
00101
00102 template <class Functor>
00103 void
00104 for_each(Functor& f) const;
00105
00106 template <class Functor>
00107 void
00108 for_each(const Functor& f) const;
00110
00111 };
00112
00113 }
00114
00115 }
00116
00117 # include "iterable.hxx"
00118
00119 #endif // ! TOOL_ITERABLE_HH_