libzypp
10.5.0
|
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