libzypp  10.5.0
Range.h
Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00012 #ifndef ZYPP_RANGE_H
00013 #define ZYPP_RANGE_H
00014 
00015 #include "zypp/RelCompare.h"
00016 
00018 namespace zypp
00019 { 
00020 
00021   namespace range_detail
00022   {
00023     bool overlaps( Rel lhs, Rel rhs, int cmp );
00024   }
00025 
00027   //
00028   //    CLASS NAME : Range
00029   //
00033   template<class _Tp, class _Compare = Compare<_Tp> >
00034     struct Range
00035     {
00037       Rel op;
00039       _Tp value;
00040 
00042       Range()
00043       : op( Rel::ANY )
00044       {}
00045 
00047       Range( const _Tp & value_r )
00048       : op( Rel::EQ )
00049       , value( value_r )
00050       {}
00051 
00053       Range( Rel op_r, const _Tp & value_r )
00054       : op( op_r )
00055       , value( value_r )
00056       {}
00057 
00059       bool overlaps( const Range & rhs ) const
00060       {
00061         return range_detail::overlaps( op, rhs.op,
00062                                        _Compare()( value, rhs.value ) );
00063       }
00064     };
00066 
00067   template<class _Tp, class _Compare>
00068     inline bool overlaps( const Range<_Tp,_Compare> & lhs,
00069                           const Range<_Tp,_Compare> & rhs )
00070     { return lhs.overlaps( rhs ); }
00071 
00073 
00074   template<class _Tp, class _Compare>
00075     inline bool operator==( const Range<_Tp,_Compare> & lhs,
00076                             const Range<_Tp,_Compare> & rhs )
00077     {
00078       return( lhs.op == rhs.op
00079               && (    lhs.op == Rel::ANY
00080                    || lhs.op == Rel::NONE
00081                    || relCompare( Rel::EQ, lhs.value, rhs.value,
00082                                   _Compare() )
00083                  )
00084             );
00085     }
00086 
00087   template<class _Tp, class _Compare>
00088     inline bool operator!=( const Range<_Tp,_Compare> & lhs,
00089                             const Range<_Tp,_Compare> & rhs )
00090     { return ! ( lhs == rhs ); }
00091 
00093 } // namespace zypp
00095 #endif // ZYPP_RANGE_H