[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