add PIMathVectors JSON serialization

This commit is contained in:
2026-03-05 11:58:34 +03:00
parent 9588b48105
commit 46f86b6591

View File

@@ -38,14 +38,14 @@
template<typename T, typename std::enable_if<std::is_enum<T>::value, int>::type = 0>
inline PIJSON piSerializeJSON(const T & v) {
return PIJSON() = (int)v;
return PIJSON() = (int)v;
}
template<typename T,
typename std::enable_if<!std::is_enum<T>::value, int>::type = 0,
typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
inline PIJSON piSerializeJSON(const T & v) {
return PIJSON() = v;
return PIJSON() = v;
}
template<typename T,
@@ -219,6 +219,22 @@ inline PIJSON piSerializeJSON(const PIMap<K, T> & v) {
return ret;
}
template<typename T>
inline PIJSON piSerializeJSON(const PIMathVector<T> & v) {
PIJSON ret;
for (uint i = 0; i < v.size(); ++i)
ret << piSerializeJSON(v[i]);
return ret;
}
template<uint Size, typename T>
inline PIJSON piSerializeJSON(const PIMathVectorT<Size, T> & 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<K, T> & v) {
template<typename T, typename std::enable_if<std::is_enum<T>::value, int>::type = 0>
inline void piDeserializeJSON(T & v, const PIJSON & js) {
v = (T)js.toInt();
v = (T)js.toInt();
}
template<typename T,
typename std::enable_if<!std::is_enum<T>::value, int>::type = 0,
typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
inline void piDeserializeJSON(T & v, const PIJSON & js) {
v = js.value().value<T>();
v = js.value().value<T>();
}
template<typename T,
@@ -398,6 +414,24 @@ inline void piDeserializeJSON(PIMap<K, T> & v, const PIJSON & js) {
piDeserializeJSON(v[PIVariant(it.key()).value<K>()], it.value());
}
template<typename T>
inline void piDeserializeJSON(PIMathVector<T> & v, const PIJSON & js) {
v = {};
if (!js.isArray()) return;
v = PIMathVector<T>(js.size());
for (int i = 0; i < js.size(); ++i)
piDeserializeJSON(v[i], js[i]);
}
template<uint Size, typename T>
inline void piDeserializeJSON(PIMathVectorT<Size, T> & v, const PIJSON & js) {
v = PIMathVectorT<Size, T>();
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