00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020 #ifndef FLC_CACHE_OBJECT_H
00021 #define FLC_CACHE_OBJECT_H
00022
00023 #include <falcon/setup.h>
00024 #include <falcon/coreobject.h>
00025 #include <falcon/cclass.h>
00026
00027 namespace Falcon
00028 {
00029
00030 class VMachine;
00031
00032 class FALCON_DYN_CLASS CacheObject: public CoreObject
00033 {
00034 protected:
00035 mutable Item *m_cache;
00036
00037 CacheObject( const CoreClass* generator, bool bSeralizing = false );
00038 CacheObject( const CacheObject &other );
00039
00040 public:
00041
00042 virtual ~CacheObject();
00043
00044 virtual bool serialize( Stream *stream, bool bLive ) const;
00045 virtual bool deserialize( Stream *stream, bool bLive );
00046 virtual bool setProperty( const String &prop, const Item &value );
00047 virtual bool getProperty( const String &key, Item &ret ) const;
00048
00053 virtual void gcMark( uint32 mark );
00054
00055 Item *cachedProperty( const String &name ) const
00056 {
00057 register uint32 pos;
00058 if ( ! m_generatedBy->properties().findKey( name, pos ) )
00059 return 0;
00060
00061 return m_cache + pos;
00062 }
00063
00064 Item *cachedPropertyAt( uint32 pos ) const {
00065 if ( pos > m_generatedBy->properties().added() )
00066 return 0;
00067 return m_cache + pos;
00068 }
00069
00076 virtual void reflectFrom( void *user_data );
00077
00086 virtual void reflectTo( void *user_data ) const;
00087
00088 };
00089
00090 }
00091
00092 #endif
00093
00094