#ifndef _COMMON_GLOBALDATA_HPP_ #define _COMMON_GLOBALDATA_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_TYPES_HPP_ #include #endif #ifndef _COMMON_EXCEPTION_HPP_ #include #endif template class GlobalData { public: GlobalData(void); GlobalData(const GlobalData &someGlobalData); GlobalData(DWORD sizeData,UINT globalFlags=GMEM_FIXED); virtual ~GlobalData(); DWORD size(void)const; WORD size(DWORD sizeData,UINT globalFlags=GMEM_FIXED); UINT globalFlags(void)const; void globalFlags(UINT globalFlags); T &operator[](DWORD itemIndex); WORD operator==(const GlobalData &someGlobalData)const; GlobalData &operator=(const GlobalData &someGlobalData); bool setZero(void); HANDLE getHandle(void)const; WORD isOkay(void)const; private: void destroyGlobalData(void); WORD createGlobalData(void); T HUGE *mlpGlobalData; HGLOBAL mhGlobalData; UINT mGlobalFlags; DWORD mSizeData; }; template inline GlobalData::GlobalData(void) : mlpGlobalData(0), mGlobalFlags(GMEM_FIXED), mSizeData(0), mhGlobalData(0) { } template inline GlobalData::GlobalData(const GlobalData &someGlobalData) : mlpGlobalData(0), mGlobalFlags(GMEM_FIXED), mSizeData(0), mhGlobalData(0) { *this=someGlobalData; } template inline GlobalData::GlobalData(DWORD sizeData,UINT globalFlags) : mlpGlobalData(0), mGlobalFlags(globalFlags), mSizeData(sizeData), mhGlobalData(0) { createGlobalData(); } template inline GlobalData::~GlobalData() { destroyGlobalData(); } template inline DWORD GlobalData::size(void)const { return mSizeData; } template inline WORD GlobalData::size(DWORD sizeData,UINT globalFlags) { mGlobalFlags=globalFlags; mSizeData=sizeData; if(createGlobalData())return TRUE; mSizeData=0; mGlobalFlags=GMEM_FIXED; return FALSE; } template inline UINT GlobalData::globalFlags(void)const { return mGlobalFlags; } template inline void GlobalData::globalFlags(UINT globalFlags) { mGlobalFlags=globalFlags; } template inline T &GlobalData::operator[](DWORD itemIndex) { if(itemIndex>=mSizeData)throw(BoundaryError()); return *(mlpGlobalData+itemIndex); } template inline WORD GlobalData::createGlobalData(void) { destroyGlobalData(); if(!mSizeData)return FALSE; mhGlobalData=::GlobalAlloc(mGlobalFlags,mSizeData*sizeof(T)); if(!mhGlobalData)return FALSE; mlpGlobalData=(T HUGE*)::GlobalLock(mhGlobalData); return TRUE; } template inline void GlobalData::destroyGlobalData(void) { if(!mlpGlobalData)return; ::GlobalUnlock(mhGlobalData); ::GlobalFree(mhGlobalData); mhGlobalData=0; mlpGlobalData=0; } template inline HANDLE GlobalData::getHandle(void)const { return ::GlobalHandle(mlpGlobalData); } template inline WORD GlobalData::isOkay(void)const { return (mlpGlobalData?TRUE:FALSE); } #if defined(_MSC_VER) #include #endif #endif