CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/MagneticField/Interpolation/src/binary_ofstream.cc

Go to the documentation of this file.
00001 #include "binary_ofstream.h"
00002 
00003 #include <cstdio>
00004 #include <iostream>
00005 
00006 struct binary_ofstream_error {};
00007 
00008 binary_ofstream::binary_ofstream( const char* name) : file_(0)
00009 {
00010     init (name);
00011 }
00012 
00013 binary_ofstream::binary_ofstream( const std::string& name) : file_(0)
00014 {
00015     init (name.c_str());
00016 }
00017 
00018 void binary_ofstream::init( const char* name)
00019 {
00020     file_ = fopen( name, "wb");
00021     if (file_ == 0) {
00022         std::cout << "file " << name << " cannot be opened for writing"
00023                   << std::endl;
00024         throw binary_ofstream_error();
00025     }
00026 }
00027 
00028 binary_ofstream::~binary_ofstream()
00029 {
00030     close();
00031 }
00032 void binary_ofstream::close()
00033 {
00034     if (file_ != 0) fclose( file_);
00035     file_ = 0;
00036 }
00037 
00038 binary_ofstream& binary_ofstream::operator<<( char n) {
00039     fputc( n, file_); return *this;
00040 }
00041 binary_ofstream& binary_ofstream::operator<<( unsigned char n) {
00042     fputc( n, file_); return *this;
00043 }
00044 
00045 binary_ofstream& binary_ofstream::operator<<( short n) {
00046     fwrite( &n, sizeof(n), 1, file_); return *this;}
00047 binary_ofstream& binary_ofstream::operator<<( unsigned short n) {
00048     fwrite( &n, sizeof(n), 1, file_); return *this;}
00049 binary_ofstream& binary_ofstream::operator<<( int n) {
00050     fwrite( &n, sizeof(n), 1, file_); return *this;}
00051 binary_ofstream& binary_ofstream::operator<<( unsigned int n) {
00052     fwrite( &n, sizeof(n), 1, file_); return *this;}
00053 binary_ofstream& binary_ofstream::operator<<( long n) {
00054     fwrite( &n, sizeof(n), 1, file_); return *this;}
00055 binary_ofstream& binary_ofstream::operator<<( unsigned long n) {
00056     fwrite( &n, sizeof(n), 1, file_); return *this;}
00057 binary_ofstream& binary_ofstream::operator<<( float n) {
00058     fwrite( &n, sizeof(n), 1, file_); return *this;}
00059 binary_ofstream& binary_ofstream::operator<<( double n) {
00060     fwrite( &n, sizeof(n), 1, file_); return *this;}
00061 
00062 binary_ofstream& binary_ofstream::operator<<( bool n) {
00063   return operator<<( static_cast<char>(n));
00064 }
00065 
00066 binary_ofstream& binary_ofstream::operator<<( const std::string& s) {
00067   (*this) << s.size();
00068   fwrite( s.data(), 1, s.size(), file_);
00069   return *this;
00070 }