00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _ienumerable_h
00018 #define _ienumerable_h
00019
00020 #include <spl/Debug.h>
00021 #include <spl/Delegate.h>
00022 #include <spl/Memory.h>
00023 #include <spl/IIterator.h>
00024 #include <spl/RefCountPtr.h>
00025
00034 template<typename T>
00035 class IEnumerable : public IMemoryValidate
00036 {
00037 protected:
00038 virtual RefCountPtr<IIterator<T> > IteratorPtr() = 0;
00039
00040 public:
00041 virtual ~IEnumerable() {}
00042
00043 inline void ForEach(IDelegateOneParameter<T&>& func)
00044 {
00045 RefCountPtr<IIterator<T> > iter = IteratorPtr();
00046 while(iter->Next())
00047 {
00048 func.Call(iter->Current(iter->CurrentRef()));
00049 }
00050 }
00051
00052 #if defined(DEBUG)
00053 virtual void CheckMem() const {}
00054 virtual void ValidateMem() const {}
00055 #endif
00056 };
00057
00060 #endif