#ifndef SUIFKERNEL__ITER_H #define SUIFKERNEL__ITER_H #include "iokernel/meta_class.h" #include "iokernel/cast.h" #include "suifkernel/suifkernel_messages.h" class IterHelper { void clone_iter(); public: ObjectWrapper current_object() const; const MetaClass* current_meta_class() const; const LString& current_name() const; bool is_valid() const; void next(); void previous(); void set_to( size_t index ); size_t length() const; void *current() const; IterHelper( Iterator* iter ); ~IterHelper(); IterHelper(const IterHelper &x); IterHelper & operator =(const IterHelper &x); private: Iterator* _iter; bool _owned; }; template<class T> class Iter : public IterHelper { // the current type public: virtual T& current() const { suif_assert( is_valid() ); void *v = IterHelper::current(); T& val = *(T*)v; return val; } Iter( Iterator* iter ) : IterHelper( iter ) {} Iter( const Iter &other ) : IterHelper( other ) {} virtual ~Iter(void) {}; }; #endif
written by Dimitri van Heesch, © 1997-1999