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 <trace-tools/tool/static_base.hh>
00026
00027 namespace tool
00028 {
00029
00030 template <class B>
00031 struct iterable;
00032
00034 template <class B>
00035 struct types< iterable<B> >
00036 {
00037 typedef undefined_type iterator;
00038 };
00039
00073 template <class Bottom = bottom>
00074 struct iterable: tt_inherit(public static_base, iterable<Bottom>)
00075 {
00077 typedef tt_get_exact(Bottom, iterable<Bottom>) exact_type;
00078
00080 typedef tt_type(iterator, exact_type) iterator;
00081
00083 iterator begin();
00084
00086 iterator end();
00087
00089 template <class OutputIterator>
00090 void
00091 operator () (const OutputIterator& output);
00092 };
00093
00094 }
00095
00096 # include "iterable.hxx"
00097
00098 #endif // ! TOOL_ITERABLE_HH_