vsl_vector_io_bool.cxx
Go to the documentation of this file.
1 //:
2 // \file
3 // \brief Specialised version of binary IO for vector<bool>
4 // \author Ian Scott
5 //
6 
7 #include <iostream>
8 #include "vsl_vector_io.h"
9 #include <vsl/vsl_binary_io.h>
10 #ifdef _MSC_VER
11 # include <vcl_msvc_warnings.h>
12 #endif
13 
14 //====================================================================================
15 //: Write vector to binary stream
16 template <>
17 void vsl_b_write(vsl_b_ostream& s, const std::vector<bool>& v)
18 {
19  constexpr short version_no = 1;
21  auto n = (unsigned int)(v.size());
22  vsl_b_write(s,n);
23  for (unsigned int i=0; i<n; ++i)
24  vsl_b_write(s, v[i]);
25 }
26 
27 //====================================================================================
28 //: Read vector from binary stream
29 template <>
30 void vsl_b_read(vsl_b_istream& is, std::vector<bool>& v)
31 {
32  if (!is) return;
33 
34  unsigned int n;
35  short ver;
36  vsl_b_read(is, ver);
37  switch (ver)
38  {
39  case 1:
40  vsl_b_read(is,n);
41  v.resize(n);
42  for (unsigned int i=0; i<n; ++i)
43  {
44  bool b;
45  vsl_b_read(is, b);
46  v[i] = b;
47  }
48  break;
49  default:
50  std::cerr << "I/O ERROR: vsl_b_read(vsl_b_istream&, std::vector<T>&)\n"
51  << " Unknown version number "<< ver << '\n';
52  is.is().clear(std::ios::badbit); // Set an unrecoverable IO error on stream
53  return;
54  }
55 }
56 
57 //====================================================================================
58 //: Output a human readable summary to the stream
59 template <>
60 void vsl_print_summary(std::ostream& os, const std::vector<bool> &v)
61 {
62  os << "Vector length: " << v.size() << '\n';
63  for (unsigned int i=0; i<v.size() && i<5; i++)
64  {
65  os << ' ' << i << ": ";
66  vsl_print_summary(os, v[i]);
67  os << '\n';
68  }
69  if (v.size() > 5)
70  os << " ..." << '\n';
71 }
A binary output adaptor for any std::ostream.
Definition: vsl_binary_io.h:37
void vsl_b_write(vsl_b_ostream &s, const std::vector< bool > &v)
Write vector to binary stream.
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_read(vsl_b_istream &is, std::vector< bool > &v)
Read vector from binary stream.
void vsl_print_summary(std::ostream &os, const std::vector< bool > &v)
Output a human readable summary to the stream.
An adaptor for any std::istream to make it suitable for binary input.
Set of functions, and objects to perform binary IO.
binary IO functions for std::vector<T>