1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef CR_DEF_TYPES_H
#define CR_DEF_TYPES_H
#include "creg_cond.h"
#ifdef USING_CREG
#include "Sim/Units/UnitDefHandler.h"
#include "Sim/Features/FeatureDef.h"
#include "Sim/Features/FeatureDefHandler.h"
#include "Sim/Weapons/WeaponDefHandler.h"
namespace creg
{
#define DECTYPE(T, cb) \
class T ## Type : public IType \
{ \
public: \
void Serialize(ISerializer* s, void* instance) \
{ \
const T** defPtr = (const T**) instance; \
if (s->IsWriting()) { \
int id = (*defPtr) != nullptr ? (*defPtr)->id : -1; \
s->SerializeInt(&id, sizeof(id)); \
} else { \
int id; \
s->SerializeInt(&id, sizeof(id)); \
*defPtr = cb(id); \
} \
} \
std::string GetName() const { return #T "*"; } \
size_t GetSize() const { return sizeof(T*); } \
}; \
template<> \
struct DeduceType<const T*> { \
static std::shared_ptr<IType> Get() { \
return std::shared_ptr<IType>(new T ## Type()); \
} \
};
DECTYPE(UnitDef, unitDefHandler->GetUnitDefByID)
DECTYPE(FeatureDef, featureDefHandler->GetFeatureDefByID)
DECTYPE(WeaponDef, weaponDefHandler->GetWeaponDefByID)
}
#endif // USING_CREG
#endif // CR_SET_TYPE_IMPL_H
|