00001 #ifndef SUIFKERNEL__ITER_H 00002 #define SUIFKERNEL__ITER_H 00003 00004 #include "iokernel/meta_class.h" 00005 #include "iokernel/cast.h" 00006 #include "suifkernel/suifkernel_messages.h" 00007 00019 class IterHelper { 00020 void clone_iter(); 00021 public: 00023 ObjectWrapper current_object() const; 00024 00025 const MetaClass* current_meta_class() const; 00026 00027 const LString& current_name() const; 00028 00030 bool is_valid() const; 00031 00033 void next(); 00034 00036 void previous(); 00037 00039 void set_to( size_t index ); 00040 00042 size_t length() const; 00043 00044 void *current() const; 00045 00046 IterHelper( Iterator* iter ); 00047 ~IterHelper(); 00048 00049 IterHelper(const IterHelper &x); 00050 00051 IterHelper & operator =(const IterHelper &x); 00052 00053 private: 00054 Iterator* _iter; 00055 bool _owned; 00056 }; 00057 00086 template<class T> 00087 class Iter : public IterHelper { 00088 // the current type 00089 public: 00090 00091 virtual T& current() const { 00092 suif_assert( is_valid() ); 00093 void *v = IterHelper::current(); 00094 T& val = *(T*)v; 00095 return val; 00096 } 00097 00098 Iter( Iterator* iter ) : IterHelper( iter ) {} 00099 Iter( const Iter &other ) : IterHelper( other ) {} 00100 virtual ~Iter(void) {}; 00101 00102 }; 00103 00104 00105 #endif