libzypp  11.13.5
Range.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_RANGE_H
13 #define ZYPP_RANGE_H
14 
15 #include "zypp/RelCompare.h"
16 
18 namespace zypp
19 {
20 
21  namespace range_detail
22  {
23  bool overlaps( Rel lhs, Rel rhs, int cmp );
24  }
25 
27  //
28  // CLASS NAME : Range
29  //
33  template<class _Tp, class _Compare = Compare<_Tp> >
34  struct Range
35  {
39  _Tp value;
40 
43  : op( Rel::ANY )
44  {}
45 
47  Range( const _Tp & value_r )
48  : op( Rel::EQ )
49  , value( value_r )
50  {}
51 
53  Range( Rel op_r, const _Tp & value_r )
54  : op( op_r )
55  , value( value_r )
56  {}
57 
59  bool overlaps( const Range & rhs ) const
60  {
61  return range_detail::overlaps( op, rhs.op,
62  _Compare()( value, rhs.value ) );
63  }
64  };
66 
67  template<class _Tp, class _Compare>
68  inline bool overlaps( const Range<_Tp,_Compare> & lhs,
69  const Range<_Tp,_Compare> & rhs )
70  { return lhs.overlaps( rhs ); }
71 
73 
74  template<class _Tp, class _Compare>
75  inline bool operator==( const Range<_Tp,_Compare> & lhs,
76  const Range<_Tp,_Compare> & rhs )
77  {
78  return( lhs.op == rhs.op
79  && ( lhs.op == Rel::ANY
80  || lhs.op == Rel::NONE
81  || relCompare( Rel::EQ, lhs.value, rhs.value,
82  _Compare() )
83  )
84  );
85  }
86 
87  template<class _Tp, class _Compare>
88  inline bool operator!=( const Range<_Tp,_Compare> & lhs,
89  const Range<_Tp,_Compare> & rhs )
90  { return ! ( lhs == rhs ); }
91 
93 } // namespace zypp
95 #endif // ZYPP_RANGE_H