00001 #ifndef INCLUDE_ORA_IARRAYHANDLER_H 00002 #define INCLUDE_ORA_IARRAYHANDLER_H 00003 00004 #include <cstddef> 00005 00006 namespace Reflex { 00007 class Type; 00008 } 00009 00010 namespace ora { 00011 00012 class IArrayIteratorHandler { 00013 public: 00015 virtual ~IArrayIteratorHandler() {} 00016 00018 virtual void increment() = 0; 00019 00021 virtual void* object() = 0; 00022 00024 virtual Reflex::Type& returnType() = 0; 00025 }; 00026 00027 00028 class IArrayHandler { 00029 00030 public: 00032 virtual ~IArrayHandler() {} 00033 00035 virtual size_t size( const void* address ) = 0; 00036 00038 virtual size_t startElementIndex( const void* ){ return 0; }; 00039 00041 virtual IArrayIteratorHandler* iterate( const void* address ) = 0; 00042 00044 virtual void appendNewElement( void* address, void* data ) = 0; 00045 00047 virtual void clear( const void* address ) = 0; 00048 00050 virtual bool isAssociative() const { return false; } 00051 00053 virtual size_t persistentSize( const void* address ){ return size(address);} 00054 00056 virtual void finalize( void* ){ } 00057 00059 virtual Reflex::Type& iteratorReturnType() = 0; 00060 }; 00061 00062 } 00063 00064 00065 #endif