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 19a9f3f485126d8964f992ad2eb4fe0feeaabce9
parent 54d9b5bc9c8f7cefe0641d442a60aefeb8c62621
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Fri, 26 Aug 2016 22:59:54 +0300

Add virtual base classes for expressions

Diffstat:
Minclude/kfr/base/expression.hpp | 29+++++++++++++++++++++++++++++
1 file changed, 29 insertions(+), 0 deletions(-)

diff --git a/include/kfr/base/expression.hpp b/include/kfr/base/expression.hpp @@ -325,5 +325,34 @@ inline internal::expressoin_sized<T, E1> typed(E1&& e1, size_t size) { return internal::expressoin_sized<T, E1>(std::forward<E1>(e1), size); } + +template <typename T> +struct input_expression_base : input_expression +{ + virtual ~input_expression_base() {} + virtual T input(size_t index) const = 0; + template <typename U, size_t N> + vec<U, N> operator()(cinput_t, size_t index, vec_t<U, N>) const + { + vec<U, N> out; + for (size_t i = 0; i < N; i++) + out(i) = static_cast<U>(input(index + i)); + return out; + } +}; + +template <typename T> +struct output_expression_base : output_expression +{ + virtual ~output_expression_base() {} + virtual void output(size_t index, const T& value) = 0; + + template <typename U, size_t N> + void operator()(coutput_t, size_t index, const vec<U, N>& value) + { + for (size_t i = 0; i < N; i++) + output(index + i, static_cast<T>(value[i])); + } +}; } #pragma clang diagnostic pop