commit 36d861a702eaf2701a2b790075e1d88f6259886f
parent 92037e8372c63cdb28182e2296b12f6c7ee88699
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date: Thu, 8 Sep 2016 19:18:07 +0300
Expressions for mix/mixs
Diffstat:
2 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/include/kfr/base/operators.hpp b/include/kfr/base/operators.hpp
@@ -454,6 +454,18 @@ KFR_INTRIN constexpr common_type<T1, T2, T3> mixs(T1 c, T2 x, T3 y)
KFR_FN(mix)
KFR_FN(mixs)
+template <typename E1, typename E2, typename E3, KFR_ENABLE_IF(is_input_expressions<E1, E2, E3>::value)>
+CMT_INLINE internal::expression_function<fn::mix, E1, E2, E3> mix(E1&& c, E2&& x, E3&& y)
+{
+ return { fn::mix(), std::forward<E1>(c), std::forward<E2>(x), std::forward<E3>(y) };
+}
+
+template <typename E1, typename E2, typename E3, KFR_ENABLE_IF(is_input_expressions<E1, E2, E3>::value)>
+CMT_INLINE internal::expression_function<fn::mixs, E1, E2, E3> mixs(E1&& c, E2&& x, E3&& y)
+{
+ return { fn::mixs(), std::forward<E1>(c), std::forward<E2>(x), std::forward<E3>(y) };
+}
+
namespace internal
{
diff --git a/tests/expression_test.cpp b/tests/expression_test.cpp
@@ -99,6 +99,17 @@ TEST(reverse)
CHECK(a[20] == 0);
}
+TEST(mix)
+{
+ univector<float, 21> a = mix(sequence(0, 0.5f, 1, 0.5f), counter(), counter() * 10);
+ CHECK(a[0] == 0);
+ CHECK(a[1] == 5.5);
+ CHECK(a[2] == 20);
+ CHECK(a[3] == 16.5);
+ CHECK(a[4] == 4);
+ CHECK(a[20] == 20);
+}
+
int main(int argc, char** argv)
{
println(library_version());