00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020 #ifndef flc_vmmaps_H
00021 #define flc_vmmaps_H
00022
00023 #include <falcon/setup.h>
00024 #include <falcon/types.h>
00025 #include <falcon/genericvector.h>
00026 #include <falcon/genericmap.h>
00027 #include <falcon/itemtraits.h>
00028 #include <falcon/symbol.h>
00029 #include <falcon/string.h>
00030 #include <falcon/module.h>
00031 #include <falcon/basealloc.h>
00032
00033 namespace Falcon {
00034
00035 class Symbol;
00036 class Item;
00037 class LiveModule;
00038
00039
00048 class FALCON_DYN_CLASS SymModule: public BaseAlloc
00049 {
00050 Item *m_item;
00051 const Symbol *m_symbol;
00052 LiveModule *m_lmod;
00053 int32 m_wkiid;
00054
00055 public:
00056 SymModule():
00057 m_item(0),
00058 m_symbol(0),
00059 m_lmod(0),
00060 m_wkiid( -1 )
00061 {}
00062
00064 SymModule( Item *itm, LiveModule *mod, const Symbol *sym ):
00065 m_item( itm ),
00066 m_symbol( sym ),
00067 m_lmod( mod ),
00068 m_wkiid( -1 )
00069 {}
00070
00074 SymModule( LiveModule *mod, const Symbol *sym );
00075
00077 SymModule( int32 wiid, LiveModule *mod, const Symbol *sym ):
00078 m_item( 0 ),
00079 m_symbol( sym ),
00080 m_lmod( mod ),
00081 m_wkiid( wiid )
00082 {}
00083
00091 Item *item() const { return m_item; }
00092 const Symbol *symbol() const { return m_symbol; }
00093 uint32 symbolId() const { return m_symbol->itemId(); }
00094 LiveModule *liveModule() const { return m_lmod; }
00095
00102 int32 wkiid() const { return m_wkiid; }
00103 };
00104
00105
00106 class SymModuleTraits: public ElementTraits
00107 {
00108 public:
00109 virtual ~SymModuleTraits() {}
00110 virtual uint32 memSize() const;
00111 virtual void init( void *itemZone ) const;
00112 virtual void copy( void *targetZone, const void *sourceZone ) const;
00113 virtual int compare( const void *first, const void *second ) const;
00114 virtual void destroy( void *item ) const;
00115 virtual bool owning() const;
00116 };
00117
00118
00119 namespace traits
00120 {
00121 extern SymModuleTraits &t_SymModule();
00122 }
00123
00127 class FALCON_DYN_CLASS SymModuleMap: public Map
00128 {
00129 public:
00130 SymModuleMap();
00131 };
00132
00136 class FALCON_DYN_CLASS LiveModuleMap: public Map
00137 {
00138 public:
00139 LiveModuleMap();
00140 };
00141
00142 }
00143
00144 #endif
00145
00146