more safety
This commit is contained in:
@@ -109,7 +109,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! \~english Returns whether there has been an incomplete read since last \a resetReadError() or after the stream was created
|
//! \~english Returns whether there has been an incomplete read since last \a resetReadError() or after the stream was created
|
||||||
//! \~russian Возвращает было ли неполное чтение с момента последнего вызова \a resetReadError()
|
//! \~russian Возвращает было ли неполное чтение с момента последнего вызова \a resetReadError() или создания потока
|
||||||
bool wasReadError() const { return _was_read_error_; }
|
bool wasReadError() const { return _was_read_error_; }
|
||||||
|
|
||||||
//! \~english Reset incomplete read flag
|
//! \~english Reset incomplete read flag
|
||||||
@@ -467,6 +467,11 @@ inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIVector2D<T> & v)
|
|||||||
r = s.binaryStreamTakeInt();
|
r = s.binaryStreamTakeInt();
|
||||||
c = s.binaryStreamTakeInt();
|
c = s.binaryStreamTakeInt();
|
||||||
s >> tmp;
|
s >> tmp;
|
||||||
|
if (s.wasReadError()) {
|
||||||
|
printf("error with PIVector2D<%s>\n", __PIP_TYPENAME__(T));
|
||||||
|
v.clear();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
v = PIVector2D<T>(r, c, tmp);
|
v = PIVector2D<T>(r, c, tmp);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@@ -536,7 +541,13 @@ inline PIBinaryStream<P> & operator<<(PIBinaryStream<P> & s, const PIVector2D<T>
|
|||||||
//! \~russian Оператор извлечения для PIVector сложных типов
|
//! \~russian Оператор извлечения для PIVector сложных типов
|
||||||
template<typename P, typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
|
template<typename P, typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
|
||||||
inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIVector<T> & v) {
|
inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIVector<T> & v) {
|
||||||
v.resize(s.binaryStreamTakeInt());
|
int sz = s.binaryStreamTakeInt();
|
||||||
|
if (s.wasReadError()) {
|
||||||
|
printf("error with PIVector<%s>\n", __PIP_TYPENAME__(T));
|
||||||
|
v.clear();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
v.resize(sz);
|
||||||
for (size_t i = 0; i < v.size(); ++i) {
|
for (size_t i = 0; i < v.size(); ++i) {
|
||||||
s >> v[i];
|
s >> v[i];
|
||||||
if (s.wasReadError()) {
|
if (s.wasReadError()) {
|
||||||
@@ -553,7 +564,13 @@ inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIVector<T> & v) {
|
|||||||
//! \~russian Оператор извлечения для PIDeque сложных типов
|
//! \~russian Оператор извлечения для PIDeque сложных типов
|
||||||
template<typename P, typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
|
template<typename P, typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
|
||||||
inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIDeque<T> & v) {
|
inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIDeque<T> & v) {
|
||||||
v.resize(s.binaryStreamTakeInt());
|
int sz = s.binaryStreamTakeInt();
|
||||||
|
if (s.wasReadError()) {
|
||||||
|
printf("error with PIDeque<%s>\n", __PIP_TYPENAME__(T));
|
||||||
|
v.clear();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
v.resize(sz);
|
||||||
for (size_t i = 0; i < v.size(); ++i) {
|
for (size_t i = 0; i < v.size(); ++i) {
|
||||||
s >> v[i];
|
s >> v[i];
|
||||||
if (s.wasReadError()) {
|
if (s.wasReadError()) {
|
||||||
@@ -575,6 +592,11 @@ inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIVector2D<T> & v)
|
|||||||
r = s.binaryStreamTakeInt();
|
r = s.binaryStreamTakeInt();
|
||||||
c = s.binaryStreamTakeInt();
|
c = s.binaryStreamTakeInt();
|
||||||
s >> tmp;
|
s >> tmp;
|
||||||
|
if (s.wasReadError()) {
|
||||||
|
printf("error with PIVector2D<%s>\n", __PIP_TYPENAME__(T));
|
||||||
|
v.clear();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
v = PIVector2D<T>(r, c, tmp);
|
v = PIVector2D<T>(r, c, tmp);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@@ -602,6 +624,11 @@ inline PIBinaryStream<P> & operator<<(PIBinaryStream<P> & s, const PIMap<Key, T>
|
|||||||
template<typename P, typename Key, typename T>
|
template<typename P, typename Key, typename T>
|
||||||
inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIMap<Key, T> & v) {
|
inline PIBinaryStream<P> & operator>>(PIBinaryStream<P> & s, PIMap<Key, T> & v) {
|
||||||
int sz = s.binaryStreamTakeInt();
|
int sz = s.binaryStreamTakeInt();
|
||||||
|
if (s.wasReadError()) {
|
||||||
|
printf("error with PIMap<%s, %s>\n", __PIP_TYPENAME__(Key), __PIP_TYPENAME__(T));
|
||||||
|
v.clear();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
v.pim_index.resize(sz);
|
v.pim_index.resize(sz);
|
||||||
int ind = 0;
|
int ind = 0;
|
||||||
for (int i = 0; i < sz; ++i) {
|
for (int i = 0; i < sz; ++i) {
|
||||||
|
|||||||
Reference in New Issue
Block a user