47 #include <sys/types.h> 58 #include <unordered_map> 59 #include <unordered_set> 89 static int BZWrite(BZFILE *bzf,
char c);
95 static int BZWrite(BZFILE *bzf, uint8_t c);
102 static int BZWrite(BZFILE *bzf, int16_t val);
109 static int BZWrite(BZFILE *bzf, uint16_t val);
116 static int BZWrite(BZFILE *bzf, int32_t val);
123 static int BZWrite(BZFILE *bzf, uint32_t val);
130 static int BZWrite(BZFILE *bzf,
const int64_t & val);
137 static int BZWrite(BZFILE *bzf,
const uint64_t & val);
144 static int BZWrite(BZFILE *bzf,
float val);
151 static int BZWrite(BZFILE *bzf,
const double & val);
160 static int BZWrite(BZFILE *bzf,
const std::string & s);
166 static int BZRead(BZFILE *bzf,
char & c);
172 static int BZRead(BZFILE *bzf, uint8_t & c);
178 static int BZRead(BZFILE *bzf, int16_t & val);
184 static int BZRead(BZFILE *bzf, uint16_t & val);
190 static int BZRead(BZFILE *bzf, int32_t & val);
196 static int BZRead(BZFILE *bzf, uint32_t & val);
202 static int BZRead(BZFILE *bzf, int64_t & val);
208 static int BZRead(BZFILE *bzf, uint64_t & val);
215 static int BZRead(BZFILE *bzf,
float & val);
222 static int BZRead(BZFILE *bzf,
double & val);
230 static int BZRead(BZFILE *bzf, std::string & s);
252 template <
typename _firstT,
typename _secondT>
253 static int BZRead(BZFILE *bzf, std::pair<_firstT, _secondT> & p)
257 int bytesRead =
BZRead(bzf, p.first);
260 bytesRead =
BZRead(bzf, p.second);
274 template <
typename _firstT,
typename _secondT>
275 static int BZWrite(BZFILE *bzf,
const std::pair<_firstT,_secondT> & p)
279 int bytesWritten =
BZWrite(bzf, p.first);
280 if (bytesWritten > 0) {
282 bytesWritten =
BZWrite(bzf, p.second);
283 if (bytesWritten > 0) {
298 template <
typename _keyT,
typename _valueT,
299 typename _Compare,
typename _Alloc>
300 static int BZRead(BZFILE *bzf, std::map<_keyT, _valueT, _Compare, _Alloc> & m)
302 return(PairAssocContBZRead<std::map<_keyT, _valueT, _Compare, _Alloc> >(bzf, m));
309 template<
typename _keyT,
typename _valueT,
310 typename _Compare,
typename _Alloc>
312 BZWrite(BZFILE *bzf,
const std::map<_keyT,_valueT,_Compare,_Alloc> & m)
314 return(ContainerBZWrite<std::map<_keyT,_valueT,_Compare,_Alloc> >(bzf, m));
321 template <
typename _keyT,
typename _valueT,
322 typename _Compare,
typename _Alloc>
324 BZRead(BZFILE *bzf, std::multimap<_keyT, _valueT, _Compare, _Alloc> & m)
326 return(PairAssocContBZRead<std::multimap<_keyT,_valueT,_Compare,_Alloc> >(bzf, m));
333 template <
typename _keyT,
typename _valueT,
334 typename _Compare,
typename _Alloc>
336 BZWrite(BZFILE *bzf,
const std::multimap<_keyT,_valueT, _Compare, _Alloc> & m)
338 return(ContainerBZWrite<std::multimap<_keyT,_valueT,_Compare,_Alloc> >(bzf, m));
345 template <
typename _valueT,
typename _Alloc>
346 static int BZRead(BZFILE *bzf, std::vector<_valueT, _Alloc> & v)
348 return(ContainerBZRead<std::vector<_valueT, _Alloc> >(bzf, v));
355 template <
typename _valueT,
typename _Alloc>
356 static int BZWrite(BZFILE *bzf,
const std::vector<_valueT, _Alloc> & v)
358 return(ContainerBZWrite<std::vector<_valueT, _Alloc> >(bzf, v));
365 template <
typename _valueT,
typename _Alloc>
366 static int BZRead(BZFILE *bzf, std::deque<_valueT, _Alloc> & d)
368 return(ContainerBZRead<std::deque<_valueT, _Alloc> >(bzf, d));
375 template <
typename _valueT,
typename _Alloc>
376 static int BZWrite(BZFILE *bzf,
const std::deque<_valueT, _Alloc> & d)
378 return(ContainerBZWrite<std::deque<_valueT, _Alloc> >(bzf, d));
385 template <
typename _valueT,
typename _Alloc>
386 static int BZRead(BZFILE *bzf, std::list<_valueT, _Alloc> & l)
388 return(ContainerBZRead<std::list<_valueT, _Alloc> >(bzf, l));
395 template <
typename _valueT,
typename _Alloc>
396 static int BZWrite(BZFILE *bzf,
const std::list<_valueT, _Alloc> & l)
398 return(ContainerBZWrite<std::list<_valueT, _Alloc> >(bzf, l));
405 template <
typename _valueT,
typename _Compare,
typename _Alloc>
406 static int BZRead(BZFILE *bzf, std::set<_valueT, _Compare, _Alloc> & l)
408 return(ContainerBZRead<std::set<_valueT, _Compare, _Alloc> >(bzf, l));
415 template <
typename _valueT,
typename _Compare,
typename _Alloc>
416 static int BZWrite(BZFILE *bzf,
const std::set<_valueT, _Compare, _Alloc> & l)
418 return(ContainerBZWrite<std::set<_valueT, _Compare, _Alloc> >(bzf, l));
425 template <
typename _valueT,
typename _Compare,
typename _Alloc>
426 static int BZRead(BZFILE *bzf, std::multiset<_valueT, _Compare, _Alloc> & l)
428 return(ContainerBZRead<std::multiset<_valueT, _Compare, _Alloc> >(bzf, l));
435 template <
typename _valueT,
typename _Compare,
typename _Alloc>
437 BZWrite(BZFILE *bzf,
const std::multiset<_valueT, _Compare, _Alloc> & l)
439 return(ContainerBZWrite<std::multiset<_valueT, _Compare, _Alloc> >(bzf, l));
449 template <
typename T,
typename... Args>
450 static int BZWrite(BZFILE *bzf,
const std::tuple<T, Args...> & t)
458 template <
typename T,
typename... Args>
459 static int BZRead(BZFILE *bzf, std::tuple<T, Args...> & t)
461 return(
BZReadTuple<std::tuple<T, Args...> >(bzf, t));
467 template <
typename T>
470 return(TupleBZ2IOHelper<T,std::tuple_size<T>::value-1>::Write(bzf, t));
476 template <
typename T>
479 return(TupleBZ2IOHelper<T,std::tuple_size<T>::value-1>::Read(bzf, t));
486 template<
typename _keyT,
typename _valueT,
typename _Hash,
487 typename _Pred,
typename _Alloc>
490 std::unordered_map<_keyT,_valueT,_Hash,_Pred,_Alloc> & hm)
492 return(PairAssocContBZRead<std::unordered_map<_keyT,_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
499 template<
typename _keyT,
typename _valueT,
typename _Hash,
500 typename _Pred,
typename _Alloc>
503 const std::unordered_map<_keyT,_valueT,_Hash,_Pred,_Alloc> & hm)
505 return(ContainerBZWrite<std::unordered_map<_keyT,_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
512 template<
typename _valueT,
typename _Hash,
513 typename _Pred,
typename _Alloc>
516 std::unordered_set<_valueT,_Hash,_Pred,_Alloc> & hm)
518 return(ContainerBZRead<std::unordered_set<_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
525 template<
typename _valueT,
typename _Hash,
526 typename _Pred,
typename _Alloc>
529 const std::unordered_set<_valueT,_Hash,_Pred,_Alloc> & hm)
531 return(ContainerBZWrite<std::unordered_set<_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
538 template<
typename _keyT,
typename _valueT,
typename _Hash,
539 typename _Pred,
typename _Alloc>
542 std::unordered_multimap<_keyT,_valueT,_Hash,_Pred,_Alloc> & hm)
544 return(PairAssocContBZRead<std::unordered_multimap<_keyT,_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
551 template<
typename _keyT,
typename _valueT,
typename _Hash,
552 typename _Pred,
typename _Alloc>
555 const std::unordered_multimap<_keyT,_valueT,_Hash,_Pred,_Alloc> & hm)
557 return(ContainerBZWrite<std::unordered_multimap<_keyT,_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
564 template<
typename _valueT,
typename _Hash,
565 typename _Pred,
typename _Alloc>
568 std::unordered_multiset<_valueT,_Hash,_Pred,_Alloc> & hm)
570 return(ContainerBZRead<std::unordered_multiset<_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
577 template<
typename _valueT,
typename _Hash,
578 typename _Pred,
typename _Alloc>
581 const std::unordered_multiset<_valueT,_Hash,_Pred,_Alloc> & hm)
583 return(ContainerBZWrite<std::unordered_multiset<_valueT,_Hash,_Pred,_Alloc> >(bzf, hm));
590 template <
typename _inputIteratorT>
591 static int BZWrite(BZFILE *bzf, _inputIteratorT f, _inputIteratorT l)
595 for ( ; f != l; ++f) {
596 int bytesWritten =
BZWrite(bzf, *f);
597 if (bytesWritten > 0) {
614 template <
typename _containerT>
615 static int ContainerBZRead(BZFILE *bzf, _containerT & c)
622 int bytesRead =
BZRead(bzf, numEntries);
623 if (bytesRead ==
sizeof(numEntries)) {
625 for (uint32_t i = 0; i < numEntries; ++i) {
626 typename _containerT::value_type val;
627 bytesRead =
BZRead(bzf, val);
630 c.insert(c.end(), val);
647 template <
typename _containerT>
648 static int ContainerBZWrite(BZFILE *bzf,
const _containerT & c)
652 uint32_t numEntries = c.size();
653 uint32_t bytesWritten =
BZWrite(bzf, numEntries);
654 if (bytesWritten ==
sizeof(numEntries)) {
658 BZWrite<typename _containerT::const_iterator>(bzf,
661 if (bytesWritten > 0)
676 template <
typename _containerT>
677 static int PairAssocContBZRead(BZFILE *bzf, _containerT & m)
684 int bytesRead =
BZRead(bzf, numEntries);
685 if (bytesRead ==
sizeof(numEntries)) {
687 for (uint32_t i = 0; i < numEntries; ++i) {
688 typename _containerT::key_type key;
689 bytesRead =
BZRead(bzf, key);
692 typename _containerT::mapped_type val;
693 bytesRead =
BZRead(bzf, val);
696 m.insert(
typename _containerT::value_type(key, val));
717 template <
typename T,
size_t elt>
718 class TupleBZ2IOHelper;
723 template <
typename T>
724 class TupleBZ2IOHelper<T, 0>
730 static int Write(BZFILE *bzf,
const T & t)
738 static int Read(BZFILE *bzf, T & t)
747 template <
typename T,
size_t elt>
748 class TupleBZ2IOHelper
754 static int Write(BZFILE *bzf,
const T & t)
756 int rc = TupleBZ2IOHelper<T,elt-1>::Write(bzf, t);
772 static int Read(BZFILE *bzf, T & t)
774 int rc = TupleBZ2IOHelper<T,elt-1>::Read(bzf, t);
793 #endif // _DWMBZ2IO_HH_ static int BZWrite(BZFILE *bzf, const std::pair< _firstT, _secondT > &p)
Writes a pair<_firstT,_secondT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:275
static int BZRead(BZFILE *bzf, std::list< _valueT, _Alloc > &l)
Reads a list<_valueT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:386
static int BZWrite(BZFILE *bzf, const std::unordered_set< _valueT, _Hash, _Pred, _Alloc > &hm)
Writes an unordered_set to a BZFILE pointer.
Definition: DwmBZ2IO.hh:528
virtual int BZWrite(BZFILE *bzf) const =0
Write to a BZFILE pointer.
static int BZRead(BZFILE *bzf, std::deque< _valueT, _Alloc > &d)
Reads a deque<_valueT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:366
static int BZRead(BZFILE *bzf, std::map< _keyT, _valueT, _Compare, _Alloc > &m)
Reads a map<_keyT,_valueT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:300
static int BZRead(BZFILE *bzf, std::pair< _firstT, _secondT > &p)
Reads a pair<_firstT,_secondT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:253
Dwm::BZ2Readable pure virtual class definition.
static int BZRead(BZFILE *bzf, std::unordered_set< _valueT, _Hash, _Pred, _Alloc > &hm)
Reads an unordered_set from a BZFILE pointer.
Definition: DwmBZ2IO.hh:515
static int BZWrite(BZFILE *bzf, const std::unordered_multimap< _keyT, _valueT, _Hash, _Pred, _Alloc > &hm)
Writes an unordered_multimap to a BZFILE pointer.
Definition: DwmBZ2IO.hh:554
static int BZWrite(BZFILE *bzf, const std::map< _keyT, _valueT, _Compare, _Alloc > &m)
Writes a map<_keyT,_valueT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:312
static int BZReadTuple(BZFILE *bzf, T &t)
T must be a tuple, n is the number of elements.
Definition: DwmBZ2IO.hh:477
static int BZWrite(BZFILE *bzf, const std::deque< _valueT, _Alloc > &d)
Writes a deque<_valueT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:376
static int BZWrite(BZFILE *bzf, const std::unordered_multiset< _valueT, _Hash, _Pred, _Alloc > &hm)
Writes an unordered_multiset to a BZFILE pointer.
Definition: DwmBZ2IO.hh:580
This class is a pure virtual class, defining an interface for classes that can read their contents fr...
Definition: DwmBZ2Readable.hh:57
static int BZWrite(BZFILE *bzf, const BZ2Writable &val)
Wrapper function to write a BZ2Writable object to a BZFILE pointer.
Definition: DwmBZ2IO.hh:235
This class contains a collection of static functions for reading and writing simple types in network ...
Definition: DwmBZ2IO.hh:82
static int BZRead(BZFILE *bzf, std::unordered_multiset< _valueT, _Hash, _Pred, _Alloc > &hm)
Reads an unordered_multiset from a BZFILE pointer.
Definition: DwmBZ2IO.hh:567
static int BZRead(BZFILE *bzf, std::set< _valueT, _Compare, _Alloc > &l)
Reads a set<_valueT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:406
static int BZRead(BZFILE *bzf, std::vector< _valueT, _Alloc > &v)
Reads a vector<_valueT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:346
Dwm::BZ2Writable pure virtual class definition.
static int BZWrite(BZFILE *bzf, const std::unordered_map< _keyT, _valueT, _Hash, _Pred, _Alloc > &hm)
Writes an unordered_map to a BZFILE pointer.
Definition: DwmBZ2IO.hh:502
static int BZRead(BZFILE *bzf, std::unordered_multimap< _keyT, _valueT, _Hash, _Pred, _Alloc > &hm)
Reads an unordered_multimap from a BZFILE pointer.
Definition: DwmBZ2IO.hh:541
Definition: DwmBZ2IO.hh:67
static int BZWriteTuple(BZFILE *bzf, const T &t)
T must be a tuple, n is the number of elements.
Definition: DwmBZ2IO.hh:468
static int BZWrite(BZFILE *bzf, const std::multiset< _valueT, _Compare, _Alloc > &l)
Writes a multiset<_valueT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:437
static int BZRead(BZFILE *bzf, char &c)
Reads from bzf.
static int BZRead(BZFILE *bzf, BZ2Readable &val)
Wrapper function to read a BZ2Readable object from a BZFILE pointer.
Definition: DwmBZ2IO.hh:243
static int BZRead(BZFILE *bzf, std::unordered_map< _keyT, _valueT, _Hash, _Pred, _Alloc > &hm)
Reads an unordered_map from a BZFILE pointer.
Definition: DwmBZ2IO.hh:489
static int BZWrite(BZFILE *bzf, const std::vector< _valueT, _Alloc > &v)
Writes a vector<_valueT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:356
static int BZWrite(BZFILE *bzf, char c)
Writes c to bzf.
This class is a pure virtual class, defining an interface for classes that can write their contents t...
Definition: DwmBZ2Writable.hh:57
static int BZRead(BZFILE *bzf, std::multiset< _valueT, _Compare, _Alloc > &l)
Reads a multiset<_valueT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:426
static int BZWrite(BZFILE *bzf, const std::multimap< _keyT, _valueT, _Compare, _Alloc > &m)
Writes a multimap<_keyT,_valueT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:336
virtual int BZRead(BZFILE *bzf)=0
Read from a BZFILE pointer.
static int BZWrite(BZFILE *bzf, const std::set< _valueT, _Compare, _Alloc > &l)
Writes a set<_valueT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:416
static int BZRead(BZFILE *bzf, std::multimap< _keyT, _valueT, _Compare, _Alloc > &m)
Reads a multimap<_keyT,_valueT> from a BZFILE pointer.
Definition: DwmBZ2IO.hh:324
static int BZWrite(BZFILE *bzf, const std::list< _valueT, _Alloc > &l)
Writes a list<_valueT> to a BZFILE pointer.
Definition: DwmBZ2IO.hh:396
A configure target for dealing with OS differences.