00001 #ifndef IOKERNEL__VIRTUAL_ITERATOR_H 00002 #define IOKERNEL__VIRTUAL_ITERATOR_H 00003 00004 #include "iokernel_forwarders.h" 00005 #include "meta_class.h" 00006 00007 class VirtualNode { 00008 public: 00009 virtual ~VirtualNode(); 00010 virtual const MetaClass* current_meta_class( const VirtualIterator* state ) const; 00011 virtual const String current_name( const VirtualIterator* state ) const; 00012 virtual void* current( const VirtualIterator* state ) const; 00013 virtual bool first( VirtualIterator* state, ConstAddress address ) = 0; 00014 00015 virtual bool next( VirtualIterator* state ); 00016 virtual void delete_state( IteratorState& state ); 00017 }; 00018 00019 00020 class VirtualIterator : public Iterator { 00021 public: 00022 VirtualIterator( ConstAddress address, VirtualNode* start_node ); 00023 00024 virtual const MetaClass* current_meta_class() const; 00025 virtual const LString& current_name() const; 00026 00027 virtual Address current() const; 00028 00029 virtual bool is_valid() const; 00030 00031 virtual void next(); 00032 00033 virtual void previous(); 00034 00035 virtual void first(); 00036 00037 virtual void set_to( size_t index ); 00038 00039 virtual IteratorState& top() const; 00040 00041 virtual bool pop(); 00042 00043 virtual void push( const IteratorState& state ) ; 00044 virtual VirtualNode* current_node() const; 00045 00046 virtual ~VirtualIterator(); 00047 00048 virtual Iterator *clone() const; 00049 protected: 00050 bool _is_valid; 00051 00052 suif_vector<IteratorState>* _state; 00053 VirtualNode* _start_node; 00054 private: 00055 VirtualIterator(const VirtualIterator &); 00056 VirtualIterator &operator=(const VirtualIterator &); 00057 00058 }; 00059 00060 00061 00062 #endif