vsl_set_io.hxx
Go to the documentation of this file.
1 // This is core/vsl/vsl_set_io.hxx
2 #ifndef vsl_set_io_hxx_
3 #define vsl_set_io_hxx_
4 //:
5 // \file
6 // \brief binary IO functions for std::set<T>
7 // \author K.Y.McGaul
8 
9 #include <iostream>
10 #include "vsl_set_io.h"
11 #include <vsl/vsl_binary_io.h>
12 
13 //====================================================================================
14 //: Write set to binary stream
15 template <class T>
16 void vsl_b_write(vsl_b_ostream& s, const std::set<T>& v)
17 {
18  constexpr short version_no = 1;
20  vsl_b_write(s, v.size());
21  for (typename std::set<T>::const_iterator iter = v.begin(); iter != v.end(); iter++)
22  vsl_b_write(s,*iter);
23 }
24 
25 //====================================================================================
26 //: Read set from binary stream
27 template <class T>
28 void vsl_b_read(vsl_b_istream& is, std::set<T>& v)
29 {
30  if (!is) return;
31 
32  v.clear();
33  unsigned set_size;
34  short ver;
35  vsl_b_read(is, ver);
36  switch (ver)
37  {
38  case 1:
39  vsl_b_read(is, set_size);
40  for (unsigned i=0; i<set_size; i++)
41  {
42  T tmp;
43  vsl_b_read(is,tmp);
44  v.insert(tmp);
45  }
46  break;
47  default:
48  std::cerr << "I/O ERROR: vsl_b_read(vsl_b_istream&, std::set<T>&)\n"
49  << " Unknown version number "<< ver << '\n';
50  is.is().clear(std::ios::badbit); // Set an unrecoverable IO error on stream
51  return;
52  }
53 }
54 
55 //====================================================================================
56 //: Output a human readable summary to the stream
57 template <class T>
58 void vsl_print_summary(std::ostream& os, const std::set<T> &v)
59 {
60  os << "Set length: " << v.size() << '\n';
61  unsigned i =0;
62  for (typename std::set<T>::const_iterator iter = v.begin();
63  iter != v.end() && i<5; ++iter,++i)
64  {
65  os << ' ' << i << ": ";
66  vsl_print_summary(os, *iter);
67  os << '\n';
68  }
69  if (v.size() > 5)
70  os << " ...\n";
71 }
72 
73 
74 #define VSL_SET_IO_INSTANTIATE(T) \
75 template void vsl_print_summary(std::ostream& s, const std::set<T >& v); \
76 template void vsl_b_write(vsl_b_ostream& s, const std::set<T >& v); \
77 template void vsl_b_read(vsl_b_istream& s, std::set<T >& v)
78 
79 #endif // vsl_set_io_hxx_
A binary output adaptor for any std::ostream.
Definition: vsl_binary_io.h:37
void vsl_b_read(vsl_b_istream &is, std::set< T > &v)
Read set from binary stream.
Definition: vsl_set_io.hxx:28
unsigned short version_no() const
Return the version number of the IO format of the file being read.
std::istream & is() const
A reference to the adaptor's stream.
void vsl_b_write(vsl_b_ostream &s, const std::set< T > &v)
Write set to binary stream.
Definition: vsl_set_io.hxx:16
An adaptor for any std::istream to make it suitable for binary input.
void vsl_print_summary(std::ostream &os, const std::set< T > &v)
Output a human readable summary to the stream.
Definition: vsl_set_io.hxx:58
Set of functions, and objects to perform binary IO.
binary IO functions for std::set<T>