From b4c74efde0c4389618453b957e934ab631c82320 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 16 Jan 2015 10:35:20 +0100 Subject: [PATCH] Implement some more utility functions refs #8169 --- lib/base/math-script.cpp | 24 ++++++++++++++++++++++++ lib/base/value-operators.cpp | 8 ++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib/base/math-script.cpp b/lib/base/math-script.cpp index a4deffaec..7f2023f7b 100644 --- a/lib/base/math-script.cpp +++ b/lib/base/math-script.cpp @@ -23,6 +23,7 @@ #include "base/scriptframe.hpp" #include "base/initialize.hpp" #include +#include #include #include @@ -138,6 +139,26 @@ static double MathTan(double x) return std::tan(x); } +static bool MathIsnan(double x) +{ + return boost::math::isnan(x); +} + +static bool MathIsinf(double x) +{ + return boost::math::isinf(x); +} + +static double MathSign(double x) +{ + if (x > 0) + return 1; + else if (x < 0) + return -1; + else + return 0; +} + static void InitializeMathObj(void) { Dictionary::Ptr mathObj = new Dictionary(); @@ -171,6 +192,9 @@ static void InitializeMathObj(void) mathObj->Set("sin", new ScriptFunction(WrapScriptFunction(MathSin))); mathObj->Set("sqrt", new ScriptFunction(WrapScriptFunction(MathSqrt))); mathObj->Set("tan", new ScriptFunction(WrapScriptFunction(MathTan))); + mathObj->Set("isnan", new ScriptFunction(WrapScriptFunction(MathIsnan))); + mathObj->Set("isinf", new ScriptFunction(WrapScriptFunction(MathIsinf))); + mathObj->Set("sign", new ScriptFunction(WrapScriptFunction(MathSign))); ScriptGlobal::Set("Math", mathObj); } diff --git a/lib/base/value-operators.cpp b/lib/base/value-operators.cpp index 51e998eb2..562882339 100644 --- a/lib/base/value-operators.cpp +++ b/lib/base/value-operators.cpp @@ -554,7 +554,7 @@ bool icinga::operator<(const Value& lhs, const Value& rhs) if (lhs.IsString() && rhs.IsString()) return static_cast(lhs) < static_cast(rhs); else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) - return static_cast(lhs) < static_cast(rhs); + return static_cast(lhs) < static_cast(rhs); else if (lhs.GetTypeName() != rhs.GetTypeName()) return lhs.GetTypeName() < rhs.GetTypeName(); else @@ -586,7 +586,7 @@ bool icinga::operator>(const Value& lhs, const Value& rhs) if (lhs.IsString() && rhs.IsString()) return static_cast(lhs) > static_cast(rhs); else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) - return static_cast(lhs) > static_cast(rhs); + return static_cast(lhs) > static_cast(rhs); else if (lhs.GetTypeName() != rhs.GetTypeName()) return lhs.GetTypeName() > rhs.GetTypeName(); else @@ -618,7 +618,7 @@ bool icinga::operator<=(const Value& lhs, const Value& rhs) if (lhs.IsString() && rhs.IsString()) return static_cast(lhs) <= static_cast(rhs); else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) - return static_cast(lhs) <= static_cast(rhs); + return static_cast(lhs) <= static_cast(rhs); else if (lhs.GetTypeName() != rhs.GetTypeName()) return lhs.GetTypeName() <= rhs.GetTypeName(); else @@ -650,7 +650,7 @@ bool icinga::operator>=(const Value& lhs, const Value& rhs) if (lhs.IsString() && rhs.IsString()) return static_cast(lhs) >= static_cast(rhs); else if ((lhs.IsNumber() || lhs.IsEmpty()) && (rhs.IsNumber() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) - return static_cast(lhs) >= static_cast(rhs); + return static_cast(lhs) >= static_cast(rhs); else if (lhs.GetTypeName() != rhs.GetTypeName()) return lhs.GetTypeName() >= rhs.GetTypeName(); else