SharedStaticData.h [plain text]
#pragma once
template <class Data> class CCISharedStaticDataProxy;
template <class Data>
class CCISharedStaticData {
public:
CCISharedStaticData (): mRefCount (0), mData (NULL) {}
~CCISharedStaticData () {}
private:
CCIUInt32 mRefCount;
Data* mData;
friend class CCISharedStaticDataProxy <Data>;
};
template <class Data>
class CCISharedStaticDataProxy {
public:
CCISharedStaticDataProxy (
CCISharedStaticData <Data>& inData):
mData (inData),
mInitialized (false) {
}
Data* Get () {
if (!mInitialized) {
if (mData.mRefCount == 0) {
mData.mData = new Data ();
}
mData.mRefCount++;
mInitialized = true;
}
return mData.mData;
}
~CCISharedStaticDataProxy () {
if (mInitialized) {
mInitialized = false;
mData.mRefCount--;
if (mData.mRefCount == 0) {
delete mData.mData;
}
}
}
CCILockID Lock () const {
#warning CCISharedStaticDataProxy::Lock unimplemented
return 0;
}
void Unlock (CCILockID ) {
#warning CCISharedStaticDataProxy::Unlock unimplemented
}
private:
CCISharedStaticData <Data>& mData;
bool mInitialized;
};