add PIMathVectors JSON serialization
This commit is contained in:
@@ -38,14 +38,14 @@
|
|||||||
|
|
||||||
template<typename T, typename std::enable_if<std::is_enum<T>::value, int>::type = 0>
|
template<typename T, typename std::enable_if<std::is_enum<T>::value, int>::type = 0>
|
||||||
inline PIJSON piSerializeJSON(const T & v) {
|
inline PIJSON piSerializeJSON(const T & v) {
|
||||||
return PIJSON() = (int)v;
|
return PIJSON() = (int)v;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T,
|
template<typename T,
|
||||||
typename std::enable_if<!std::is_enum<T>::value, int>::type = 0,
|
typename std::enable_if<!std::is_enum<T>::value, int>::type = 0,
|
||||||
typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
|
typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
|
||||||
inline PIJSON piSerializeJSON(const T & v) {
|
inline PIJSON piSerializeJSON(const T & v) {
|
||||||
return PIJSON() = v;
|
return PIJSON() = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T,
|
template<typename T,
|
||||||
@@ -219,6 +219,22 @@ inline PIJSON piSerializeJSON(const PIMap<K, T> & v) {
|
|||||||
return ret;
|
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)
|
// 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>
|
template<typename T, typename std::enable_if<std::is_enum<T>::value, int>::type = 0>
|
||||||
inline void piDeserializeJSON(T & v, const PIJSON & js) {
|
inline void piDeserializeJSON(T & v, const PIJSON & js) {
|
||||||
v = (T)js.toInt();
|
v = (T)js.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T,
|
template<typename T,
|
||||||
typename std::enable_if<!std::is_enum<T>::value, int>::type = 0,
|
typename std::enable_if<!std::is_enum<T>::value, int>::type = 0,
|
||||||
typename std::enable_if<std::is_arithmetic<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) {
|
inline void piDeserializeJSON(T & v, const PIJSON & js) {
|
||||||
v = js.value().value<T>();
|
v = js.value().value<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename 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());
|
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
|
// PIJSON static wrapper
|
||||||
|
|||||||
Reference in New Issue
Block a user