core/vsl/vsl_vector_io_vector_bool.cxx

Go to the documentation of this file.
00001 //:
00002 // \file
00003 // \brief Specialised version of binary IO for vector<vector<bool> >
00004 // \author Kevin de Souza (based on vsl_vector_io_bool.cxx by Ian Scott)
00005 //
00006 
00007 #include "vsl_vector_io.h"
00008 #include <vsl/vsl_binary_io.h>
00009 #include <vcl_iostream.h>
00010 
00011 //====================================================================================
00012 //: Write vector to binary stream
00013 VCL_DEFINE_SPECIALIZATION
00014 void vsl_b_write(vsl_b_ostream& s, const vcl_vector<vcl_vector<bool> >& v)
00015 {
00016   const short version_no = 1;
00017   vsl_b_write(s, version_no);
00018   unsigned n = v.size();
00019   vsl_b_write(s, n);
00020   for (unsigned i=0; i<n; ++i)
00021   {
00022     unsigned m = v[i].size();
00023     vsl_b_write(s, m);
00024     for (unsigned j=0; j<m; ++j)
00025     {
00026       vsl_b_write(s, v[i][j]);
00027     }
00028   }
00029 }
00030 
00031 //====================================================================================
00032 //: Read vector from binary stream
00033 VCL_DEFINE_SPECIALIZATION
00034 void vsl_b_read(vsl_b_istream& is, vcl_vector<vcl_vector<bool> >& v)
00035 {
00036   if (!is) return;
00037 
00038   unsigned n, m;
00039   short ver;
00040   vsl_b_read(is, ver);
00041   switch (ver)
00042   {
00043   case 1:
00044     vsl_b_read(is, n);
00045     v.resize(n);
00046     for (unsigned i=0; i<n; ++i)
00047     {
00048       vsl_b_read(is, m);
00049       v[i].resize(m);
00050       for (unsigned j=0; j<m; ++j)
00051       {
00052         bool b;
00053         vsl_b_read(is, b);
00054         v[i][j] = b;
00055       }
00056     }
00057     break;
00058 
00059   default:
00060     vcl_cerr << "I/O ERROR: vsl_b_read(vsl_b_istream&, vcl_vector<vcl_vector<T> >&)\n"
00061              << "           Unknown version number "<< ver << '\n';
00062     is.is().clear(vcl_ios::badbit); // Set an unrecoverable IO error on stream
00063     return;
00064   }
00065 }
00066 
00067 //====================================================================================
00068 //: Output a human readable summary to the stream
00069 VCL_DEFINE_SPECIALIZATION
00070 void vsl_print_summary(vcl_ostream& os, const vcl_vector<vcl_vector<bool> >& v)
00071 {
00072   unsigned n = v.size();
00073   os << "Vector length: " << n << '\n';
00074   for (unsigned int i=0; i<n && i<5; i++)
00075   {
00076     os << ' ' << i << ": ";
00077     unsigned m = v[i].size();
00078     os << "\tVector length: " << m << '\n';
00079     for (unsigned int j=0; j<m && j<5; j++)
00080     {
00081       os << ' ' << j << ": ";
00082       vsl_print_summary(os, v[i][j]);
00083     }
00084     if (m > 5) os << " ... ";
00085     os << '\n';
00086   }
00087   if (n > 5) os << " ...";
00088   os << "\n\n";
00089 }
00090 
00091 

Generated on Tue Dec 2 05:06:06 2008 for core/vsl by  doxygen 1.5.1