00001
00002
00003
00004
00005
00006
00007 #ifndef MCFSBBASE_H
00008 #define MCFSBBASE_H
00009
00010 #ifdef USE_STD
00011 #include <iostream>
00012 #include <string>
00013 using namespace std;
00014 #else
00015 #include <iostream.h>
00016 #include <string.h>
00017 #endif
00018
00019 #include "BufferBase.h"
00020 #include "MCFheader.h"
00021 #include "MRAsbBase.h"
00022 #include "MRAsb.h"
00023
00024 class MCFsb
00025 {
00026 public:
00027
00028 MCFsb();
00029
00030 MCFsb( const MCFsb& rhs );
00031
00032 ~MCFsb();
00033
00034 MCFsb& operator () ( MCFheader&, MRAsbBase&, string& );
00035 MCFsb& operator () ( MCFheader&, MRAsbBase&, char* = "" );
00036
00037 MCFsb& operator () ( const MCFsb& );
00038
00039 MCFsb& copy( const MCFsb& rhs );
00040 MCFsb& operator = ( const MCFsb& rhs );
00041
00042 void write( BufferBase& );
00043 MCFsb& operator << ( BufferBase& );
00044 void read( BufferBase& );
00045 MCFsb& operator >> ( BufferBase& );
00046
00047 void write( istream& );
00048 MCFsb& operator << ( istream& );
00049 void read( ostream& );
00050 MCFsb& operator >> ( ostream& );
00051
00052 void set_header( MCFheader& );
00053 void set_sb( MRAsbBase& );
00054 void set_postscript( string& );
00055 void set_postscript( char* );
00056
00057 MCFheader* header();
00058 MRAsbBase* sb();
00059 string& postscript();
00060
00061 int mcfsizeb();
00062
00063 protected:
00064
00065 MCFheader* _header;
00066 MRAsbBase* _sb;
00067 string _postscript;
00068
00069 private:
00070
00071 friend BufferBase& operator << ( BufferBase&, MCFsb& );
00072 friend BufferBase& operator >> ( BufferBase&, MCFsb& );
00073
00074 friend ostream& operator<<( ostream&, MCFsb& );
00075 friend istream& operator>>( istream&, MCFsb& );
00076
00077 };
00078
00079 inline
00080 MCFsb::MCFsb() : _header( new MCFheader ), _sb( new MRAsb ), _postscript("") {}
00081
00082 inline
00083 MCFsb::MCFsb( const MCFsb& rhs )
00084 : _header( new MCFheader ), _sb( new MRAsb ), _postscript(rhs._postscript)
00085 {
00086 _header = rhs._header;
00087 _sb = rhs._sb;
00088 }
00089
00090 inline
00091 MCFsb::~MCFsb()
00092 {
00093 if ( _header != 0 ) { delete _header ; _header = 0; }
00094 if ( _sb != 0 ) { delete _sb ; _sb = 0; }
00095 }
00096
00097 inline
00098 MCFsb& MCFsb::operator () (
00099 MCFheader& header, MRAsbBase& sb, string& postscript
00100 )
00101 {
00102 set_header(header);
00103 set_sb(sb);
00104 set_postscript(postscript);
00105 return *this;
00106 }
00107
00108 inline
00109 MCFsb& MCFsb::operator () (
00110 MCFheader& header, MRAsbBase& sb, char* postscript
00111 )
00112 {
00113 set_header(header);
00114 set_sb(sb);
00115 set_postscript(postscript);
00116 return *this;
00117 }
00118
00119 inline
00120 MCFsb& MCFsb::operator () ( const MCFsb& mcfsb ) { return *this = mcfsb; }
00121
00122 inline
00123 MCFsb& MCFsb::copy( const MCFsb& rhs )
00124 {
00125 if ( this != &rhs ) {
00126 *_header = *(rhs._header);
00127 *_sb = *(rhs._sb);
00128 _postscript = rhs._postscript;
00129 }
00130 return *this;
00131 }
00132
00133 inline
00134 MCFsb& MCFsb::operator = ( const MCFsb& rhs ) { return copy(rhs); }
00135
00136 inline
00137 MCFsb& MCFsb::operator << ( BufferBase& buffer )
00138 {
00139 write(buffer);
00140 return *this;
00141 }
00142
00143 inline
00144 MCFsb& MCFsb::operator >> ( BufferBase& buffer )
00145 {
00146 read(buffer);
00147 return *this;
00148 }
00149
00150 inline
00151 MCFsb& MCFsb::operator << ( istream& is )
00152 {
00153 write(is);
00154 return *this;
00155 }
00156
00157 inline
00158 MCFsb& MCFsb::operator >> ( ostream& os )
00159 {
00160 read(os);
00161 return *this;
00162 }
00163
00164 inline
00165 void MCFsb::set_header( MCFheader& header ) { *_header = header; }
00166
00167 inline
00168 void MCFsb::set_sb( MRAsbBase& sb ) { *_sb = sb; }
00169
00170 inline
00171 void MCFsb::set_postscript( string& postscript ) { _postscript = postscript; }
00172
00173 inline
00174 void MCFsb::set_postscript( char* postscript ) { _postscript = postscript; }
00175
00176 inline
00177 MCFheader* MCFsb::header() { return _header; }
00178
00179 inline
00180 MRAsbBase* MCFsb::sb() { return _sb; }
00181
00182 inline
00183 string& MCFsb::postscript() { return _postscript; }
00184
00185 inline
00186 int MCFsb::mcfsizeb() { return _header->sizeb() + _sb->sbsizeb() + 4; }
00187
00188 #endif
00189