vbl_io_array_3d.hxx
Go to the documentation of this file.
1 // This is core/vbl/io/vbl_io_array_3d.hxx
2 #ifndef vbl_io_array_3d_hxx_
3 #define vbl_io_array_3d_hxx_
4 //:
5 // \file
6 // \brief binary IO functions for vbl_array_3d<T>
7 // \author K.Y.McGaul
8 
9 #include <iostream>
10 #include "vbl_io_array_3d.h"
11 #include <vsl/vsl_binary_io.h>
12 #include <vbl/vbl_array_3d.h>
13 
14 //====================================================================
15 //: Binary save self to stream.
16 template<class T>
17 void vsl_b_write(vsl_b_ostream & os, const vbl_array_3d<T> &p)
18 {
19  constexpr short io_version_no = 1;
20  vsl_b_write(os, io_version_no);
21 
22  typedef typename vbl_array_3d<T>::size_type size_type;
23  size_type row1_count = p.get_row1_count();
24  size_type row2_count = p.get_row2_count();
25  size_type row3_count = p.get_row3_count();
26  vsl_b_write(os, row1_count);
27  vsl_b_write(os, row2_count);
28  vsl_b_write(os, row3_count);
29  for (size_type i=0; i<row1_count; i++)
30  for (size_type j=0; j<row2_count; j++)
31  for (size_type k=0; k<row3_count; k++)
32  vsl_b_write(os, p(i,j,k));
33 }
34 
35 //=====================================================================
36 //: Binary load self from stream.
37 template<class T>
38 void vsl_b_read(vsl_b_istream &is, vbl_array_3d<T> &p)
39 {
40  if (!is) return;
41 
42  short ver;
43  typedef typename vbl_array_3d<T>::size_type size_type;
44  size_type row1_count, row2_count, row3_count;
45  vsl_b_read(is, ver);
46  switch (ver)
47  {
48  case 1:
49  vsl_b_read(is, row1_count);
50  vsl_b_read(is, row2_count);
51  vsl_b_read(is, row3_count);
52  p.resize(row1_count, row2_count, row3_count);
53  for (size_type i=0; i<row1_count; i++)
54  for (size_type j=0; j<row2_count; j++)
55  for (size_type k=0; k<row3_count; k++)
56  vsl_b_read(is, p(i,j,k));
57  break;
58 
59  default:
60  std::cerr << "I/O ERROR: vsl_b_read(vsl_b_istream&, vbl_array_3d<T>&)\n"
61  << " Unknown version number "<< ver << '\n';
62  is.is().clear(std::ios::badbit); // Set an unrecoverable IO error on stream
63  return;
64  }
65 }
66 
67 //====================================================================
68 //: Output a human readable summary to the stream
69 template<class T>
70 void vsl_print_summary(std::ostream & os,const vbl_array_3d<T> & p)
71 {
72  os << "Row1 count: " << p.get_row1_count() << std::endl
73  << "Row2 count: " << p.get_row2_count() << std::endl
74  << "Row3 count: " << p.get_row3_count() << std::endl;
75  typedef typename vbl_array_3d<T>::size_type size_type;
76  for (size_type i =0; i<p.get_row1_count() && i<5; i++)
77  {
78  for (size_type j=0; j<p.get_row2_count() && j<5; j++)
79  {
80  for (size_type k=0; k<p.get_row3_count() && k<5; k++)
81  {
82  os << ' ';
83  vsl_print_summary(os, p(i,j,k));
84  }
85  if (p.get_row3_count() > 5)
86  os << " ...\n";
87  }
88  if (p.get_row2_count() > 5)
89  os << " ...";
90  os << std::endl << std::endl;
91  }
92  if (p.get_row1_count() > 5)
93  os << " ...\n";
94 }
95 
96 #define VBL_IO_ARRAY_3D_INSTANTIATE(T) \
97 template void vsl_print_summary(std::ostream &, const vbl_array_3d<T > &); \
98 template void vsl_b_read(vsl_b_istream &, vbl_array_3d<T > &); \
99 template void vsl_b_write(vsl_b_ostream &, const vbl_array_3d<T > &)
100 
101 #endif // vbl_io_array_3d_hxx_
void vsl_b_read(vsl_b_istream &is, vbl_array_3d< T > &p)
Binary load self from stream.
void resize(size_type n1, size_type n2, size_type n3)
size_type get_row3_count() const
Definition: vbl_array_3d.h:129
Contains class for templated 3d array.
Templated 3-dimensional array.
Definition: vbl_array_3d.h:38
void vsl_b_write(vsl_b_ostream &os, const vbl_array_3d< T > &p)
Binary save self to stream.
size_type get_row2_count() const
Definition: vbl_array_3d.h:128
size_type get_row1_count() const
Definition: vbl_array_3d.h:127
void vsl_print_summary(std::ostream &os, const vbl_array_3d< T > &p)
Output a human readable summary to the stream.
std::size_t size_type
Definition: vbl_array_3d.h:41