ready to integrate
This commit is contained in:
@@ -40,11 +40,23 @@ class PIBinaryStream {
|
||||
public:
|
||||
// one should implements next methods:
|
||||
//
|
||||
// void appendImp(const void * d, size_t s);
|
||||
// void takeImp(void * d, size_t s);
|
||||
// bool binaryStreamAppend(const void * d, size_t s);
|
||||
// bool binaryStreamTake(void * d, size_t s);
|
||||
|
||||
void append(const void * d, size_t s) {static_cast<P*>(this)->appendImp(d, s);}
|
||||
void take(void * d, size_t s) {static_cast<P*>(this)->takeImp(d, s);}
|
||||
bool append(const void * d, size_t s) {
|
||||
if (!static_cast<P*>(this)->binaryStreamAppend(d, s)) {
|
||||
return false;
|
||||
printf("[PIBinaryStream] append() error\n");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool take(void * d, size_t s) {
|
||||
if (!static_cast<P*>(this)->binaryStreamTake(d, s)) {
|
||||
return false;
|
||||
printf("[PIBinaryStream] take() error\n");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
template<typename T>
|
||||
void append(T v) {append(&v, sizeof(v));}
|
||||
uchar takeByte() {uchar r = 0; take(&r, sizeof(r)); return r;}
|
||||
@@ -173,7 +185,10 @@ inline PIBinaryStream<P> & operator <<(PIBinaryStream<P> & s, const PIPair<Type0
|
||||
|
||||
template<typename P, typename T, typename std::enable_if< std::is_trivially_copyable<T>::value, int>::type = 0>
|
||||
inline PIBinaryStreamRef<P> operator >>(PIBinaryStream<P> & s, T & v) {
|
||||
s.take(&v, sizeof(v));
|
||||
if (!s.take(&v, sizeof(v))) {
|
||||
printf("error with %s\n", __PIP_TYPENAME__(T));
|
||||
assert(false);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -187,7 +202,10 @@ inline PIBinaryStream<P> & operator >>(PIBinaryStream<P> & s, PIVector<T> & v) {
|
||||
piCout << ">> vector trivial default";
|
||||
int sz = s.takeInt();
|
||||
v._resizeRaw(sz);
|
||||
s.take(v.data(), sz*sizeof(T));
|
||||
if (!s.take(v.data(), sz * sizeof(T))) {
|
||||
printf("error with PIVector<%s>\n", __PIP_TYPENAME__(T));
|
||||
assert(false);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
template<typename P, typename T,
|
||||
@@ -211,7 +229,10 @@ inline PIBinaryStream<P> & operator >>(PIBinaryStream<P> & s, PIDeque<T> & v) {
|
||||
piCout << ">> deque trivial default";
|
||||
int sz = s.takeInt();
|
||||
v._resizeRaw(sz);
|
||||
s.take(v.data(), sz*sizeof(T));
|
||||
if (!s.take(v.data(), sz * sizeof(T))) {
|
||||
printf("error with PIDeque<%s>\n", __PIP_TYPENAME__(T));
|
||||
assert(false);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
template<typename P, typename T,
|
||||
@@ -237,7 +258,10 @@ inline PIBinaryStream<P> & operator >>(PIBinaryStream<P> & s, PIVector2D<T> & v)
|
||||
r = s.takeInt();
|
||||
c = s.takeInt();
|
||||
v._resizeRaw(r, c);
|
||||
s.take(v.data(), v.size() * sizeof(T));
|
||||
if (!s.take(v.data(), v.size() * sizeof(T))) {
|
||||
printf("error with PIVector2D<%s>\n", __PIP_TYPENAME__(T));
|
||||
assert(false);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
template<typename P, typename T,
|
||||
|
||||
Reference in New Issue
Block a user