/
Range.h
95 lines (82 loc) · 2.87 KB
/
Range.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*---------------------------------------------------------------------\
| ____ _ __ __ ___ |
| |__ / \ / / . \ . \ |
| / / \ V /| _/ _/ |
| / /__ | | | | | | |
| /_____||_| |_| |_| |
| |
\---------------------------------------------------------------------*/
/** \file zypp/Range.h
*
*/
#ifndef ZYPP_RANGE_H
#define ZYPP_RANGE_H
#include "zypp/RelCompare.h"
///////////////////////////////////////////////////////////////////
namespace zypp
{ /////////////////////////////////////////////////////////////////
namespace range_detail
{
bool overlaps( Rel lhs, Rel rhs, int cmp );
}
///////////////////////////////////////////////////////////////////
//
// CLASS NAME : Range
//
/**
*
*/
template<class _Tp, class _Compare = Compare<_Tp> >
struct Range
{
/** */
Rel op;
/** */
_Tp value;
/** Default ctor: \ref Rel::ANY. */
Range()
: op( Rel::ANY )
{}
/** Ctor taking \a _Tp (\ref Rel::EQ). */
Range( const _Tp & value_r )
: op( Rel::EQ )
, value( value_r )
{}
/** Ctor taking \ref Rel and \a _Tp. */
Range( Rel op_r, const _Tp & value_r )
: op( op_r )
, value( value_r )
{}
/** Return whether two Ranges overlap. */
bool overlaps( const Range & rhs ) const
{
return range_detail::overlaps( op, rhs.op,
_Compare()( value, rhs.value ) );
}
};
///////////////////////////////////////////////////////////////////
template<class _Tp, class _Compare>
inline bool overlaps( const Range<_Tp,_Compare> & lhs,
const Range<_Tp,_Compare> & rhs )
{ return lhs.overlaps( rhs ); }
///////////////////////////////////////////////////////////////////
template<class _Tp, class _Compare>
inline bool operator==( const Range<_Tp,_Compare> & lhs,
const Range<_Tp,_Compare> & rhs )
{
return( lhs.op == rhs.op
&& ( lhs.op == Rel::ANY
|| lhs.op == Rel::NONE
|| relCompare( Rel::EQ, lhs.value, rhs.value,
_Compare() )
)
);
}
template<class _Tp, class _Compare>
inline bool operator!=( const Range<_Tp,_Compare> & lhs,
const Range<_Tp,_Compare> & rhs )
{ return ! ( lhs == rhs ); }
/////////////////////////////////////////////////////////////////
} // namespace zypp
///////////////////////////////////////////////////////////////////
#endif // ZYPP_RANGE_H