
Module: ppl/ppl Branch: ppl-0_11-branch Commit: f3b49975a7f68d7935965b6e0e35b1a57e790d5a URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=f3b49975a7f68...
Author: Roberto Bagnara bagnara@cs.unipr.it Date: Thu Feb 3 17:11:20 2011 +0100
Added missing specializations for plain char.
---
src/Checked_Number.defs.hh | 6 ++++++ src/Checked_Number.inlines.hh | 1 + src/Interval.inlines.hh | 5 +++++ src/checked_float.inlines.hh | 3 +++ src/checked_mpq.inlines.hh | 2 ++ src/checked_mpz.inlines.hh | 2 ++ src/checked_numeric_limits.hh | 2 ++ src/meta_programming.hh | 1 + 8 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/src/Checked_Number.defs.hh b/src/Checked_Number.defs.hh index 13ea995..767ba41 100644 --- a/src/Checked_Number.defs.hh +++ b/src/Checked_Number.defs.hh @@ -176,6 +176,9 @@ public: template <typename From, typename From_Policy> Checked_Number(const Checked_Number<From, From_Policy>& y, Rounding_Dir dir);
+ //! Direct initialization from a plain char and rounding mode. + Checked_Number(char y, Rounding_Dir dir); + //! Direct initialization from a signed char and rounding mode. Checked_Number(signed char y, Rounding_Dir dir);
@@ -238,6 +241,9 @@ public: template <typename From, typename From_Policy> explicit Checked_Number(const Checked_Number<From, From_Policy>& y);
+ //! Direct initialization from a plain char, default rounding mode. + Checked_Number(char y); + //! Direct initialization from a signed char, default rounding mode. Checked_Number(signed char y);
diff --git a/src/Checked_Number.inlines.hh b/src/Checked_Number.inlines.hh index b9ee619..f27559b 100644 --- a/src/Checked_Number.inlines.hh +++ b/src/Checked_Number.inlines.hh @@ -134,6 +134,7 @@ Checked_Number<T, Policy>::Checked_Number(const type x) { \ #define PPL_COND_(if, ...) PPL_COND_##if(__VA_ARGS__) #define PPL_COND(if, ...) PPL_COND_(if, __VA_ARGS__)
+DEF_CTOR(char) DEF_CTOR(signed char) DEF_CTOR(signed short) DEF_CTOR(signed int) diff --git a/src/Interval.inlines.hh b/src/Interval.inlines.hh index f91aefe..a6936a1 100644 --- a/src/Interval.inlines.hh +++ b/src/Interval.inlines.hh @@ -1139,6 +1139,11 @@ struct Select_Temp_Boundary_Type<float> { };
template <> +struct Select_Temp_Boundary_Type<char> { + typedef signed long long type; +}; + +template <> struct Select_Temp_Boundary_Type<signed char> { typedef signed long long type; }; diff --git a/src/checked_float.inlines.hh b/src/checked_float.inlines.hh index f6077c1..24a795e 100644 --- a/src/checked_float.inlines.hh +++ b/src/checked_float.inlines.hh @@ -1030,6 +1030,7 @@ PPL_SPECIALIZE_IS_NAN(is_nan_float, float) PPL_SPECIALIZE_IS_MINF(is_minf_float, float) PPL_SPECIALIZE_IS_PINF(is_pinf_float, float) PPL_SPECIALIZE_ASSIGN_SPECIAL(assign_special_float, float) +PPL_SPECIALIZE_ASSIGN(assign_float_int, float, char) PPL_SPECIALIZE_ASSIGN(assign_float_int, float, signed char) PPL_SPECIALIZE_ASSIGN(assign_float_int, float, signed short) PPL_SPECIALIZE_ASSIGN(assign_float_int, float, signed int) @@ -1078,6 +1079,7 @@ PPL_SPECIALIZE_IS_NAN(is_nan_float, double) PPL_SPECIALIZE_IS_MINF(is_minf_float, double) PPL_SPECIALIZE_IS_PINF(is_pinf_float, double) PPL_SPECIALIZE_ASSIGN_SPECIAL(assign_special_float, double) +PPL_SPECIALIZE_ASSIGN(assign_float_int, double, char) PPL_SPECIALIZE_ASSIGN(assign_float_int, double, signed char) PPL_SPECIALIZE_ASSIGN(assign_float_int, double, signed short) PPL_SPECIALIZE_ASSIGN(assign_float_int, double, signed int) @@ -1126,6 +1128,7 @@ PPL_SPECIALIZE_IS_NAN(is_nan_float, long double) PPL_SPECIALIZE_IS_MINF(is_minf_float, long double) PPL_SPECIALIZE_IS_PINF(is_pinf_float, long double) PPL_SPECIALIZE_ASSIGN_SPECIAL(assign_special_float, long double) +PPL_SPECIALIZE_ASSIGN(assign_float_int, long double, char) PPL_SPECIALIZE_ASSIGN(assign_float_int, long double, signed char) PPL_SPECIALIZE_ASSIGN(assign_float_int, long double, signed short) PPL_SPECIALIZE_ASSIGN(assign_float_int, long double, signed int) diff --git a/src/checked_mpq.inlines.hh b/src/checked_mpq.inlines.hh index 22458b0..acf5962 100644 --- a/src/checked_mpq.inlines.hh +++ b/src/checked_mpq.inlines.hh @@ -141,6 +141,7 @@ construct_mpq_base(mpq_class& to, const From& from, Rounding_Dir) { }
PPL_SPECIALIZE_CONSTRUCT(construct_mpq_base, mpq_class, mpz_class) +PPL_SPECIALIZE_CONSTRUCT(construct_mpq_base, mpq_class, char) PPL_SPECIALIZE_CONSTRUCT(construct_mpq_base, mpq_class, signed char) PPL_SPECIALIZE_CONSTRUCT(construct_mpq_base, mpq_class, signed short) PPL_SPECIALIZE_CONSTRUCT(construct_mpq_base, mpq_class, signed int) @@ -168,6 +169,7 @@ PPL_SPECIALIZE_CONSTRUCT(construct_mpq_float, mpq_class, double)
PPL_SPECIALIZE_ASSIGN(assign_exact, mpq_class, mpq_class) PPL_SPECIALIZE_ASSIGN(assign_exact, mpq_class, mpz_class) +PPL_SPECIALIZE_ASSIGN(assign_exact, mpq_class, char) PPL_SPECIALIZE_ASSIGN(assign_exact, mpq_class, signed char) PPL_SPECIALIZE_ASSIGN(assign_exact, mpq_class, signed short) PPL_SPECIALIZE_ASSIGN(assign_exact, mpq_class, signed int) diff --git a/src/checked_mpz.inlines.hh b/src/checked_mpz.inlines.hh index 5dfeb8d..63a935f 100644 --- a/src/checked_mpz.inlines.hh +++ b/src/checked_mpz.inlines.hh @@ -179,6 +179,7 @@ construct_mpz_base(mpz_class& to, const From from, Rounding_Dir) { return V_EQ; }
+PPL_SPECIALIZE_CONSTRUCT(construct_mpz_base, mpz_class, char) PPL_SPECIALIZE_CONSTRUCT(construct_mpz_base, mpz_class, signed char) PPL_SPECIALIZE_CONSTRUCT(construct_mpz_base, mpz_class, signed short) PPL_SPECIALIZE_CONSTRUCT(construct_mpz_base, mpz_class, signed int) @@ -215,6 +216,7 @@ PPL_SPECIALIZE_CONSTRUCT(construct_mpz_float, mpz_class, float) PPL_SPECIALIZE_CONSTRUCT(construct_mpz_float, mpz_class, double)
PPL_SPECIALIZE_ASSIGN(assign_exact, mpz_class, mpz_class) +PPL_SPECIALIZE_ASSIGN(assign_exact, mpz_class, char) PPL_SPECIALIZE_ASSIGN(assign_exact, mpz_class, signed char) PPL_SPECIALIZE_ASSIGN(assign_exact, mpz_class, signed short) PPL_SPECIALIZE_ASSIGN(assign_exact, mpz_class, signed int) diff --git a/src/checked_numeric_limits.hh b/src/checked_numeric_limits.hh index 2d4ffe1..31413d4 100644 --- a/src/checked_numeric_limits.hh +++ b/src/checked_numeric_limits.hh @@ -71,6 +71,8 @@ template <typename Policy> \ } \ };
+PPL_SPECIALIZE_LIMITS_INT(char) + PPL_SPECIALIZE_LIMITS_INT(signed char) PPL_SPECIALIZE_LIMITS_INT(signed short) PPL_SPECIALIZE_LIMITS_INT(signed int) diff --git a/src/meta_programming.hh b/src/meta_programming.hh index d67f245..25f4648 100644 --- a/src/meta_programming.hh +++ b/src/meta_programming.hh @@ -310,6 +310,7 @@ template <typename T> struct Is_Native : public False { };
+template <> struct Is_Native<char> : public True { }; template <> struct Is_Native<signed char> : public True { }; template <> struct Is_Native<signed short> : public True { }; template <> struct Is_Native<signed int> : public True { };