diff --git a/libs/main/serialization/pijsonserialization.h b/libs/main/serialization/pijsonserialization.h index dfd5288e..b60a8f0c 100644 --- a/libs/main/serialization/pijsonserialization.h +++ b/libs/main/serialization/pijsonserialization.h @@ -38,14 +38,14 @@ template::value, int>::type = 0> inline PIJSON piSerializeJSON(const T & v) { - return PIJSON() = (int)v; + return PIJSON() = (int)v; } template::value, int>::type = 0, typename std::enable_if::value, int>::type = 0> inline PIJSON piSerializeJSON(const T & v) { - return PIJSON() = v; + return PIJSON() = v; } template & v) { return ret; } +template +inline PIJSON piSerializeJSON(const PIMathVector & v) { + PIJSON ret; + for (uint i = 0; i < v.size(); ++i) + ret << piSerializeJSON(v[i]); + return ret; +} + +template +inline PIJSON piSerializeJSON(const PIMathVectorT & v) { + PIJSON ret; + for (uint i = 0; i < v.size(); ++i) + ret << piSerializeJSON(v[i]); + return ret; +} + // --- // deserialize, piDeserializeJSON(T, PIJSON) @@ -229,14 +245,14 @@ inline PIJSON piSerializeJSON(const PIMap & v) { template::value, int>::type = 0> inline void piDeserializeJSON(T & v, const PIJSON & js) { - v = (T)js.toInt(); + v = (T)js.toInt(); } template::value, int>::type = 0, typename std::enable_if::value, int>::type = 0> inline void piDeserializeJSON(T & v, const PIJSON & js) { - v = js.value().value(); + v = js.value().value(); } template & v, const PIJSON & js) { piDeserializeJSON(v[PIVariant(it.key()).value()], it.value()); } +template +inline void piDeserializeJSON(PIMathVector & v, const PIJSON & js) { + v = {}; + if (!js.isArray()) return; + v = PIMathVector(js.size()); + for (int i = 0; i < js.size(); ++i) + piDeserializeJSON(v[i], js[i]); +} + +template +inline void piDeserializeJSON(PIMathVectorT & v, const PIJSON & js) { + v = PIMathVectorT(); + if (!js.isArray()) return; + int cnt = piMini(js.size(), Size); + for (int i = 0; i < cnt; ++i) + piDeserializeJSON(v[i], js[i]); +} + // --- // PIJSON static wrapper