47 template<
typename TYPE>
89template<
typename TYPE>
96 TYPE& value = *(
static_cast<TYPE*
>(ptr));
97 reader->Get(value, name);
103 TYPE& value = *(
static_cast<TYPE*
>(ptr));
104 writer->Add(value, name);
110 if (!reg->ValidateTypeSize(component,
sizeof(TYPE)))
112 n_error(
"Trying to add a serializer that works on different sized component compared to what is registered in the MemDb::AttributeRegistry!");
119 while (reg->serializers.Size() <= component.id)
121 reg->serializers.Grow();
122 reg->serializers.Resize(reg->serializers.Capacity());
125 reg->serializers[component.id] = s;
Component serialization functions.
Definition componentserialization.h:32
std::function< void(Ptr< IO::JsonReader > const &, const char *name, void *)> DeserializeJsonFunc
Definition componentserialization.h:34
std::function< void(Ptr< IO::JsonWriter > const &, const char *name, void *)> SerializeJsonFunc
Definition componentserialization.h:35
OverridableType
Definition componentserialization.h:38
@ RESOURCE
Definition componentserialization.h:40
@ NUM_OVERRIDABLE_TYPES
Definition componentserialization.h:41
@ ENTITY
Definition componentserialization.h:39
static void Destroy()
This static method is used to destroy the registry object and should be called right before the main ...
Definition componentserialization.cc:39
static DeserializeJsonFunc & GetTypeDeserializeFunc(OverridableType type)
Get the deserialize override for a specific type.
Definition componentserialization.cc:95
ComponentSerialization()
Definition componentserialization.cc:114
static void Serialize(Ptr< IO::JsonWriter > const &writer, ComponentId component, void *ptr)
ptr points to the value that should be stored
Definition componentserialization.cc:63
static void OverrideType(OverridableType type, DeserializeJsonFunc deserialize, SerializeJsonFunc serialize)
override a specific type serializer. This will be called instead of a standard variant.
Definition componentserialization.cc:84
Serializer typeOverrides[NUM_OVERRIDABLE_TYPES]
Definition componentserialization.h:83
static SerializeJsonFunc & GetTypeSerializeFunc(OverridableType type)
Get the serialize override for a specific type.
Definition componentserialization.cc:105
static void Deserialize(Ptr< IO::JsonReader > const &reader, ComponentId component, void *ptr)
ptr points to the location where the value should be stored. Make sure you have room for it!
Definition componentserialization.cc:52
~ComponentSerialization()
Definition componentserialization.cc:122
static void Override(ComponentId component, DeserializeJsonFunc deserialize, SerializeJsonFunc serialize)
override a specific components serialization and deserialization funcs
Definition componentserialization.cc:74
Util::Array< Serializer > serializers
Definition componentserialization.h:81
static void Register(ComponentId component)
Definition componentserialization.h:91
static ComponentSerialization * Instance()
The registry's constructor is called by the Instance() method, and nobody else.
Definition componentserialization.cc:22
static ComponentSerialization * Singleton
Definition componentserialization.h:70
bool ValidateTypeSize(ComponentId component, uint32_t size)
validate that the size of MemDb::AttributeRegistry's component named 'name' has typesize of 'size'
Definition componentserialization.cc:131
Nebula's smart pointer class which manages the life time of RefCounted objects.
Definition ptr.h:38
Nebula's dynamic array class.
Definition array.h:60
void __cdecl n_error(const char *msg,...)
This function is called when a serious situation is encountered which requires abortion of the applic...
Definition debug.cc:138
Game::EditorState.
Definition graphicsmanager.h:64
MemDb::AttributeId ComponentId
Definition componentid.h:15
Definition componentserialization.h:76
DeserializeJsonFunc deserializeJson
Definition componentserialization.h:77
SerializeJsonFunc serializeJson
Definition componentserialization.h:78