Range.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00012 #include <iostream>
00013
00014
00015 #include "zypp/Range.h"
00016
00017 using std::endl;
00018
00020 namespace zypp
00021 {
00022
00023 namespace range_detail
00024 {
00030 bool overlaps( Rel lhs, Rel rhs, int cmp )
00031 {
00032 if ( lhs == Rel::NONE || rhs == Rel::NONE )
00033 return false;
00034 if ( lhs == Rel::ANY || rhs == Rel::ANY )
00035 return true;
00036
00037 if ( lhs == Rel::NE )
00038 {
00039 if ( cmp < 0 )
00040 {
00041
00042 return( rhs == Rel::GE
00043 || rhs == Rel::EQ );
00044 } else if ( cmp > 0)
00045 {
00046
00047 return( rhs == Rel::LT
00048 || rhs == Rel::EQ );
00049 } else
00050 {
00051
00052 return ( rhs == Rel::GT
00053 || rhs == Rel::LT );
00054 }
00055 }
00056
00057 if ( rhs == Rel::NE )
00058 {
00059 if ( cmp < 0 )
00060 {
00061
00062 return( lhs == Rel::LE
00063 || lhs == Rel::EQ );
00064 } else if ( cmp > 0)
00065 {
00066
00067 return( lhs == Rel::GT
00068 || lhs == Rel::EQ );
00069 } else
00070 {
00071
00072 return ( lhs == Rel::GT
00073 || lhs == Rel::LT );
00074 }
00075 }
00076
00077 if ( cmp < 0 )
00078 {
00079
00080 return( lhs == Rel::GT
00081 || lhs == Rel::GE
00082 || rhs == Rel::LT
00083 || rhs == Rel::LE );
00084 }
00085
00086 if ( cmp > 0 )
00087 {
00088
00089 return( lhs == Rel::LT
00090 || lhs == Rel::LE
00091 || rhs == Rel::GT
00092 || rhs == Rel::GE );
00093 }
00094
00095
00096
00097 if ( ( lhs == Rel::LE || lhs == Rel::EQ || lhs == Rel::GE )
00098 && ( rhs == Rel::LE || rhs == Rel::EQ || rhs == Rel::GE ) )
00099 return true;
00100 if ( ( lhs == Rel::LT && ( rhs == Rel::LT || rhs == Rel::LE ) )
00101 || ( lhs == Rel::GT && ( rhs == Rel::GT || rhs == Rel::GE ) )
00102 || ( rhs == Rel::LT && ( lhs == Rel::LT || lhs == Rel::LE ) )
00103 || ( rhs == Rel::GT && ( lhs == Rel::GT || lhs == Rel::GE ) ) )
00104 return true;
00105
00106 return false;
00107
00108 }
00109 }
00110
00111
00113 }