00001
00002
00003
00004
00005
00006
00007 #ifndef MRACLEVEL_H
00008 #define MRACLEVEL_H
00009
00010 #ifdef USE_STD
00011 #include <iostream>
00012 using namespace std;
00013 #else
00014 #include <iostream.h>
00015 #endif
00016
00017 #include "BufferBase.h"
00018
00019 #ifndef MRA_MAXDIM
00020 #define MRA_MAXDIM 4
00021 #endif
00022
00023 class MRAclevel
00024 {
00025 public:
00026
00027 static const int cmin_limit = -16;
00028 static const int cmax_limit = 15;
00029
00030 MRAclevel();
00031 MRAclevel( const MRAclevel& );
00032
00033 MRAclevel& operator () ( const MRAclevel& );
00034
00035 MRAclevel& copy( const MRAclevel& );
00036 MRAclevel& operator = ( const MRAclevel& );
00037 MRAclevel& copy( int c );
00038 MRAclevel& operator = ( int c );
00039
00040 operator int();
00041
00042 bool is_equal( const MRAclevel& rhs );
00043 bool operator == ( const MRAclevel& rhs );
00044 bool operator != ( const MRAclevel& rhs );
00045
00046 MRAclevel operator + ( int );
00047 MRAclevel& operator += ( int );
00048
00049 MRAclevel operator - ( int );
00050 MRAclevel& operator -= ( int );
00051
00052 int sizeb();
00053
00054 void report( ostream& os = cout );
00055
00056 void write( BufferBase& );
00057 MRAclevel& operator << ( BufferBase& );
00058 void read( BufferBase& );
00059 MRAclevel& operator >> ( BufferBase& );
00060
00061 void write( istream& );
00062 void read( ostream& );
00063
00064 protected:
00065
00066 int _c;
00067
00068 friend class MRAcrange;
00069
00070 friend BufferBase& operator << ( BufferBase&, MRAclevel& );
00071 friend BufferBase& operator >> ( BufferBase&, MRAclevel& );
00072 friend ostream& operator << ( ostream&, MRAclevel& );
00073 friend istream& operator >> ( istream&, MRAclevel& );
00074
00075 };
00076
00077 inline
00078 MRAclevel::MRAclevel() : _c(0) {}
00079
00080 inline
00081 MRAclevel::MRAclevel( const MRAclevel& clevel ) : _c(clevel._c) {}
00082
00083 inline
00084 MRAclevel& MRAclevel::operator () ( const MRAclevel& clevel )
00085 {
00086 return copy(clevel);
00087 }
00088
00089 inline
00090 MRAclevel& MRAclevel::copy( const MRAclevel& clevel )
00091 {
00092 _c = clevel._c;
00093 return *this;
00094 }
00095
00096 inline
00097 MRAclevel& MRAclevel::operator = ( const MRAclevel& rhs ) { return copy(rhs); }
00098
00099 inline
00100 MRAclevel& MRAclevel::copy( int c )
00101 {
00102 _c = c;
00103 return *this;
00104 }
00105
00106 inline
00107 MRAclevel& MRAclevel::operator = ( int rhs ) { return copy(rhs); }
00108
00109 inline
00110 MRAclevel::operator int () { return _c; }
00111
00112 inline
00113 bool MRAclevel::is_equal( const MRAclevel& rhs )
00114 {
00115 return _c == rhs._c;
00116 }
00117
00118 inline
00119 bool MRAclevel::operator == ( const MRAclevel& rhs ) { return is_equal(rhs); }
00120
00121 inline
00122 bool MRAclevel::operator != ( const MRAclevel& rhs ) { return !is_equal(rhs); }
00123
00124 inline
00125 MRAclevel MRAclevel::operator + ( int c )
00126 {
00127 MRAclevel clevel(*this);
00128 clevel += c;
00129 return clevel;
00130 }
00131
00132 inline
00133 MRAclevel& MRAclevel::operator += ( int c )
00134 {
00135 _c += c;
00136 return *this;
00137 }
00138
00139 inline
00140 MRAclevel MRAclevel::operator - ( int c )
00141 {
00142 MRAclevel clevel(*this);
00143 clevel -= c;
00144 return clevel;
00145 }
00146
00147 inline
00148 MRAclevel& MRAclevel::operator -= ( int c )
00149 {
00150 _c -= c;
00151 return *this;
00152 }
00153
00154 inline
00155 int MRAclevel::sizeb() { return 1; }
00156
00157 inline
00158 void MRAclevel::report( ostream& os ) {
00159 os << "MRAclevel::report(){\n";
00160 os << "c = " << _c << '\n';
00161 os << "}\n";
00162 }
00163
00164 inline
00165 void MRAclevel::write( BufferBase& buffer )
00166 {
00167 bytepack bp;
00168 buffer >> bp( 0, 1 ); _c = int(bp);
00169 }
00170
00171 inline
00172 MRAclevel& MRAclevel::operator << ( BufferBase& buffer )
00173 {
00174 write(buffer);
00175 return *this;
00176 }
00177
00178 inline
00179 void MRAclevel::read( BufferBase& buffer )
00180 {
00181 bytepack bp;
00182 buffer << bp( _c, 1 );
00183 }
00184
00185 inline
00186 MRAclevel& MRAclevel::operator >> ( BufferBase& buffer )
00187 {
00188 read(buffer);
00189 return *this;
00190 }
00191
00192 inline
00193 void MRAclevel::write( istream& is )
00194 {
00195 bytepack bp;
00196 is >> bp( 0, 1 ); _c = int(bp);
00197 }
00198
00199 inline
00200 void MRAclevel::read( ostream& os )
00201 {
00202 bytepack bp;
00203 os << bp( _c, 1 );
00204 }
00205
00206
00207
00208 inline
00209 BufferBase& operator >> ( BufferBase& buffer, MRAclevel& clevel )
00210 {
00211 clevel.write(buffer);
00212 return buffer;
00213 }
00214
00215 inline
00216 BufferBase& operator << ( BufferBase& buffer, MRAclevel& clevel )
00217 {
00218 clevel.read(buffer);
00219 return buffer;
00220 }
00221
00222 inline
00223 istream& operator >> ( istream& is, MRAclevel& clevel )
00224 {
00225 clevel.write(is);
00226 return is;
00227 }
00228
00229 inline
00230 ostream& operator << ( ostream& os, MRAclevel& clevel )
00231 {
00232 clevel.read(os);
00233 return os;
00234 }
00235
00236 #endif
00237