Range.h
Go to the documentation of this file.00001
00002
00003
00004
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
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 }
00095 #endif // ZYPP_RANGE_H