core/vgl/io/vgl_io_h_matrix_2d.txx
Go to the documentation of this file.
00001 // This is core/vgl/io/vgl_io_h_matrix_2d.txx
00002 #ifndef vgl_io_h_matrix_2d_txx_
00003 #define vgl_io_h_matrix_2d_txx_
00004 //:
00005 // \file
00006 
00007 #include "vgl_io_h_matrix_2d.h"
00008 #include <vsl/vsl_binary_io.h>
00009 
00010 //: Binary save vgl_h_matrix_2d to stream.
00011 template <class T> 
00012 void vsl_b_write(vsl_b_ostream &bfs, const vgl_h_matrix_2d<T>& t)
00013 {
00014   static const short io_version_no = 1;
00015   vsl_b_write(bfs,io_version_no);
00016   vnl_matrix_fixed<T,3,3> m = t.get_matrix();
00017   vsl_b_write(bfs,m[0][0]); vsl_b_write(bfs,m[0][1]); vsl_b_write(bfs,m[0][2]);
00018   vsl_b_write(bfs,m[1][0]); vsl_b_write(bfs,m[1][1]); vsl_b_write(bfs,m[1][2]);
00019   vsl_b_write(bfs,m[2][0]); vsl_b_write(bfs,m[2][1]); vsl_b_write(bfs,m[2][2]);
00020 }
00021 
00022 //: Binary load vgl_h_matrix_2d from stream.
00023 template <class T> 
00024 void vsl_b_read(vsl_b_istream &bfs, vgl_h_matrix_2d<T>& v)
00025 {
00026   if (!bfs) return;
00027 
00028   short version;
00029   vsl_b_read(bfs,version);
00030   switch (version) {
00031     case 1:
00032       T xx,xy,xt,yx,yy,yt,tx,ty,tt;
00033       vsl_b_read(bfs,xx); vsl_b_read(bfs,xy); vsl_b_read(bfs,xt);
00034       vsl_b_read(bfs,yx); vsl_b_read(bfs,yy); vsl_b_read(bfs,yt);
00035       vsl_b_read(bfs,tx); vsl_b_read(bfs,ty); vsl_b_read(bfs,tt);
00036       v.set(0,0,xx); v.set(0,1,xy); v.set(0,2,xt);
00037       v.set(1,0,yx); v.set(1,1,yy); v.set(1,2,yt);
00038       v.set(2,0,tx); v.set(2,0,ty); v.set(2,2,tt);
00039       break;
00040     default:
00041       vcl_cerr << "I/O ERROR: vgl_h_matrix_2d::b_read(vsl_b_istream&)\n"
00042                << "           Unknown version number "<< version << '\n';
00043       bfs.is().clear(vcl_ios::badbit); // Set an unrecoverable IO error on stream
00044       return;
00045   }
00046 }
00047 
00048 
00049 #define VGL_IO_H_MATRIX_2D_INSTANTIATE(T) \
00050 template void vsl_b_read(vsl_b_istream &, vgl_h_matrix_2d<T >&); \
00051 template void vsl_b_write(vsl_b_ostream &, const vgl_h_matrix_2d<T >&)
00052 
00053 #endif // vgl_io_h_matrix_2d_txx_