[PPL-devel] [GIT] ppl/ppl(master): Added missing specializations for plain char.
Roberto Bagnara
bagnara at cs.unipr.it
Mon Feb 14 11:05:10 CET 2011
Module: ppl/ppl
Branch: master
Commit: e5f893b6c2cfc12755e3849ac485addcd3d03d68
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=e5f893b6c2cfc12755e3849ac485addcd3d03d68
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