Region.h

Go to the documentation of this file.
00001 #ifndef REGION_H
00002 #define REGION_H
00003 
00004 #include <algorithm>
00005 
00006 namespace storage
00007 {
00008 
00009 class Region 
00010     {
00011     public:
00012         Region() : s(0), l(0) {};
00013         Region( unsigned long start, unsigned long len ) : s(start), l(len) {};
00014         Region( const Region& x ) 
00015             { *this = x; }
00016         Region& operator=(const Region& r)
00017             { s = r.start(); l = r.len(); return( *this ); }
00018         bool doIntersect( const Region& r ) const
00019             { return( r.start() <= end() && r.end() >= start() ); }
00020         Region intersect( const Region& r ) const
00021             {
00022             Region ret;
00023             if( r.start() <= end() && r.end() >= start() )
00024                 {
00025                 unsigned long s = std::max( r.start(), start() );
00026                 unsigned long e = std::min( r.end(), end() );
00027                 ret = Region( s, e-s+1 );
00028                 }
00029             return( ret );
00030             }
00031         bool inside( const Region& r ) const
00032             { return( start()>=r.start() && end() <= r.end() ); }
00033         bool operator==(const Region& r) const
00034             { return( r.start()==s && r.len()==l ); }
00035         bool operator!=(const Region& r) const
00036             { return( ! (*this==r) ); }
00037         bool operator<(const Region& r) const
00038             { return( s < r.start() ); }
00039         bool operator>(const Region& r) const
00040             { return( s > r.start() ); }
00041         unsigned long start() const { return( s ); }
00042         unsigned long end() const { return( s+l-1 ); }
00043         unsigned long len() const { return( l ); }
00044     protected:
00045         unsigned long s;
00046         unsigned long l;
00047     };
00048 
00049 inline std::ostream& operator<< (std::ostream& s, const Region &p )
00050     {
00051     s << "[" << p.start() << "," << p.len() << "]";
00052     return( s );
00053     }
00054 
00055 inline std::istream& operator>> (std::istream& s, Region &p )
00056     {
00057     unsigned long start, len;
00058     s >> start >> len;
00059     p = Region( start, len );
00060     return( s );
00061     }
00062 
00063 }
00064 
00065 #endif

Generated on Thu Jul 6 00:40:24 2006 for yast2-storage by  doxygen 1.4.6