00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _ARAGELI_cmp_hpp_
00014 #define _ARAGELI_cmp_hpp_
00015
00016 #include "config.hpp"
00017 #include "exception.hpp"
00018 #include "factory.hpp"
00019
00020 #include "std_import.hpp"
00021
00022
00023 namespace Arageli
00024 {
00025
00026
00028
00034 template <typename T1, typename T2>
00035 inline int cmp (const T1& a, const T2& b)
00036 {
00037 if(a < b)return -1;
00038 else if(a > b)return +1;
00039 else
00040 {
00041 ARAGELI_ASSERT_0(a == b);
00042 return 0;
00043 }
00044 }
00045
00046
00048
00049 template <typename T>
00050 inline int sign (const T& x)
00051 { return cmp(x, null(x)); }
00052
00053
00055 template <typename T>
00056 inline bool is_even (const T& x)
00057 { return is_null(x & unit(x)); }
00058
00059
00061 template <typename T>
00062 inline bool is_odd (const T& x)
00063 { return !is_null(x & unit(x)); }
00064
00065
00067 template <typename T1, typename T2>
00068 inline bool is_divisible (const T1& a, const T2& b)
00069 { return is_null(a%b); }
00070
00071
00073 template <typename T>
00074 inline bool is_positive (const T& x)
00075 { return x > null(x); }
00076
00078 template <typename T>
00079 inline bool is_negative (const T& x)
00080 { return x < null(x); }
00081
00082
00084 template <typename T>
00085 inline bool is_integer (const T& x)
00086 { return is_null(frac(x)); }
00087
00088
00089 }
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 #endif // #ifndef _ARAGELI_cmp_hpp_