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_HXX_
00023 # define TOOL_ITERABLE_HXX_
00024
00025 # include <algorithm>
00026
00027 # include "iterable.hh"
00028
00029 namespace tool
00030 {
00031
00032 template <class B>
00033 typename iterable<B>::iterator
00034 iterable<B>::begin() const
00035 {
00036 return iterator (this->exact(), false);
00037 }
00038
00039 template <class B>
00040 typename iterable<B>::iterator
00041 iterable<B>::end() const
00042 {
00043 return iterator (this->exact(), true);
00044 }
00045
00046 template <class B>
00047 template <class O>
00048 void
00049 iterable<B>::operator () (const O& o) const
00050 {
00051 std::copy(this->begin(), this->end(), o);
00052 }
00053
00054 template <class B>
00055 template <class F>
00056 void
00057 iterable<B>::for_each(F& f) const
00058 {
00059 const const_iterator e = end();
00060
00061 for (const_iterator i = begin(); i != e; ++i)
00062 f(*i);
00063 }
00064
00065 template <class B>
00066 template <class F>
00067 void
00068 iterable<B>::for_each(const F& f) const
00069 {
00070 const const_iterator e = end();
00071
00072 for (const_iterator i = begin(); i != e; ++i)
00073 f(*i);
00074 }
00075
00076 }
00077
00078
00079 #endif // ! TOOL_ITERABLE_HXX_