[GIT] ppl/ppl(master): Let bitwise operators be applied to unsigned integer types.

Module: ppl/ppl Branch: master Commit: 803576355bab1ffbad948d7d5a75be21121765dc URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=803576355bab1...
Author: Enea Zaffanella zaffanella@cs.unipr.it Date: Mon Feb 20 16:55:20 2012 +0100
Let bitwise operators be applied to unsigned integer types. Detected by ECLAIR service utypflag.
---
src/Rounding_Dir.defs.hh | 15 +++++++++------ src/Rounding_Dir.inlines.hh | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 19 deletions(-)
diff --git a/src/Rounding_Dir.defs.hh b/src/Rounding_Dir.defs.hh index e1d9a1d..15c7d63 100644 --- a/src/Rounding_Dir.defs.hh +++ b/src/Rounding_Dir.defs.hh @@ -35,17 +35,17 @@ enum Rounding_Dir { /*! \hideinitializer Round toward \f$-\infty\f$. */ - ROUND_DOWN = 0, + ROUND_DOWN = 0U,
/*! \hideinitializer Round toward \f$+\infty\f$. */ - ROUND_UP = 1, + ROUND_UP = 1U,
/*! \hideinitializer Rounding is delegated to lower level. Result info is evaluated lazily. */ - ROUND_IGNORE = 6, + ROUND_IGNORE = 6U, ROUND_NATIVE = ROUND_IGNORE,
/*! \hideinitializer @@ -53,22 +53,25 @@ enum Rounding_Dir { result is exact and representable in the destination type. Result info is evaluated lazily. */ - ROUND_NOT_NEEDED = 7, + ROUND_NOT_NEEDED = 7U,
ROUND_DIRECT = ROUND_UP, ROUND_INVERSE = ROUND_DOWN,
- ROUND_DIR_MASK = 7, + ROUND_DIR_MASK = 7U,
/*! \hideinitializer The client code is willing to pay an extra price to know the exact relation between the exact result and the computed one. */ - ROUND_STRICT_RELATION = 8, + ROUND_STRICT_RELATION = 8U,
ROUND_CHECK = ROUND_DIRECT | ROUND_STRICT_RELATION };
+Rounding_Dir operator&(Rounding_Dir x, Rounding_Dir y); +Rounding_Dir operator|(Rounding_Dir x, Rounding_Dir y); + /*! \brief Returns the inverse rounding mode of \p dir, <CODE>ROUND_IGNORE</CODE> being the inverse of itself. diff --git a/src/Rounding_Dir.inlines.hh b/src/Rounding_Dir.inlines.hh index af2de1c..12b9823 100644 --- a/src/Rounding_Dir.inlines.hh +++ b/src/Rounding_Dir.inlines.hh @@ -28,53 +28,77 @@ site: http://bugseng.com/products/ppl/ . */
namespace Parma_Polyhedra_Library {
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ +inline Rounding_Dir +operator&(Rounding_Dir x, Rounding_Dir y) { + unsigned res = static_cast<unsigned>(x) & static_cast<unsigned>(y); + return static_cast<Rounding_Dir>(res); +} + +/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ +inline Rounding_Dir +operator|(Rounding_Dir x, Rounding_Dir y) { + unsigned res = static_cast<unsigned>(x) | static_cast<unsigned>(y); + return static_cast<Rounding_Dir>(res); +} + +/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline Rounding_Dir round_dir(Rounding_Dir dir) { - return static_cast<Rounding_Dir>(dir & ROUND_DIR_MASK); + return dir & ROUND_DIR_MASK; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_down(Rounding_Dir dir) { return round_dir(dir) == ROUND_DOWN; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_up(Rounding_Dir dir) { return round_dir(dir) == ROUND_UP; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_ignore(Rounding_Dir dir) { return round_dir(dir) == ROUND_IGNORE; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_not_needed(Rounding_Dir dir) { return round_dir(dir) == ROUND_NOT_NEEDED; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_not_requested(Rounding_Dir dir) { return round_dir(dir) == ROUND_IGNORE || round_dir(dir) == ROUND_NOT_NEEDED; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_direct(Rounding_Dir dir) { return round_dir(dir) == ROUND_DIRECT; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_inverse(Rounding_Dir dir) { return round_dir(dir) == ROUND_INVERSE; }
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline bool round_strict_relation(Rounding_Dir dir) { - return (dir & ROUND_STRICT_RELATION) != 0; + return (dir & ROUND_STRICT_RELATION) == ROUND_STRICT_RELATION; }
#if PPL_CAN_CONTROL_FPU
+/*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline fpu_rounding_direction_type round_fpu_dir(Rounding_Dir dir) { switch (round_dir(dir)) { @@ -99,25 +123,17 @@ round_fpu_dir(Rounding_Dir dir) { /*! \relates Parma_Polyhedra_Library::Rounding_Dir */ inline Rounding_Dir inverse(Rounding_Dir dir) { - Rounding_Dir d = round_dir(dir); - switch (d) { + switch (round_dir(dir)) { case ROUND_UP: - d = ROUND_DOWN; - break; + return ROUND_DOWN | (dir & ROUND_STRICT_RELATION); case ROUND_DOWN: - d = ROUND_UP; - break; + return ROUND_UP | (dir & ROUND_STRICT_RELATION); case ROUND_IGNORE: return dir; default: PPL_UNREACHABLE; return dir; } - return static_cast<Rounding_Dir>((dir & ~ROUND_DIR_MASK) | d); -} - -inline Rounding_Dir operator|(Rounding_Dir x, Rounding_Dir y) { - return static_cast<Rounding_Dir>((unsigned)x | (unsigned)y); }
} // namespace Parma_Polyhedra_Library
participants (1)
-
Enea Zaffanella