00001
00002
00003
00004
00005
00006
00007 #ifndef MRAMPBASE_H
00008 #define MRAMPBASE_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 #include "MRAmpEncode.h"
00019 #include "MRAacoef.h"
00020
00021 inline int mcode_to_m( const char mcode )
00022 {
00023 return int( (unsigned char)( 0x1F & mcode ) );
00024 }
00025
00026 inline int mcode_to_sw( const char mcode )
00027 {
00028 return int( (unsigned char)( ( 0x80 & mcode ) >> 7 ) );
00029 }
00030
00031 inline int mcode_to_rs( const char mcode )
00032 {
00033 return int( (unsigned char)( ( 0x40 & mcode ) >> 6 ) );
00034 }
00035
00036 inline int mcode_to_order( const char mcode )
00037 {
00038 return int( (unsigned char)( ( 0x20 & mcode ) >> 5 ) );
00039 }
00040
00041 #ifndef MRA_MAXDIM
00042 #define MRA_MAXDIM 4
00043 #endif
00044
00045 class MRAmpBase
00046 {
00047 public:
00048
00049 virtual string isa() const { return "MRAmpBase"; }
00050
00051 static const int goodbit = 0x01;
00052 static const int failbit = 0x02;
00053 static const int baddimbit = 0x04;
00054
00055 static const int hdrfixedbit = 0x10;
00056 static const int mpfixedbit = 0x20;
00057
00058 MRAmpBase( BufferBase* );
00059 MRAmpBase( const MRAmpBase&, BufferBase* );
00060 MRAmpBase( const MRAmpEncode&, BufferBase* );
00061
00062 virtual ~MRAmpBase();
00063
00064 virtual MRAmpBase& copy( const MRAmpBase& );
00065 virtual MRAmpBase& operator = ( const MRAmpBase& );
00066
00067 MRAmpBase& operator () ();
00068 MRAmpBase& operator () ( const MRAmpBase& rhs );
00069 MRAmpBase& operator () ( const MRAmpEncode& mpenc );
00070
00071 bool is_equal( const MRAmpBase& );
00072 bool operator == ( const MRAmpBase& );
00073 bool operator != ( const MRAmpBase& );
00074
00075 void clear();
00076 void setstate(int);
00077 void clrstate(int);
00078 int rdstate( int = 0xFF );
00079 bool good();
00080 bool fail();
00081 bool baddim();
00082 bool hdrfixed();
00083 bool mpfixed();
00084
00085 MRAmpBase& set_null();
00086 bool is_null();
00087 bool operator ! ();
00088
00089 MRAmpBase& set_empty();
00090 bool is_empty();
00091
00092 void fix_hdr();
00093 void refix_hdr();
00094 void fix_mp();
00095 void unfix_mp();
00096
00097 void set_mcode( const char* mcode );
00098 void set_mcode( int d, char mcode );
00099 void set_n( const int* n );
00100 void set_n( int d, int n );
00101
00102
00103
00104 void append( int a, bytepack bpcoef );
00105 void append( const int* a, bytepack bpcoef );
00106
00107 void write( BufferBase& );
00108 MRAmpBase& operator << ( BufferBase& );
00109 void read( BufferBase& );
00110 MRAmpBase& operator >> ( BufferBase& );
00111
00112 void write( istream& );
00113 void read( ostream& );
00114
00115 MRAmpEncode& mpenc();
00116
00117 int mpsizeb();
00118 int mcode( int d = 0 );
00119 int n( int d = 0 );
00120
00121 int hdrsizeb();
00122 int acoefsizeb();
00123 int nullsizeb();
00124
00125 int mcode_to_m( int = 0 );
00126 int mcode_to_sw( int = 0 );
00127 int mcode_to_rs( int = 0 );
00128 int mcode_to_order( int = 0 );
00129
00130 void report( ostream& = cout );
00131
00132 class iterator
00133 {
00134 public:
00135 iterator( MRAmpBase* );
00136 ~iterator();
00137 iterator& operator ++ ();
00138 MRAacoef operator * ();
00139 void set_null();
00140 bool is_null();
00141 bool operator ! ();
00142 operator bool();
00143 bool is_equal( const iterator& );
00144 bool operator == ( const iterator& );
00145 bool operator != ( const iterator& );
00146 bool operator < ( const iterator& );
00147 bool operator > ( const iterator& );
00148 bool operator <= ( const iterator& );
00149 bool operator >= ( const iterator& );
00150 int pos() { return _pos; }
00151 protected:
00152 int _pos;
00153 MRAmpBase* _ptmp;
00154 private:
00155 iterator() {}
00156 friend class MRAmpBase;
00157 };
00158
00159 iterator begin();
00160
00161 iterator end();
00162
00163 protected:
00164 int _state;
00165
00166 MRAmpEncode _mpenc;
00167
00168 int _mpsizeb;
00169
00170 char _mcode[MRA_MAXDIM];
00171 int _n[MRA_MAXDIM];
00172
00173 BufferBase* _ptbuffer;
00174
00175 private:
00176 MRAmpBase() {}
00177 virtual void synchronize();
00178
00179 friend BufferBase& operator >> ( BufferBase&, MRAmpBase& );
00180
00181 friend BufferBase& operator << ( BufferBase&, MRAmpBase& );
00182
00183 friend istream& operator >> ( istream&, MRAmpBase& );
00184
00185 friend ostream& operator << ( ostream&, MRAmpBase& );
00186
00187 template<class Data_t> friend class MRAmpBuilder;
00188
00189
00190
00191 };
00192
00193 inline
00194 MRAmpBase::MRAmpBase( BufferBase* ptbuffer )
00195 : _state(0),
00196 _ptbuffer(ptbuffer)
00197 {
00198 set_null();
00199 }
00200
00201 inline
00202 MRAmpBase::MRAmpBase( const MRAmpBase& mp, BufferBase* ptbuffer )
00203 : _state(mp._state),
00204 _mpenc(mp._mpenc), _mpsizeb(mp._mpsizeb), _ptbuffer(ptbuffer)
00205 {
00206 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00207 _mcode[d] = mp._mcode[d];
00208 _n[d] = mp._n[d];
00209 }
00210 }
00211
00212 inline
00213 MRAmpBase::MRAmpBase( const MRAmpEncode& mpenc, BufferBase* ptbuffer )
00214 : _state(goodbit),
00215 _mpenc(mpenc), _mpsizeb(0), _ptbuffer(ptbuffer)
00216 {
00217 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00218 _mcode[d] = 0;
00219 _n[d] = 0;
00220 }
00221 }
00222
00223 inline
00224 MRAmpBase::~MRAmpBase()
00225 {
00226 if ( _ptbuffer != 0 ) { delete _ptbuffer; _ptbuffer = 0; }
00227 }
00228
00229 inline
00230 MRAmpBase& MRAmpBase::copy( const MRAmpBase& mp )
00231 {
00232 if ( this != &mp ) {
00233 _state = mp._state;
00234 _mpenc = mp._mpenc;
00235 _mpsizeb = mp._mpsizeb;
00236 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00237 _mcode[d] = mp._mcode[d];
00238 _n[d] = mp._n[d];
00239 }
00240 mp._ptbuffer->seekg(0);
00241 _ptbuffer->erase();
00242 for( int i = 0; i < mp._mpsizeb; ++i ) {
00243 _ptbuffer->put( mp._ptbuffer->get() );
00244 }
00245 }
00246 return *this;
00247 }
00248
00249 inline
00250 MRAmpBase& MRAmpBase::operator = ( const MRAmpBase& rhs ) { return copy(rhs); }
00251
00252 inline
00253 MRAmpBase& MRAmpBase::operator () () { return set_null(); }
00254
00255 inline
00256 MRAmpBase& MRAmpBase::operator () ( const MRAmpBase& mp )
00257 {
00258 return copy(mp);
00259 }
00260
00261 inline
00262 MRAmpBase& MRAmpBase::operator () ( const MRAmpEncode& mpenc )
00263 {
00264 clear();
00265 _mpenc = mpenc;
00266 _mpsizeb = 0;
00267 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00268 _mcode[d] = 0;
00269 _n[d] = 0;
00270 }
00271 _ptbuffer->erase();
00272 return *this;
00273 }
00274
00275 inline
00276 bool MRAmpBase::is_equal( const MRAmpBase& mp )
00277 {
00278 if ( this != &mp ) {
00279 if ( _state != mp._state ) return false;
00280 if ( _mpenc != mp._mpenc ) return false;
00281 if ( _mpsizeb != mp._mpsizeb ) return false;
00282 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00283 if ( _mcode[d] != mp._mcode[d] ) return false;
00284 if ( _n[d] != mp._n[d] ) return false;
00285 }
00286 int mark = _ptbuffer->tellg();
00287 int mpmark = mp._ptbuffer->tellg();
00288 _ptbuffer->seekg(0);
00289 mp._ptbuffer->seekg(0);
00290 for( int i = 0; i < _mpsizeb; ++i ) {
00291 if ( _ptbuffer->get() != mp._ptbuffer->get() ) return false;
00292 }
00293 _ptbuffer->seekg(mark);
00294 mp._ptbuffer->seekg(mpmark);
00295 }
00296 return true;
00297 }
00298
00299 inline
00300 bool MRAmpBase::operator == ( const MRAmpBase& rhs ) { return is_equal(rhs); }
00301
00302 inline
00303 bool MRAmpBase::operator != ( const MRAmpBase& rhs ) { return !is_equal(rhs); }
00304
00305 inline
00306 void MRAmpBase::clear() { _state = goodbit; }
00307
00308 inline
00309 void MRAmpBase::setstate( int s ) { _state |= s; }
00310
00311 inline
00312 void MRAmpBase::clrstate( int s ) { _state &= ~s; }
00313
00314 inline
00315 int MRAmpBase::rdstate( int s ) { return (_state & s); }
00316
00317 inline
00318 bool MRAmpBase::good() { return rdstate(goodbit) != 0; }
00319
00320 inline
00321 bool MRAmpBase::fail() { return rdstate(failbit) != 0; }
00322
00323 inline
00324 bool MRAmpBase::baddim() { return rdstate(baddimbit) != 0; }
00325
00326 inline
00327 bool MRAmpBase::hdrfixed() { return rdstate(hdrfixedbit) != 0; }
00328
00329 inline
00330 bool MRAmpBase::mpfixed() { return rdstate(mpfixedbit) != 0; }
00331
00332 inline
00333 MRAmpBase& MRAmpBase::set_null()
00334 {
00335 _mpsizeb = 0;
00336 _ptbuffer->erase();
00337 return *this;
00338 }
00339
00340 inline
00341 bool MRAmpBase::is_null() { return _mpsizeb == 0; }
00342
00343 inline
00344 bool MRAmpBase::operator ! () { return is_null(); }
00345
00346 inline
00347 MRAmpBase& MRAmpBase::set_empty()
00348 {
00349 clear();
00350 _mpsizeb = hdrsizeb() + _mpenc.bplen_mpsizeb();
00351 _ptbuffer->erase();
00352 return *this;
00353 }
00354
00355 inline
00356 bool MRAmpBase::is_empty()
00357 {
00358 return _mpsizeb <= hdrsizeb() + _mpenc.bplen_mpsizeb();
00359 }
00360
00361 inline
00362 void MRAmpBase::set_mcode( const char* mcode )
00363 {
00364 if ( !hdrfixed() && !mpfixed() ) {
00365 for( int d = 0; d < _mpenc.grid_dim(); ++d ) _mcode[d] = mcode[d];
00366 } else setstate(failbit);
00367 }
00368
00369 inline
00370 void MRAmpBase::set_mcode( int d, char mcode )
00371 {
00372 if ( !hdrfixed() && !mpfixed() ) _mcode[d] = mcode;
00373 else setstate(failbit);
00374 }
00375
00376 inline
00377 void MRAmpBase::set_n( const int* n )
00378 {
00379 if ( !hdrfixed() && !mpfixed() ) {
00380 for( int d = 0; d < _mpenc.grid_dim(); ++d ) _n[d] = n[d];
00381 } else setstate(failbit);
00382 }
00383
00384 inline
00385 void MRAmpBase::set_n( int d, int n )
00386 {
00387 if ( !hdrfixed() && !mpfixed() ) _n[d] = n;
00388 else setstate(failbit);
00389 }
00390
00391 inline
00392 void MRAmpBase::fix_hdr() {
00393 if ( !hdrfixed() && !mpfixed() ) {
00394 bytepack bp;
00395 setstate(hdrfixedbit);
00396 _mpsizeb = hdrsizeb();
00397 _ptbuffer->seekp(0);
00398 _ptbuffer->write( bp( _mpsizeb, _mpenc.bplen_mpsizeb() ) );
00399 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00400 _ptbuffer->write( bp( _mcode[d], 1 ) );
00401 }
00402 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00403 _ptbuffer->write( bp( _n[d], _mpenc.bplen_n(d) ) );
00404 }
00405 } else setstate(failbit);
00406 }
00407
00408 inline
00409 void MRAmpBase::refix_hdr() {
00410 if ( hdrfixed() && !mpfixed() ) {
00411 bytepack bp;
00412 setstate(hdrfixedbit);
00413
00414 _ptbuffer->seekp(0);
00415 _ptbuffer->write( bp( _mpsizeb, _mpenc.bplen_mpsizeb() ) );
00416 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00417 _ptbuffer->write( bp( _mcode[d], 1 ) );
00418 }
00419 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00420 _ptbuffer->write( bp( _n[d], _mpenc.bplen_n(d) ) );
00421 }
00422 _ptbuffer->seekp(_mpsizeb);
00423 } else setstate(failbit);
00424 }
00425
00426 inline
00427
00428 void MRAmpBase::append( int a, bytepack bpcoef )
00429 {
00430 if ( hdrfixed() && !mpfixed() ) {
00431 bytepack bp;
00432 _ptbuffer->write( bp( a, _mpenc.bplen_a(0) ) );
00433 _mpsizeb += _mpenc.bplen_a(0);
00434 _ptbuffer->write( bpcoef );
00435 cout << "append " << float(bpcoef) << endl;
00436 _mpsizeb += _mpenc.bplen_coef();
00437 } else setstate(failbit);
00438 }
00439
00440 inline
00441
00442 void MRAmpBase::append( const int* a, bytepack bpcoef )
00443 {
00444 if ( hdrfixed() && !mpfixed() ) {
00445 bytepack bp;
00446 for( int d = 0; d < _mpenc.array_dim(); ++d ) {
00447 _ptbuffer->write( bp( a[d], _mpenc.bplen_a(d) ) );
00448 _mpsizeb += _mpenc.bplen_a(d);
00449 }
00450
00451 _ptbuffer->write( bpcoef );
00452 _mpsizeb += _mpenc.bplen_coef();
00453 } else setstate(failbit);
00454 }
00455
00456 inline
00457 void MRAmpBase::fix_mp()
00458 {
00459 if ( hdrfixed() && !mpfixed() ) {
00460 bytepack bp;
00461 setstate(mpfixedbit);
00462 _mpsizeb += _mpenc.bplen_mpsizeb();
00463 _ptbuffer->write( bp( _mpsizeb, _mpenc.bplen_mpsizeb() ));
00464 _ptbuffer->seekp(0);
00465 _ptbuffer->write( bp( _mpsizeb, _mpenc.bplen_mpsizeb() ));
00466 _ptbuffer->seekp(0,BufferBase::end);
00467 } else setstate(failbit);
00468 }
00469
00470 inline
00471 void MRAmpBase::unfix_mp()
00472 {
00473 if ( hdrfixed() && mpfixed() ) {
00474 bytepack bp;
00475 clrstate(mpfixedbit);
00476 _mpsizeb -= _mpenc.bplen_mpsizeb();
00477
00478 _ptbuffer->seekp(0);
00479 _ptbuffer->write( bp( _mpsizeb, _mpenc.bplen_mpsizeb() ));
00480
00481 _ptbuffer->seekp(_mpsizeb);
00482 } else setstate(failbit);
00483 }
00484
00485 inline
00486 void MRAmpBase::write( BufferBase& buffer )
00487 {
00488 bytepack bp;
00489 _ptbuffer->erase();
00490 buffer >> bp( 0, _mpenc.bplen_mpsizeb() ); _mpsizeb = int(bp);
00491 _ptbuffer->write(bp);
00492 if ( _mpsizeb != 0 ) {
00493 for(int i = _mpenc.bplen_mpsizeb(); i < _mpsizeb; ++i) {
00494 _ptbuffer->put( buffer.get() );
00495 }
00496 }
00497 else {
00498 _ptbuffer->write(bp);
00499 }
00500 synchronize();
00501 }
00502
00503 inline
00504 MRAmpBase& MRAmpBase::operator << ( BufferBase& buffer )
00505 {
00506 write(buffer);
00507 return *this;
00508 }
00509
00510 inline
00511 void MRAmpBase::read( BufferBase& buffer )
00512 {
00513 if ( !is_null() ) {
00514 _ptbuffer->seekg(0);
00515 for( int i = 0; i < _mpsizeb; ++i ) {
00516 buffer.put( _ptbuffer->get() );
00517 }
00518 }
00519 else {
00520 bytepack bp;
00521 buffer << bp( 0, _mpenc.bplen_mpsizeb() );
00522 buffer << bp( 0, _mpenc.bplen_mpsizeb() );
00523 }
00524 }
00525
00526 inline
00527 MRAmpBase& MRAmpBase::operator >> ( BufferBase& buffer )
00528 {
00529 read(buffer);
00530 return *this;
00531 }
00532
00533 inline
00534 void MRAmpBase::write( istream& is )
00535 {
00536 bytepack bp;
00537 _ptbuffer->erase();
00538 is >> bp( 0, _mpenc.bplen_mpsizeb() ); _mpsizeb = int(bp);
00539 _ptbuffer->write(bp);
00540 if ( _mpsizeb != 0 ) {
00541 for(int i = _mpenc.bplen_mpsizeb(); i < _mpsizeb; ++i) {
00542 _ptbuffer->put( is.get() );
00543 }
00544 }
00545 else {
00546 _ptbuffer->write(bp);
00547 }
00548 synchronize();
00549 }
00550
00551 inline
00552 void MRAmpBase::read( ostream& os )
00553 {
00554 if ( !is_null() ) {
00555 _ptbuffer->seekg(0);
00556 for( int i = 0; i < _mpsizeb; ++i ) {
00557 os.put( _ptbuffer->get() );
00558 }
00559 }
00560 else {
00561 bytepack bp;
00562 os << bp( 0, _mpenc.bplen_mpsizeb() );
00563 os << bp( 0, _mpenc.bplen_mpsizeb() );
00564 }
00565 }
00566
00567 inline
00568 int MRAmpBase::hdrsizeb()
00569 {
00570 int tmp = _mpenc.bplen_mpsizeb() + _mpenc.grid_dim();
00571 for( int d = 0; d < _mpenc.grid_dim(); ++d ) { tmp += _mpenc.bplen_n(d); }
00572 return tmp;
00573 }
00574
00575 inline
00576 int MRAmpBase::acoefsizeb()
00577 {
00578 int tmp = _mpenc.bplen_coef();
00579 for( int d = 0; d < _mpenc.grid_dim(); ++d ) { tmp += _mpenc.bplen_a(d); }
00580 return tmp;
00581 }
00582
00583 inline
00584 MRAmpEncode& MRAmpBase::mpenc() { return _mpenc; }
00585
00586 inline
00587 int MRAmpBase::mpsizeb() { return _mpsizeb; }
00588
00589 inline
00590 int MRAmpBase::mcode( int d ) { return _mcode[d]; }
00591
00592 inline
00593 int MRAmpBase::n( int d ) { return _n[d]; }
00594
00595 inline
00596 int MRAmpBase::nullsizeb() { return 2 * _mpenc.bplen_mpsizeb(); }
00597
00598 inline
00599 int MRAmpBase::mcode_to_m( int d )
00600 {
00601 return ::mcode_to_m( _mcode[d] );
00602 }
00603
00604 inline
00605 int MRAmpBase::mcode_to_sw( int d )
00606 {
00607 return ::mcode_to_sw( _mcode[d] );
00608 }
00609
00610 inline
00611 int MRAmpBase::mcode_to_rs( int d )
00612 {
00613 return ::mcode_to_rs( _mcode[d] );
00614 }
00615
00616 inline
00617 int MRAmpBase::mcode_to_order( int d )
00618 {
00619 return ::mcode_to_order( _mcode[d] );
00620 }
00621
00622 inline
00623 void MRAmpBase::report( ostream& os )
00624 {
00625 os << "MRAmpBase::report mpenc:\n";
00626 _mpenc.report(os);
00627 os << "MRAmpBase::report mpsizeb =" << _mpsizeb << '\n';
00628 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00629 os << "MRAmpBase::report int(mcode[" << d << "])="
00630 << int(_mcode[d]) << '\n';
00631 }
00632 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00633 os << "MRAmpBase::report n[" << d << "]="
00634 << _n[d] << '\n';
00635 }
00636 }
00637
00638 inline
00639 void MRAmpBase::synchronize()
00640 {
00641 bytepack bp;
00642 _ptbuffer->seekg(0);
00643 _ptbuffer->read( bp( 0, _mpenc.bplen_mpsizeb() ) ); _mpsizeb = int(bp);
00644 if ( _mpsizeb != 0 ) {
00645 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00646 _ptbuffer->read( bp(0,1) ); _mcode[d] = char(bp);
00647 }
00648 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00649 _ptbuffer->read( bp( 0, _mpenc.bplen_n(d) ) ); _n[d] = int(bp);
00650 }
00651 }
00652 else {
00653 for( int d = 0; d < _mpenc.grid_dim(); ++d ) {
00654 _mcode[d] = 0;
00655 _n[d] = 0;
00656 }
00657 }
00658 }
00659
00660 inline
00661 MRAmpBase::iterator MRAmpBase::begin()
00662 {
00663 iterator iter(this);
00664
00665 iter._pos = hdrsizeb();
00666
00667
00668
00669 return iter;
00670 }
00671
00672 inline
00673 MRAmpBase::iterator MRAmpBase::end()
00674 {
00675 iterator iter(this);
00676
00677
00678
00679 iter._pos = mpsizeb() - _mpenc.bplen_mpsizeb();
00680
00681
00682
00683 return iter;
00684 }
00685
00686
00687
00688 inline
00689 MRAmpBase::iterator::iterator( MRAmpBase* ptmp )
00690 : _pos(0), _ptmp(ptmp)
00691 {}
00692
00693 inline
00694 MRAmpBase::iterator::~iterator() { _ptmp = 0; }
00695
00696 inline
00697 MRAmpBase::iterator&
00698 MRAmpBase::iterator::operator ++ ()
00699 {
00700 if ( !is_null() ) {
00701 bytepack bp;
00702 int tmppos = _ptmp->_ptbuffer->tellg();
00703 _ptmp->_ptbuffer->seekg(_pos);
00704
00705
00706 for( int d = 0; d < _ptmp->_mpenc.array_dim(); ++d ) {
00707 _ptmp->_ptbuffer->read( bp( 0, _ptmp->_mpenc.bplen_a(d) ) );
00708
00709 }
00710 _ptmp->_ptbuffer->read( bp( 0, _ptmp->_mpenc.bplen_coef() ) );
00711
00712
00713 _pos = _ptmp->_ptbuffer->tellg();
00714 _ptmp->_ptbuffer->seekg(tmppos);
00715 }
00716 return *this;
00717 }
00718
00719 inline
00720 MRAacoef MRAmpBase::iterator::operator * ()
00721 {
00722 bytepack bp;
00723 MRAacoef acoef( _ptmp->_mpenc.array_dim() );
00724 if ( !is_null() ) {
00725 int tmppos = _ptmp->_ptbuffer->tellg();
00726 _ptmp->_ptbuffer->seekg(_pos);
00727
00728
00729 for( int d = 0; d < _ptmp->_mpenc.array_dim(); ++d ) {
00730 _ptmp->_ptbuffer->read( bp( 0, _ptmp->_mpenc.bplen_a(d) ) );
00731 acoef.a[d] = int(bp);
00732 }
00733 _ptmp->_ptbuffer->read( bp( 0, _ptmp->_mpenc.bplen_coef() ) );
00734 acoef.bpcoef = bp;
00735
00736 _ptmp->_ptbuffer->seekg(tmppos);
00737 }
00738 return acoef;
00739 }
00740
00741 inline
00742 void MRAmpBase::iterator::set_null() { _pos = 0; }
00743
00744 inline
00745 bool MRAmpBase::iterator::is_null() { return ( _pos == 0 ); }
00746
00747 inline
00748 bool MRAmpBase::iterator::operator ! () { return is_null(); }
00749
00750 inline
00751 MRAmpBase::iterator::operator bool() { return !is_null(); }
00752
00753 inline
00754 bool MRAmpBase::iterator::is_equal( const iterator& iter )
00755 {
00756 return ( _pos == iter._pos );
00757 }
00758
00759 inline
00760 bool MRAmpBase::iterator::operator == ( const iterator& iter )
00761 {
00762 return is_equal(iter);
00763 }
00764
00765 inline
00766 bool MRAmpBase::iterator::operator != ( const iterator& iter)
00767 {
00768 return !is_equal(iter);
00769 }
00770
00771 inline
00772 bool MRAmpBase::iterator::operator > ( const iterator& iter )
00773 {
00774 return ( _pos > iter._pos );
00775 }
00776
00777 inline
00778 bool MRAmpBase::iterator::operator < ( const iterator& iter )
00779 {
00780 return ( _pos < iter._pos );
00781 }
00782
00783 inline
00784 bool MRAmpBase::iterator::operator >= ( const iterator& iter )
00785 {
00786 return ( ( *this > iter ) || ( *this == iter ) );
00787 }
00788
00789 inline
00790 bool MRAmpBase::iterator::operator <= ( const iterator& iter)
00791 {
00792 return ( ( *this < iter ) || ( *this == iter ) );
00793 }
00794
00795
00796
00797 inline
00798 BufferBase& operator << ( BufferBase& buffer, MRAmpBase& mp )
00799 {
00800 mp.read(buffer);
00801 return buffer;
00802 }
00803
00804 inline
00805 BufferBase& operator >> ( BufferBase& buffer, MRAmpBase& mp )
00806 {
00807 mp.write(buffer);
00808 return buffer;
00809 }
00810
00811 inline
00812 ostream& operator << ( ostream& os, MRAmpBase& mp )
00813 {
00814 mp.read(os);
00815 return os;
00816 }
00817
00818 inline
00819 istream& operator >> ( istream& is, MRAmpBase& mp )
00820 {
00821 mp.write(is);
00822 return is;
00823 }
00824
00825 #endif
00826