1
0
forked from 0ad/0ad

Added unordered map serialization

This was SVN commit r13039.
This commit is contained in:
Jonathan Waller 2013-01-03 22:33:04 +00:00
parent 8ef7e45a0a
commit ba94247744

View File

@ -68,9 +68,11 @@ struct SerializeMap
}
}
template<typename K, typename V>
void operator()(IDeserializer& deserialize, const char* UNUSED(name), std::map<K, V>& value)
template<typename M>
void operator()(IDeserializer& deserialize, const char* UNUSED(name), M& value)
{
typedef typename M::key_type K;
typedef typename M::value_type::second_type V; // M::data_type gives errors with gcc
value.clear();
u32 len;
deserialize.NumberU32_Unbounded("length", len);
@ -85,6 +87,24 @@ struct SerializeMap
}
};
// We have to order the map before serializing to make things consistent
template<typename KS, typename VS>
struct SerializeUnorderedMap
{
template<typename K, typename V>
void operator()(ISerializer& serialize, const char* name, boost::unordered_map<K, V>& value)
{
std::map<K, V> ordered_value(value.begin(), value.end());
SerializeMap<KS, VS>()(serialize, name, ordered_value);
}
template<typename K, typename V>
void operator()(IDeserializer& deserialize, const char* name, boost::unordered_map<K, V>& value)
{
SerializeMap<KS, VS>()(deserialize, name, value);
}
};
template<typename T, T max>
struct SerializeU8_Enum
{