kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

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:
Minclude/kfr/base/operators.hpp | 12++++++++++++
Mtests/expression_test.cpp | 11+++++++++++
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());