4 #include "senseiConfig.h" 13 #include <type_traits> 36 {
return mSize != 0; }
40 void Clear() noexcept;
43 void Resize(
unsigned long nBytes);
46 void Grow(
unsigned long nBytes);
49 unsigned char *GetData() noexcept
52 const unsigned char *GetData()
const noexcept
57 unsigned long Size()
const noexcept
58 {
return mWritePtr - mData; }
62 unsigned long Capacity()
const noexcept
67 void SetReadPos(
unsigned long n) noexcept
68 { mReadPtr = mData + n; }
70 void SetWritePos(
unsigned long n) noexcept
71 { mWritePtr = mData + n; }
77 template <
typename T>
void Pack(T *val);
79 template <
typename T>
void Pack(
const T &val,
typename std::enable_if<!std::is_class<T>::value>::type* = 0);
80 template <
typename T>
void Unpack(T &val,
typename std::enable_if<!std::is_class<T>::value>::type* = 0);
82 template <
typename T>
void Pack(
const T *val,
unsigned long n);
83 template <
typename T>
void Unpack(T *val,
unsigned long n);
86 void Pack(
const std::string &str);
87 void Unpack(std::string &str);
89 template <
typename T,
unsigned long N>
void Pack(
const std::array<T,N> &arr);
90 template <
typename T,
unsigned long N>
void Unpack(std::array<T,N> &arr);
92 template <
typename K,
typename V>
void Pack(
const std::map<K,V> &amap);
93 template <
typename K,
typename V>
void Unpack(std::map<K,V> &amap);
95 template<
typename T>
void Pack(
const std::vector<T> &v,
96 typename std::enable_if<std::is_class<T>::value>::type* = 0);
98 template<
typename T>
void Unpack(std::vector<T> &v,
99 typename std::enable_if<std::is_class<T>::value>::type* = 0);
102 template<
typename T>
void Pack(
const std::vector<T> &v,
103 typename std::enable_if<!std::is_class<T>::value>::type* = 0);
105 template<
typename T>
void Unpack(std::vector<T> &v,
106 typename std::enable_if<!std::is_class<T>::value>::type* = 0);
110 int Broadcast(
int rootRank=0);
115 constexpr
unsigned int GetBlockSize()
120 unsigned char *mData;
121 unsigned char *mReadPtr;
122 unsigned char *mWritePtr;
126 template <
typename T>
127 void BinaryStream::Pack(T *val)
130 SENSEI_ERROR(
"You con't pack a pointer.");
134 template <
typename T>
135 void BinaryStream::Pack(
const T &val,
typename std::enable_if<!std::is_class<T>::value>::type*)
137 this->Grow(
sizeof(T));
138 *((T *)mWritePtr) = val;
139 mWritePtr +=
sizeof(T);
143 template <
typename T>
144 void BinaryStream::Unpack(T &val,
typename std::enable_if<!std::is_class<T>::value>::type*)
146 val = *((T *)mReadPtr);
147 mReadPtr +=
sizeof(T);
151 template <
typename T>
152 void BinaryStream::Pack(
const T *val,
unsigned long n)
154 unsigned long nBytes = n*
sizeof(T);
157 unsigned long nn = n*
sizeof(T);
158 memcpy(mWritePtr, val, nn);
163 template <
typename T>
164 void BinaryStream::Unpack(T *val,
unsigned long n)
166 unsigned long nn = n*
sizeof(T);
167 memcpy(val, mReadPtr, nn);
173 void BinaryStream::Pack(
const std::string &str)
175 unsigned long slen = str.size();
177 this->Pack(str.c_str(), slen);
182 void BinaryStream::Unpack(std::string &str)
184 unsigned long slen = 0;
188 str.assign(reinterpret_cast<char*>(mReadPtr), slen);
194 template <
typename T,
unsigned long N>
195 void BinaryStream::Pack(
const std::array<T,N> &arr)
197 this->Pack(arr.data(), N);
201 template <
typename T,
unsigned long N>
202 void BinaryStream::Unpack(std::array<T,N> &arr)
204 this->Unpack(arr.data(), N);
208 template <
typename K,
typename V>
209 void BinaryStream::Pack(
const std::map<K,V> &amap)
211 unsigned long len = amap.size();
214 typename std::map<K,V>::const_iterator it = amap.begin();
215 for (
unsigned long i = 0; i < len; ++i, ++it)
217 this->Pack(it->first);
218 this->Pack(it->second);
223 template <
typename K,
typename V>
224 void BinaryStream::Unpack(std::map<K,V> &amap)
226 unsigned long len = 0;
229 for (
unsigned long i = 0; i < len; ++i)
237 amap[key] = std::move(val);
243 void BinaryStream::Pack(
const std::vector<T> &v,
typename std::enable_if<std::is_class<T>::value>::type*)
245 unsigned long vlen = v.size();
247 for (
unsigned long i = 0; i < vlen; ++i)
253 void BinaryStream::Unpack(std::vector<T> &v,
typename std::enable_if<std::is_class<T>::value>::type*)
259 for (
unsigned long i = 0; i < vlen; ++i)
265 void BinaryStream::Pack(
const std::vector<T> &v,
typename std::enable_if<!std::is_class<T>::value>::type*)
267 const unsigned long vlen = v.size();
269 this->Pack(v.data(), vlen);
274 void BinaryStream::Unpack(std::vector<T> &v,
typename std::enable_if<!std::is_class<T>::value>::type*)
280 this->Unpack(v.data(), vlen);
Definition: BinaryStream.h:19
SENSEI_EXPORT unsigned int Size(int svtkt)
given a SVTK type enum returns the sizeof that type
SENSEI.
Definition: ADIOS2AnalysisAdaptor.h:27