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

MRAcrange.h

Go to the documentation of this file.
00001 // MRAcrange.h
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 2002 Brown Deer Technology, LLC.
00004 //                        All rights reserved.
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifndef MRACRANGE_H
00008 #define MRACRANGE_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 "MRAclevel.h"
00019 
00020 class MRAcrange { 
00021 
00022    public: 
00023       
00024       static const int goodbit = 0x01;
00025       static const int failbit = 0x02;
00026       static const int fragbit = 0x08;
00027 
00028       MRAclevel cmin, cmax;
00029 
00030       MRAcrange( const MRAcrange& );
00031       MRAcrange();
00032       MRAcrange( const MRAclevel& cmin2, const MRAclevel& cmax2 );
00033       MRAcrange( MRAclevel );
00034       
00035       MRAcrange& copy( const MRAcrange& );
00036       MRAcrange& operator = ( const MRAcrange& );
00037 
00038       MRAcrange& operator () ( const MRAcrange& );
00039       MRAcrange& operator () ();
00040       MRAcrange& operator () ( const MRAclevel& cmin2, const MRAclevel& cmax2 );
00041 
00042       void set_null();
00043       bool is_null();
00044       bool operator ! ();
00045 
00046       void set_empty();
00047       bool is_empty();
00048 
00049       void clear();
00050       void setstate(int);
00051       void clrstate(int);
00052       int rdstate( int = 0xFF );
00053       bool good();
00054       bool fail();
00055       bool frag();
00056 
00057       MRAcrange& Union( MRAcrange );
00058       MRAcrange& operator += ( MRAcrange );
00059 
00060       MRAcrange& Intersection( MRAcrange );
00061       MRAcrange& operator *= ( MRAcrange );
00062 
00063       MRAcrange& Difference( MRAcrange );
00064       MRAcrange& operator -= ( MRAcrange );
00065 
00066       int sizeb();
00067 
00068       void report( ostream& os = cout );
00069 
00070       void write( BufferBase& );
00071       MRAcrange& operator << ( BufferBase& );
00072       void read( BufferBase& );
00073       MRAcrange& operator >> ( BufferBase& );
00074 
00075       void write( istream& );
00076       void read( ostream& );
00077 
00078    protected:
00079       int _state;
00080 
00081    friend bool equal( MRAcrange, MRAcrange );
00082    friend bool operator == ( MRAcrange, MRAcrange );
00083    friend bool operator != ( MRAcrange, MRAcrange );
00084    friend bool contains( MRAcrange, MRAcrange );
00085    friend bool operator < ( MRAcrange, MRAcrange );
00086    friend bool operator > ( MRAcrange, MRAcrange );
00087    friend bool operator <= ( MRAcrange, MRAcrange );
00088    friend bool operator >= ( MRAcrange, MRAcrange );
00089    friend bool disjoint( MRAcrange, MRAcrange );
00090    friend bool connected( MRAcrange, MRAcrange );
00091    friend bool interior( MRAcrange, MRAcrange );
00092    friend MRAcrange Union( MRAcrange, MRAcrange );
00093    friend MRAcrange operator + ( MRAcrange, MRAcrange );
00094    friend MRAcrange Intersection( MRAcrange, MRAcrange );
00095    friend MRAcrange operator * ( MRAcrange, MRAcrange );
00096    friend MRAcrange Difference( MRAcrange, MRAcrange );
00097    friend MRAcrange operator - ( MRAcrange, MRAcrange );
00098 
00099    friend BufferBase& operator << ( BufferBase&, MRAcrange& );
00100    friend BufferBase& operator >> ( BufferBase&, MRAcrange& );
00101    friend ostream& operator << ( ostream&, MRAcrange& );
00102    friend istream& operator >> ( istream&, MRAcrange& );
00103 
00104 };
00105 
00106 // ##### overloaded namespace functions #####
00107 
00108 bool equal( MRAcrange, MRAcrange );
00109 
00110 inline
00111 bool operator == ( MRAcrange lhs, MRAcrange rhs )
00112 {
00113    return equal( rhs, lhs );
00114 }
00115 
00116 inline
00117 bool operator != ( MRAcrange lhs, MRAcrange rhs )
00118 {
00119    return !equal( rhs, lhs );
00120 }
00121 
00122 bool contains( MRAcrange, MRAcrange );
00123 
00124 inline
00125 bool operator < ( MRAcrange lhs, MRAcrange rhs )
00126 {
00127    return contains( rhs, lhs ) && lhs != rhs;
00128 }
00129 
00130 inline
00131 bool operator > ( MRAcrange lhs, MRAcrange rhs )
00132 {
00133    return contains( lhs, rhs ) && lhs != rhs;
00134 }
00135 
00136 inline
00137 bool operator <= ( MRAcrange lhs, MRAcrange rhs )
00138 {
00139    return contains( rhs, lhs );
00140 }
00141 
00142 inline
00143 bool operator >= ( MRAcrange lhs, MRAcrange rhs )
00144 {
00145    return contains( lhs, rhs );
00146 }
00147 
00148 bool disjoint( MRAcrange, MRAcrange );
00149 
00150 bool connected( MRAcrange, MRAcrange );
00151 
00152 bool interior( MRAcrange, MRAcrange );
00153 
00154 MRAcrange Union( MRAcrange, MRAcrange );
00155 
00156 inline
00157 MRAcrange operator + ( MRAcrange lhs, MRAcrange rhs )
00158 {
00159    return Union( lhs, rhs );
00160 }
00161 
00162 MRAcrange Intersection( MRAcrange, MRAcrange );
00163 
00164 inline
00165 MRAcrange operator * ( MRAcrange lhs, MRAcrange rhs )
00166 {
00167    return Intersection( lhs, rhs );
00168 }
00169 
00170 MRAcrange Difference( MRAcrange, MRAcrange );
00171 
00172 inline
00173 MRAcrange operator - ( MRAcrange lhs, MRAcrange rhs )
00174 {
00175    return Difference( lhs, rhs );
00176 }
00177 
00178 // ##### class member functions #####
00179 
00180 inline
00181 MRAcrange::MRAcrange( const MRAcrange& crange ) 
00182 {
00183       _state = crange._state;
00184       cmin = crange.cmin;
00185       cmax = crange.cmax;
00186 }
00187 
00188 inline
00189 MRAcrange::MRAcrange() {}
00190 
00191 inline
00192 MRAcrange::MRAcrange( const MRAclevel& cmin2, const MRAclevel& cmax2 ) 
00193 {
00194    _state = goodbit;
00195    cmin = cmin2;
00196    cmax = cmax2;
00197 }
00198 
00199 inline
00200 MRAcrange::MRAcrange( const MRAclevel clevel ) 
00201 {
00202       _state = goodbit;
00203       cmin = clevel;
00204       cmax = clevel;
00205 }
00206 
00207 inline
00208 MRAcrange& MRAcrange::copy( const MRAcrange& crange ) 
00209 {
00210    _state = crange._state;
00211    cmin = crange.cmin;
00212    cmax = crange.cmax;
00213    return *this;
00214 }
00215 
00216 inline
00217 MRAcrange& MRAcrange::operator = ( const MRAcrange& rhs ) { return copy(rhs); }
00218 
00219 inline
00220 MRAcrange& MRAcrange::operator () ( const MRAcrange& crange ) 
00221 { 
00222    _state = crange._state;
00223    cmin = crange.cmin;
00224    cmax = crange.cmax;
00225    return *this;
00226 }
00227 
00228 inline
00229 MRAcrange& MRAcrange::operator () () 
00230 { 
00231    _state = 0;
00232    cmin = MRAclevel::cmax_limit;
00233    cmax = MRAclevel::cmin_limit;
00234    return *this; 
00235 }
00236 
00237 inline
00238 MRAcrange& MRAcrange::operator () ( 
00239   const MRAclevel& cmin2, const MRAclevel& cmax2 
00240 ) 
00241 { 
00242    clear();
00243    cmin = cmin2;
00244    cmax = cmax2;
00245    return *this;
00246 }
00247 
00248 inline
00249 void MRAcrange::set_null() 
00250 {
00251    _state = 0;
00252    cmin = MRAclevel::cmax_limit;
00253    cmax = MRAclevel::cmin_limit; // implies is_empty
00254 }
00255 
00256 inline
00257 bool MRAcrange::is_null() 
00258 {
00259    if ( _state == 0 ) return true;
00260    return false;
00261 }
00262 
00263 inline
00264 bool MRAcrange::operator ! () 
00265 {
00266    return is_null();
00267 }
00268 
00269 inline
00270 void MRAcrange::set_empty() 
00271 {
00272    if ( !is_null() ) {
00273       clear();
00274       cmin = MRAclevel::cmax_limit;
00275       cmax = MRAclevel::cmin_limit;
00276    } else {
00277       setstate(failbit);
00278    }
00279 }
00280 
00281 inline
00282 bool MRAcrange::is_empty() 
00283 {
00284    if ( good() ) {
00285       if ( int(cmin) > int(cmax) ) return true;
00286    }
00287    return false;
00288 }
00289 
00290 inline
00291 void MRAcrange::clear() { _state = goodbit; }
00292 
00293 inline
00294 void MRAcrange::setstate( int s ) { _state |= s; }
00295 
00296 inline
00297 void MRAcrange::clrstate( int s ) { _state &= ~s; }
00298 
00299 inline
00300 int MRAcrange::rdstate( int s ) { return (_state & s); }
00301 
00302 inline
00303 bool MRAcrange::good() { return _state == goodbit; }
00304 
00305 inline
00306 bool MRAcrange::fail() { return rdstate(failbit) != 0; }
00307 
00308 inline
00309 bool MRAcrange::frag() { return rdstate(fragbit) != 0; }
00310 
00311 inline
00312 MRAcrange& MRAcrange::operator += ( MRAcrange rhs ) 
00313 { 
00314    return Union(rhs); 
00315 }
00316 
00317 inline
00318 MRAcrange& MRAcrange::operator *= ( MRAcrange rhs )
00319 {
00320    return Intersection(rhs); 
00321 }
00322 
00323 inline
00324 MRAcrange& MRAcrange::operator -= ( MRAcrange rhs ) 
00325 { 
00326    return Difference(rhs); 
00327 }
00328 
00329 inline
00330 int MRAcrange::sizeb() { return cmin.sizeb() + cmax.sizeb(); }
00331 
00332 inline
00333 void MRAcrange::report( ostream& os ) {
00334    os << "MRAcrange::report(){\n";
00335    os << "state = " << _state << " = 0b0000"<<frag()<<'*'<<fail()<<good()<< '\n';
00336    os << "cmin = " << int(cmin)
00337       << " cmax = " << int(cmax);
00338    if ( int(cmin) > int(cmax) ) cout << " ==> is_empty\n";
00339    else cout << "\n";
00340    os << "}\n";
00341 }
00342 
00343 inline
00344 void MRAcrange::write( BufferBase& buffer )
00345 {
00346    buffer >> cmin;
00347    buffer >> cmax;
00348    _state = goodbit;
00349 }
00350 
00351 inline
00352 MRAcrange& MRAcrange::operator << ( BufferBase& buffer )
00353 {
00354    write(buffer);
00355    return *this;
00356 }
00357 
00358 inline
00359 void MRAcrange::read( BufferBase& buffer )
00360 {
00361    buffer << cmin;
00362    buffer << cmax;
00363 }
00364 
00365 inline
00366 MRAcrange& MRAcrange::operator >> ( BufferBase& buffer )
00367 {
00368    read(buffer);
00369    return *this;
00370 }
00371 
00372 inline
00373 void MRAcrange::write( istream& is )
00374 {
00375    is >> cmin;
00376    is >> cmax;
00377    _state = goodbit;
00378 }
00379 
00380 inline
00381 void MRAcrange::read( ostream& os )
00382 {
00383    os << cmin;
00384    os << cmax;
00385 }
00386 
00387 // ##### friends #####
00388 
00389 inline
00390 BufferBase& operator >> ( BufferBase& buffer, MRAcrange& crange )
00391 {
00392    crange.write(buffer);
00393    return buffer;
00394 }
00395 
00396 inline
00397 BufferBase& operator << ( BufferBase& buffer, MRAcrange& crange )
00398 {
00399    crange.read(buffer);
00400    return buffer;
00401 }
00402 
00403 inline
00404 istream& operator >> ( istream& is, MRAcrange& crange )
00405 {
00406    crange.write(is);
00407    return is;
00408 }
00409 
00410 inline
00411 ostream& operator << ( ostream& os, MRAcrange& crange )
00412 {
00413    crange.read(os);
00414    return os;
00415 }
00416 
00417 #endif
00418 

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