/** @file /world/struct_holder.h Obecna sablona pro objektovou nadstavbu obycejne struktury @author Petr Wolf */ #ifndef WORLD_STRUCT_HOLDER_H #define WORLD_STRUCT_HOLDER_H #include "common/mm.h" namespace World { /// Sablona pro objektovou nadstavbu C-ckovych datovych struktur zajistujici vlastni (de)alokaci a spravu template class TStructHolder { protected: T * _data; int _id; bool _self_allocated; public: TStructHolder(); TStructHolder(T * data, int id = 0); TStructHolder(int id); ~TStructHolder(); void load(T * data); void reset(); void alloc(); void self_allocated(bool allocated); T & data(); int id(); }; template TStructHolder::TStructHolder() { _data = NULL; _id = 0; _self_allocated = false; } template TStructHolder::TStructHolder(T * data, int id) { _data = data; _id = id; _self_allocated = false; } template TStructHolder::TStructHolder(int id) { _data = NULL; _id = id; _self_allocated = false; } template TStructHolder::~TStructHolder() { reset(); } template void TStructHolder::reset() { if (_data && _self_allocated) { KMemFree(_data); } _data = NULL; } template void TStructHolder::load(T * data) { _data = data; } template void TStructHolder::alloc() { _data = (T *)KMemAlloc(sizeof(T)); int size = sizeof(T); _self_allocated = true; } template void TStructHolder::self_allocated(bool allocated) { _self_allocated = allocated; } template T & TStructHolder::data() { if (_data == NULL) _data = (T *)KMemAlloc(sizeof(T)); return * _data; } template int TStructHolder::id() { return _id; } } #endif /*****************************************************************************/