Changeset View
Changeset View
Standalone View
Standalone View
source/simulation2/serialization/SerializeTemplates.h
Show All 28 Lines | |||||
#include <unordered_map> | #include <unordered_map> | ||||
#include <utility> | #include <utility> | ||||
template<typename ELEM> | template<typename ELEM> | ||||
struct SerializeVector | struct SerializeVector | ||||
{ | { | ||||
template<typename T> | template<typename T> | ||||
void operator()(ISerializer& serialize, const char* name, std::vector<T>& value) | void operator()(ISerializer& serialize, const char* name, const std::vector<T>& value) | ||||
{ | { | ||||
size_t len = value.size(); | size_t len = value.size(); | ||||
serialize.NumberU32_Unbounded("length", (u32)len); | serialize.NumberU32_Unbounded("length", (u32)len); | ||||
for (size_t i = 0; i < len; ++i) | for (size_t i = 0; i < len; ++i) | ||||
ELEM()(serialize, name, value[i]); | ELEM()(serialize, name, value[i]); | ||||
} | } | ||||
template<typename T> | template<typename T> | ||||
Show All 11 Lines | void operator()(IDeserializer& deserialize, const char* name, std::vector<T>& value) | ||||
} | } | ||||
} | } | ||||
}; | }; | ||||
template<typename ELEM> | template<typename ELEM> | ||||
struct SerializeRepetitiveVector | struct SerializeRepetitiveVector | ||||
{ | { | ||||
template<typename T> | template<typename T> | ||||
void operator()(ISerializer& serialize, const char* name, std::vector<T>& value) | void operator()(ISerializer& serialize, const char* name, std::vector<T>& value) | ||||
vladislavbelov: I suppose these changes should be in a separate patch before to reduce the size of the current… | |||||
{ | { | ||||
size_t len = value.size(); | size_t len = value.size(); | ||||
serialize.NumberU32_Unbounded("length", (u32)len); | serialize.NumberU32_Unbounded("length", (u32)len); | ||||
if (len == 0) | if (len == 0) | ||||
return; | return; | ||||
u32 count = 1; | u32 count = 1; | ||||
T prevVal = value[0]; | T prevVal = value[0]; | ||||
for (size_t i = 1; i < len; ++i) | for (size_t i = 1; i < len; ++i) | ||||
▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | void operator()(IDeserializer& deserialize, const char* name, std::set<T>& value) | ||||
} | } | ||||
} | } | ||||
}; | }; | ||||
template<typename KS, typename VS> | template<typename KS, typename VS> | ||||
struct SerializeMap | struct SerializeMap | ||||
{ | { | ||||
template<typename K, typename V> | template<typename K, typename V> | ||||
void operator()(ISerializer& serialize, const char* UNUSED(name), std::map<K, V>& value) | void operator()(ISerializer& serialize, const char* UNUSED(name), const std::map<K, V>& value) | ||||
{ | { | ||||
size_t len = value.size(); | size_t len = value.size(); | ||||
serialize.NumberU32_Unbounded("length", (u32)len); | serialize.NumberU32_Unbounded("length", (u32)len); | ||||
for (typename std::map<K, V>::iterator it = value.begin(); it != value.end(); ++it) | for (typename std::map<K, V>::const_iterator it = value.begin(); it != value.end(); ++it) | ||||
{ | { | ||||
KS()(serialize, "key", it->first); | KS()(serialize, "key", it->first); | ||||
VS()(serialize, "value", it->second); | VS()(serialize, "value", it->second); | ||||
} | } | ||||
} | } | ||||
template<typename K, typename V, typename C> | template<typename K, typename V, typename C> | ||||
void operator()(ISerializer& serialize, const char* UNUSED(name), std::map<K, V>& value, C& context) | void operator()(ISerializer& serialize, const char* UNUSED(name), const std::map<K, V>& value, C& context) | ||||
{ | { | ||||
size_t len = value.size(); | size_t len = value.size(); | ||||
serialize.NumberU32_Unbounded("length", (u32)len); | serialize.NumberU32_Unbounded("length", (u32)len); | ||||
for (typename std::map<K, V>::iterator it = value.begin(); it != value.end(); ++it) | for (typename std::map<K, V>::const_iterator it = value.begin(); it != value.end(); ++it) | ||||
{ | { | ||||
KS()(serialize, "key", it->first); | KS()(serialize, "key", it->first); | ||||
VS()(serialize, "value", it->second, context); | VS()(serialize, "value", it->second, context); | ||||
} | } | ||||
} | } | ||||
template<typename M> | template<typename M> | ||||
void operator()(IDeserializer& deserialize, const char* UNUSED(name), M& value) | void operator()(IDeserializer& deserialize, const char* UNUSED(name), M& value) | ||||
▲ Show 20 Lines • Show All 156 Lines • ▼ Show 20 Lines | struct SerializeWaypoint | ||||
{ | { | ||||
deserialize.NumberFixed_Unbounded("waypoint x", value.x); | deserialize.NumberFixed_Unbounded("waypoint x", value.x); | ||||
deserialize.NumberFixed_Unbounded("waypoint z", value.z); | deserialize.NumberFixed_Unbounded("waypoint z", value.z); | ||||
} | } | ||||
}; | }; | ||||
struct SerializeGoal | struct SerializeGoal | ||||
{ | { | ||||
template<typename S> | template<typename S, typename PathGoal> | ||||
void operator()(S& serialize, const char* UNUSED(name), PathGoal& value) | void operator()(S& serialize, const char* UNUSED(name), PathGoal& value) | ||||
{ | { | ||||
SerializeU8_Enum<PathGoal::Type, PathGoal::INVERTED_SQUARE>()(serialize, "type", value.type); | SerializeU8_Enum<typename PathGoal::Type, PathGoal::INVERTED_SQUARE>()(serialize, "type", value.type); | ||||
serialize.NumberFixed_Unbounded("goal x", value.x); | serialize.NumberFixed_Unbounded("goal x", value.x); | ||||
serialize.NumberFixed_Unbounded("goal z", value.z); | serialize.NumberFixed_Unbounded("goal z", value.z); | ||||
serialize.NumberFixed_Unbounded("goal u x", value.u.X); | serialize.NumberFixed_Unbounded("goal u x", value.u.X); | ||||
serialize.NumberFixed_Unbounded("goal u z", value.u.Y); | serialize.NumberFixed_Unbounded("goal u z", value.u.Y); | ||||
serialize.NumberFixed_Unbounded("goal v x", value.v.X); | serialize.NumberFixed_Unbounded("goal v x", value.v.X); | ||||
serialize.NumberFixed_Unbounded("goal v z", value.v.Y); | serialize.NumberFixed_Unbounded("goal v z", value.v.Y); | ||||
serialize.NumberFixed_Unbounded("goal hw", value.hw); | serialize.NumberFixed_Unbounded("goal hw", value.hw); | ||||
serialize.NumberFixed_Unbounded("goal hh", value.hh); | serialize.NumberFixed_Unbounded("goal hh", value.hh); | ||||
serialize.NumberFixed_Unbounded("maxdist", value.maxdist); | serialize.NumberFixed_Unbounded("maxdist", value.maxdist); | ||||
} | } | ||||
}; | }; | ||||
#endif // INCLUDED_SERIALIZETEMPLATES | #endif // INCLUDED_SERIALIZETEMPLATES |
Wildfire Games · Phabricator
I suppose these changes should be in a separate patch before to reduce the size of the current patch.