[PPL-devel] [GIT] ppl/ppl(ppl-0_11-branch): Added missing specializations for plain char.

Roberto Bagnara bagnara at cs.unipr.it
Thu Feb 3 17:12:19 CET 2011


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=f3b49975a7f68d7935965b6e0e35b1a57e790d5a

Author: Roberto Bagnara <bagnara at 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 { };




More information about the PPL-devel mailing list