|
|
|
|
@@ -297,7 +297,10 @@ inline PIByteArray & operator >>(PIByteArray & s, uchar & v) {assert(s.size() >=
|
|
|
|
|
//! \relatesalso PIByteArray \brief Restore operator for any trivial copyable type
|
|
|
|
|
template<typename T, typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray::StreamRef operator >>(PIByteArray & s, T & v) {
|
|
|
|
|
if (s.size() < sizeof(v)) {
|
|
|
|
|
printf("error with %s\n", typeid(T).name());
|
|
|
|
|
assert(s.size() >= sizeof(v));
|
|
|
|
|
}
|
|
|
|
|
memcpy((void*)(&v), s.data(), sizeof(v));
|
|
|
|
|
s.remove(0, sizeof(v));
|
|
|
|
|
return s;
|
|
|
|
|
@@ -308,7 +311,10 @@ PIP_EXPORT PIByteArray & operator >>(PIByteArray & s, PIByteArray & v);
|
|
|
|
|
|
|
|
|
|
//! \relatesalso PIByteArray \brief Restore operator, see \ref PIByteArray_sec1 for details
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIByteArray::RawData v) {
|
|
|
|
|
if (s.size_s() < v.s) {
|
|
|
|
|
printf("error with RawData %d < %d\n", s.size_s(), v.s);
|
|
|
|
|
assert(s.size_s() >= v.s);
|
|
|
|
|
}
|
|
|
|
|
if (v.s > 0) {
|
|
|
|
|
memcpy((void*)(v.d), s.data(), v.s);
|
|
|
|
|
s.remove(0, v.s);
|
|
|
|
|
@@ -321,7 +327,10 @@ template<typename T,
|
|
|
|
|
typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
|
|
|
|
|
typename std::enable_if< std::is_same<decltype(std::declval<PIByteArray&>() << std::declval<const T &>()), PIByteArray::StreamRef>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIVector<T> & v) {
|
|
|
|
|
if (s.size_s() < 4) {
|
|
|
|
|
printf("error with PIVector<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 4);
|
|
|
|
|
}
|
|
|
|
|
int sz; s >> sz;
|
|
|
|
|
v._resizeRaw(sz);
|
|
|
|
|
if (sz > 0) {
|
|
|
|
|
@@ -334,7 +343,10 @@ template<typename T,
|
|
|
|
|
typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
|
|
|
|
|
typename std::enable_if<!std::is_same<decltype(std::declval<PIByteArray&>() << std::declval<const T &>()), PIByteArray::StreamRef>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIVector<T> & v) {
|
|
|
|
|
if (s.size_s() < 4) {
|
|
|
|
|
printf("error with PIVector<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 4);
|
|
|
|
|
}
|
|
|
|
|
int sz; s >> sz;
|
|
|
|
|
v.resize(sz);
|
|
|
|
|
for (int i = 0; i < sz; ++i) s >> v[i];
|
|
|
|
|
@@ -346,7 +358,10 @@ template<typename T,
|
|
|
|
|
typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
|
|
|
|
|
typename std::enable_if< std::is_same<decltype(std::declval<PIByteArray&>() << std::declval<const T &>()), PIByteArray::StreamRef>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIDeque<T> & v) {
|
|
|
|
|
if (s.size_s() < 4) {
|
|
|
|
|
printf("error with PIDeque<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 4);
|
|
|
|
|
}
|
|
|
|
|
int sz; s >> sz;
|
|
|
|
|
v._resizeRaw(sz);
|
|
|
|
|
if (sz > 0) {
|
|
|
|
|
@@ -359,7 +374,10 @@ template<typename T,
|
|
|
|
|
typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
|
|
|
|
|
typename std::enable_if<!std::is_same<decltype(std::declval<PIByteArray&>() << std::declval<const T &>()), PIByteArray::StreamRef>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIDeque<T> & v) {
|
|
|
|
|
if (s.size_s() < 4) {
|
|
|
|
|
printf("error with PIDeque<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 4);
|
|
|
|
|
}
|
|
|
|
|
int sz; s >> sz;
|
|
|
|
|
v.resize(sz);
|
|
|
|
|
for (int i = 0; i < sz; ++i) s >> v[i];
|
|
|
|
|
@@ -371,7 +389,10 @@ template<typename T,
|
|
|
|
|
typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
|
|
|
|
|
typename std::enable_if< std::is_same<decltype(std::declval<PIByteArray&>() << std::declval<const T &>()), PIByteArray::StreamRef>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIVector2D<T> & v) {
|
|
|
|
|
if (s.size_s() < 8) {
|
|
|
|
|
printf("error with PIVecto2Dr<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 8);
|
|
|
|
|
}
|
|
|
|
|
int r, c; s >> r >> c;
|
|
|
|
|
v._resizeRaw(r, c);
|
|
|
|
|
int sz = r*c;
|
|
|
|
|
@@ -385,7 +406,10 @@ template<typename T,
|
|
|
|
|
typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0,
|
|
|
|
|
typename std::enable_if<!std::is_same<decltype(std::declval<PIByteArray&>() << std::declval<const T &>()), PIByteArray::StreamRef>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIVector2D<T> & v) {
|
|
|
|
|
if (s.size_s() < 8) {
|
|
|
|
|
printf("error with PIVecto2Dr<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 8);
|
|
|
|
|
}
|
|
|
|
|
int r,c;
|
|
|
|
|
PIVector<T> tmp;
|
|
|
|
|
s >> r >> c >> tmp;
|
|
|
|
|
@@ -438,7 +462,10 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIVector2D<T> & v) {
|
|
|
|
|
//! \relatesalso PIByteArray \brief Restore operator for PIVector of any compound type
|
|
|
|
|
template<typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIVector<T> & v) {
|
|
|
|
|
if (s.size_s() < 4) {
|
|
|
|
|
printf("error with PIVector<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 4);
|
|
|
|
|
}
|
|
|
|
|
int sz; s >> sz;
|
|
|
|
|
v.resize(sz);
|
|
|
|
|
for (int i = 0; i < sz; ++i) s >> v[i];
|
|
|
|
|
@@ -448,7 +475,10 @@ inline PIByteArray & operator >>(PIByteArray & s, PIVector<T> & v) {
|
|
|
|
|
//! \relatesalso PIByteArray \brief Restore operator for PIDeque of any compound type
|
|
|
|
|
template<typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIDeque<T> & v) {
|
|
|
|
|
if (s.size_s() < 4) {
|
|
|
|
|
printf("error with PIDeque<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 4);
|
|
|
|
|
}
|
|
|
|
|
int sz; s >> sz;
|
|
|
|
|
v.resize(sz);
|
|
|
|
|
for (int i = 0; i < sz; ++i) s >> v[i];
|
|
|
|
|
@@ -458,7 +488,10 @@ inline PIByteArray & operator >>(PIByteArray & s, PIDeque<T> & v) {
|
|
|
|
|
//! \relatesalso PIByteArray \brief Restore operator for PIVector2D of any compound type
|
|
|
|
|
template<typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIVector2D<T> & v) {
|
|
|
|
|
if (s.size_s() < 8) {
|
|
|
|
|
printf("error with PIVecto2Dr<%s>\n", typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 8);
|
|
|
|
|
}
|
|
|
|
|
int r,c;
|
|
|
|
|
PIVector<T> tmp;
|
|
|
|
|
s >> r >> c >> tmp;
|
|
|
|
|
@@ -484,7 +517,10 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIMap<Key, T> & v) {
|
|
|
|
|
|
|
|
|
|
template <typename Key, typename T>
|
|
|
|
|
inline PIByteArray & operator >>(PIByteArray & s, PIMap<Key, T> & v) {
|
|
|
|
|
if (s.size_s() < 4) {
|
|
|
|
|
printf("error with PIMap<%s, %s>\n", typeid(Key).name(), typeid(T).name());
|
|
|
|
|
assert(s.size_s() >= 4);
|
|
|
|
|
}
|
|
|
|
|
int sz; s >> sz; v.pim_index.resize(sz);
|
|
|
|
|
int ind = 0;
|
|
|
|
|
for (int i = 0; i < sz; ++i) {
|
|
|
|
|
|