summaryrefslogtreecommitdiffstats
path: root/utils.hpp
diff options
context:
space:
mode:
authorJames Feist <james.feist@linux.intel.com>2018-07-31 11:44:09 -0700
committerTom Joseph <tomjoseph@in.ibm.com>2018-08-09 19:37:07 +0000
commit1e12112baf56f9a8ec6dbf7fb409c84f35fff1e8 (patch)
tree6574eaa7230f377cfbc075d9cbaefc6e4341bc56 /utils.hpp
parentbed2699f47c34aa547f85e8d66d50df21be12a0a (diff)
downloadphosphor-host-ipmid-1e12112baf56f9a8ec6dbf7fb409c84f35fff1e8.tar.gz
phosphor-host-ipmid-1e12112baf56f9a8ec6dbf7fb409c84f35fff1e8.zip
Use visitor instead of pulling values directly
Sensor thresholds pull out an int64_t and immediately assign it to a double. Use a visitor instead to avoid the intermediate and add flexibility / saftey to type readings. Tested-By: Verifed sensor list still worked. Change-Id: If49bf54ec1c0636b3549d433b86ecdbd1ea99b0d Signed-off-by: James Feist <james.feist@linux.intel.com>
Diffstat (limited to 'utils.hpp')
-rw-r--r--utils.hpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/utils.hpp b/utils.hpp
index 75a3252..535ea66 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -208,6 +208,27 @@ ObjectTree getAllAncestors(sdbusplus::bus::bus& bus,
const std::string& path,
InterfaceList&& interfaces);
+/** @struct VariantToDoubleVisitor
+ * @brief Visitor to convert variants to doubles
+ * @details Performs a static cast on the underlying type
+ */
+struct VariantToDoubleVisitor
+{
+ template <typename T>
+ std::enable_if_t<std::is_arithmetic<T>::value, double>
+ operator()(const T &t) const
+ {
+ return static_cast<double>(t);
+ }
+
+ template <typename T>
+ std::enable_if_t<!std::is_arithmetic<T>::value, double>
+ operator()(const T &t) const
+ {
+ throw std::invalid_argument("Cannot translate type to double");
+ }
+};
+
namespace method_no_args
{
OpenPOWER on IntegriCloud