From 0e39aa9488bff97cffda1d12fb18cdeb537e0c03 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Fri, 21 Apr 2017 14:45:36 +0000 Subject: [PATCH] Address PR comments --- include/util/alias.hpp | 64 ++++++++++++++++++++++++++----------- include/util/coordinate.hpp | 8 ++--- include/util/typedefs.hpp | 4 +-- src/benchmarks/alias.cpp | 2 +- 4 files changed, 52 insertions(+), 26 deletions(-) diff --git a/include/util/alias.hpp b/include/util/alias.hpp index 5ed93eef6..bc267b3cc 100644 --- a/include/util/alias.hpp +++ b/include/util/alias.hpp @@ -25,8 +25,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef ALIAS_HPP -#define ALIAS_HPP +#ifndef OSRM_UTIL_ALIAS_HPP +#define OSRM_UTIL_ALIAS_HPP #include #include @@ -42,7 +42,7 @@ inline std::ostream &operator<<(std::ostream &stream, const Alias &in template struct Alias final { using value_type = From; - static_assert(std::is_arithmetic(), ""); + static_assert(std::is_arithmetic::value, "Needs to be based on an arithmetic type"); From __value; friend std::ostream &operator<<(std::ostream &stream, const Alias &inst); @@ -61,10 +61,12 @@ template struct Alias final { return Alias{__value * static_cast(rhs_)}; } + inline Alias operator*(const double rhs_) const { return Alias{__value * rhs_}; } inline Alias operator/(const Alias rhs_) const { return Alias{__value / static_cast(rhs_)}; } + inline Alias operator/(const double rhs_) const { return Alias{__value / rhs_}; } inline Alias operator|(const Alias rhs_) const { return Alias{__value | static_cast(rhs_)}; @@ -80,15 +82,47 @@ template struct Alias final inline bool operator==(const Alias z_) const { return __value == static_cast(z_); } inline bool operator!=(const Alias z_) const { return __value != static_cast(z_); } - inline Alias operator++() { __value++; return *this; } - inline Alias operator--() { __value--; return *this; } + inline Alias operator++() + { + __value++; + return *this; + } + inline Alias operator--() + { + __value--; + return *this; + } - inline Alias operator+=(const Alias z_) { __value += static_cast(z_); return *this; } - inline Alias operator-=(const Alias z_) { __value -= static_cast(z_); return *this; } - inline Alias operator/=(const Alias z_) { __value /= static_cast(z_); return *this; } - inline Alias operator*=(const Alias z_) { __value *= static_cast(z_); return *this; } - inline Alias operator|=(const Alias z_) { __value |= static_cast(z_); return *this; } - inline Alias operator&=(const Alias z_) { __value &= static_cast(z_); return *this; } + inline Alias operator+=(const Alias z_) + { + __value += static_cast(z_); + return *this; + } + inline Alias operator-=(const Alias z_) + { + __value -= static_cast(z_); + return *this; + } + inline Alias operator/=(const Alias z_) + { + __value /= static_cast(z_); + return *this; + } + inline Alias operator*=(const Alias z_) + { + __value *= static_cast(z_); + return *this; + } + inline Alias operator|=(const Alias z_) + { + __value |= static_cast(z_); + return *this; + } + inline Alias operator&=(const Alias z_) + { + __value &= static_cast(z_); + return *this; + } }; template @@ -96,14 +130,6 @@ inline std::ostream &operator<<(std::ostream &stream, const Alias &in { return stream << inst.__value; } - -template -struct is_valid_alias - : std::integral_constant::value && std::is_standard_layout::value && - std::is_pod::value> -{ -}; } namespace std diff --git a/include/util/coordinate.hpp b/include/util/coordinate.hpp index 40aea18ff..6ef431c8f 100644 --- a/include/util/coordinate.hpp +++ b/include/util/coordinate.hpp @@ -59,10 +59,10 @@ using FixedLatitude = Alias; using FixedLongitude = Alias; using FloatLatitude = Alias; using FloatLongitude = Alias; -static_assert(osrm::is_valid_alias(), "FixedLatitude is not a valid alias"); -static_assert(osrm::is_valid_alias(), "FixedLongitude is not a valid alias"); -static_assert(osrm::is_valid_alias(), "FloatLatitude is not a valid alias"); -static_assert(osrm::is_valid_alias(), "FloatLongitude is not a valid alias"); +static_assert(std::is_pod(), "FixedLatitude is not a valid alias"); +static_assert(std::is_pod(), "FixedLongitude is not a valid alias"); +static_assert(std::is_pod(), "FloatLatitude is not a valid alias"); +static_assert(std::is_pod(), "FloatLongitude is not a valid alias"); /** * Converts a typed latitude from floating to fixed representation. diff --git a/include/util/typedefs.hpp b/include/util/typedefs.hpp index a4cea4a0a..954535ccb 100644 --- a/include/util/typedefs.hpp +++ b/include/util/typedefs.hpp @@ -47,9 +47,9 @@ struct osm_way_id }; } using OSMNodeID = osrm::Alias; -static_assert(osrm::is_valid_alias(), "OSMNodeID is not a valid alias"); +static_assert(std::is_pod(), "OSMNodeID is not a valid alias"); using OSMWayID = osrm::Alias; -static_assert(osrm::is_valid_alias(), "OSMWayID is not a valid alias"); +static_assert(std::is_pod(), "OSMWayID is not a valid alias"); static const OSMNodeID SPECIAL_OSM_NODEID = OSMNodeID{std::numeric_limits::max()}; static const OSMWayID SPECIAL_OSM_WAYID = OSMWayID{std::numeric_limits::max()}; diff --git a/src/benchmarks/alias.cpp b/src/benchmarks/alias.cpp index dcf3af330..56b63f906 100644 --- a/src/benchmarks/alias.cpp +++ b/src/benchmarks/alias.cpp @@ -4,11 +4,11 @@ #include "util/timing_util.hpp" #include +#include #include #include #include #include -#include using namespace osrm;