From 119533e5baa4937743aaa470dee301bf6fdfcf48 Mon Sep 17 00:00:00 2001 From: Helge Norberg Date: Tue, 31 Jan 2017 13:50:41 +0100 Subject: [PATCH] [scene_producer] Added abs() function to expression language --- CHANGELOG | 2 ++ core/producer/scene/expression_parser.cpp | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 41d42c408..e88914889 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -56,6 +56,8 @@ Producers o Layer producer: + Fixed serious bug where a circular reference of layer producers caused a stack overflow and server crash. + o Scene producer: + + Added abs() function to expression language. Mixer ----- diff --git a/core/producer/scene/expression_parser.cpp b/core/producer/scene/expression_parser.cpp index 8d55ef767..b9bd66e8c 100644 --- a/core/producer/scene/expression_parser.cpp +++ b/core/producer/scene/expression_parser.cpp @@ -147,6 +147,17 @@ boost::any create_cos_function(const std::vector& params, const vari return angle.transformed([](double a) { return std::cos(a); }); } +boost::any create_abs_function(const std::vector& params, const variable_repository& var_repo) +{ + if (params.size() != 1) + CASPAR_THROW_EXCEPTION(user_error() + << msg_info(L"abs() function requires one parameters: value")); + + auto val = require(params.at(0)); + + return val.transformed([](double v) { return std::abs(v); }); +} + boost::any parse_function( const std::wstring& function_name, std::wstring::const_iterator& cursor, @@ -157,7 +168,8 @@ boost::any parse_function( { {L"animate", create_animate_function }, {L"sin", create_sin_function }, - {L"cos", create_cos_function } + {L"cos", create_cos_function }, + {L"abs", create_abs_function } }; auto function = FUNCTIONS.find(function_name); @@ -642,7 +654,7 @@ boost::any ternary( auto cond = require(condition); auto t = as_binding(true_value); auto f = as_binding(false_value); - + // double if (is>(t) && is>(f)) return ternary(cond, as>(t), as>(f)); -- 2.39.2