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