00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef PPL_Coefficient_types_hh
00014 #define PPL_Coefficient_types_hh 1
00015
00016 #include "Checked_Number.defs.hh"
00017
00018 #if defined(PPL_CHECKED_INTEGERS) || defined(PPL_NATIVE_INTEGERS)
00019
00020 namespace Parma_Polyhedra_Library {
00021
00023
00024 struct Bounded_Integer_Coefficient_Policy {
00026 const_bool_nodef(check_overflow, true);
00027
00029 const_bool_nodef(check_inf_add_inf, false);
00030
00032 const_bool_nodef(check_inf_sub_inf, false);
00033
00035 const_bool_nodef(check_inf_mul_zero, false);
00036
00038 const_bool_nodef(check_div_zero, false);
00039
00041 const_bool_nodef(check_inf_div_inf, false);
00042
00044 const_bool_nodef(check_inf_mod, false);
00045
00047 const_bool_nodef(check_sqrt_neg, false);
00048
00050 const_bool_nodef(has_nan, false);
00051
00053 const_bool_nodef(has_infinity, false);
00054
00059 const_bool_nodef(convertible, true);
00060
00062 const_bool_nodef(fpu_check_inexact, false);
00063
00065 const_bool_nodef(fpu_check_nan_result, true);
00066
00071 static const Rounding_Dir ROUND_DEFAULT_CONSTRUCTOR = ROUND_NATIVE;
00072
00077 static const Rounding_Dir ROUND_DEFAULT_OPERATOR = ROUND_NATIVE;
00078
00083 static const Rounding_Dir ROUND_DEFAULT_INPUT = ROUND_NATIVE;
00084
00089 static const Rounding_Dir ROUND_DEFAULT_OUTPUT = ROUND_NATIVE;
00090
00095 static const Rounding_Dir ROUND_DEFAULT_FUNCTION = ROUND_NATIVE;
00096
00101 static void handle_result(Result r);
00102 };
00103
00104 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00105
00106
00107 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00108 template <typename Policy>
00109 struct Coefficient_traits_template<Checked_Number<int8_t, Policy> > {
00111 typedef Checked_Number<int8_t, Policy> const_reference;
00112 };
00113
00114 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00115
00116
00117 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00118 template <typename Policy>
00119 struct Coefficient_traits_template<Checked_Number<int16_t, Policy> > {
00121 typedef Checked_Number<int16_t, Policy> const_reference;
00122 };
00123
00124 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00125
00126
00127 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00128 template <typename Policy>
00129 struct Coefficient_traits_template<Checked_Number<int32_t, Policy> > {
00131 typedef Checked_Number<int32_t, Policy> const_reference;
00132 };
00133
00134 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00135
00136
00137 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00138 template <typename Policy>
00139 struct Coefficient_traits_template<Checked_Number<int64_t, Policy> > {
00141 typedef const Checked_Number<int64_t, Policy>& const_reference;
00142 };
00143
00144 }
00145
00146 #endif // defined(PPL_CHECKED_INTEGERS) || defined(PPL_NATIVE_INTEGERS)
00147
00148 #ifdef PPL_GMP_INTEGERS
00149 #include "GMP_Integer.types.hh"
00150 #endif
00151
00152 namespace Parma_Polyhedra_Library {
00153
00155
00172 typedef PPL_COEFFICIENT_TYPE Coefficient;
00173
00174 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00175
00176
00177 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00178 typedef Coefficient_traits_template<Coefficient> Coefficient_traits;
00179
00180 }
00181
00182 #endif // !defined(PPL_Coefficient_types_hh)