Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

MRAmpBase.h

Go to the documentation of this file.
00001 // MRAmpBase.h
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 2002 Brown Deer Technology, LLC.
00004 //                        All rights reserved.
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 //      static const int    = 0x08; // not used
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 //      void append( int a, const Data_t coef );
00103 //      void append( const int* a, const Data_t coef );
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 //   template<class Data_t> friend class MRAmpParser;
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 //      _mpsizeb = hdrsizeb();
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 //void MRAmpBase::append( int a, const Data_t coef )
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 //void MRAmpBase::append( const int* a, const Data_t coef )
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 //      _ptbuffer->write( bp( coef, _mpenc.bplen_coef() ) );
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 //      _ptbuffer->write( bp( _mpsizeb, _mpenc.bplen_mpsizeb() ));
00478       _ptbuffer->seekp(0);
00479       _ptbuffer->write( bp( _mpsizeb, _mpenc.bplen_mpsizeb() ));
00480 //      _ptbuffer->seekp(0,BufferBase::end);
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 //   if ( hdrfixed() && sbfixed() ) {
00665       iter._pos = hdrsizeb();
00666 //   } else {
00667 //      iter.set_null();
00668 //   }
00669    return iter;
00670 }
00671 
00672 inline
00673 MRAmpBase::iterator MRAmpBase::end()
00674 {
00675    iterator iter(this);
00676 //   if ( hdrfixed() && sbfixed() ) {
00677 //      iter._pos = _sbsizeb - 4 - _mpenc.bplen_mpsizeb() * 2;
00678 //      iter._pos = mpsizeb();
00679       iter._pos = mpsizeb() - _mpenc.bplen_mpsizeb();
00680 //   }  else {
00681 //      iter.set_null();
00682 //   }
00683    return iter;
00684 }
00685 
00686 // ##### MRAmpBase::iterator #####
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 //      mp.write( *(_ptsb->_ptbuffer) );
00706       for( int d = 0; d < _ptmp->_mpenc.array_dim(); ++d ) {
00707          _ptmp->_ptbuffer->read( bp( 0, _ptmp->_mpenc.bplen_a(d) ) ); 
00708            // _a[d] = int(bp);
00709       }
00710       _ptmp->_ptbuffer->read( bp( 0, _ptmp->_mpenc.bplen_coef() ) ); 
00711         //_coef = Data_t(bp);
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 //      mp.write( *(_ptsb->_ptbuffer) );
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 // ##### friends #####
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 

Generated on Mon May 31 21:38:50 2004 for SR2k4 Assembler by doxygen 1.3.6