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 dd654512eaaf6d7aedfd2f6b6e147b047d594ea2
parent 3082b352ba7c3a6ce03bf9979092e5f26946dcac
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Wed,  9 Nov 2016 09:46:58 +0300

Rename expression to expression_base

Diffstat:
Minclude/kfr/base/basic_expressions.hpp | 40++++++++++++++++++++--------------------
Minclude/kfr/base/expression.hpp | 12++++++------
Minclude/kfr/dft/convolution.hpp | 1-
Minclude/kfr/dsp/biquad.hpp | 8++++----
Minclude/kfr/dsp/delay.hpp | 8++++----
Minclude/kfr/dsp/fir.hpp | 11+++++++----
Minclude/kfr/dsp/sample_rate_conversion.hpp | 24++++++++++++------------
7 files changed, 53 insertions(+), 51 deletions(-)

diff --git a/include/kfr/base/basic_expressions.hpp b/include/kfr/base/basic_expressions.hpp @@ -36,10 +36,10 @@ namespace internal { template <typename To, typename E> -struct expression_convert : expression<E> +struct expression_convert : expression_base<E> { using value_type = To; - CMT_INLINE expression_convert(E&& expr) noexcept : expression<E>(std::forward<E>(expr)) {} + CMT_INLINE expression_convert(E&& expr) noexcept : expression_base<E>(std::forward<E>(expr)) {} template <size_t N> CMT_INLINE vec<To, N> operator()(cinput_t input, size_t index, vec_t<To, N>) const @@ -191,12 +191,12 @@ namespace internal { template <typename E1> -struct expression_slice : expression<E1> +struct expression_slice : expression_base<E1> { using value_type = value_type_of<E1>; using T = value_type; expression_slice(E1&& e1, size_t start, size_t size) - : expression<E1>(std::forward<E1>(e1)), start(start), + : expression_base<E1>(std::forward<E1>(e1)), start(start), new_size(size_min(size, size_sub(std::get<0>(this->args).size(), start))) { } @@ -211,11 +211,11 @@ struct expression_slice : expression<E1> }; template <typename E1> -struct expression_reverse : expression<E1> +struct expression_reverse : expression_base<E1> { using value_type = value_type_of<E1>; using T = value_type; - expression_reverse(E1&& e1) : expression<E1>(std::forward<E1>(e1)), expr_size(e1.size()) {} + expression_reverse(E1&& e1) : expression_base<E1>(std::forward<E1>(e1)), expr_size(e1.size()) {} template <size_t N> CMT_INLINE vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N> y) const { @@ -287,10 +287,10 @@ struct expression_linspace<T, true> : input_expression }; template <typename... E> -struct expression_sequence : expression<E...> +struct expression_sequence : expression_base<E...> { public: - using base = expression<E...>; + using base = expression_base<E...>; using value_type = common_type<value_type_of<E>...>; using T = value_type; @@ -338,12 +338,12 @@ protected: }; template <typename Fn, typename E> -struct expression_adjacent : expression<E> +struct expression_adjacent : expression_base<E> { using value_type = value_type_of<E>; using T = value_type; - expression_adjacent(Fn&& fn, E&& e) : expression<E>(std::forward<E>(e)), fn(std::forward<Fn>(fn)) {} + expression_adjacent(Fn&& fn, E&& e) : expression_base<E>(std::forward<E>(e)), fn(std::forward<Fn>(fn)) {} template <size_t N> vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N>) const @@ -413,14 +413,14 @@ CMT_INLINE internal::expression_adjacent<Fn, E1> adjacent(Fn&& fn, E1&& e1) namespace internal { template <typename E> -struct expression_padded : expression<E> +struct expression_padded : expression_base<E> { using value_type = value_type_of<E>; CMT_INLINE constexpr static size_t size() noexcept { return infinite_size; } expression_padded(value_type fill_value, E&& e) - : expression<E>(std::forward<E>(e)), fill_value(fill_value), input_size(e.size()) + : expression_base<E>(std::forward<E>(e)), fill_value(fill_value), input_size(e.size()) { } @@ -484,15 +484,15 @@ private: }; template <typename... E> -struct expression_pack : expression<E...> +struct expression_pack : expression_base<E...> { constexpr static size_t count = sizeof...(E); - expression_pack(E&&... e) : expression<E...>(std::forward<E>(e)...) {} + expression_pack(E&&... e) : expression_base<E...>(std::forward<E>(e)...) {} using value_type = vec<common_type<value_type_of<E>...>, count>; using T = value_type; - using expression<E...>::size; + using expression_base<E...>::size; template <size_t N> CMT_INLINE vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N> y) const @@ -502,17 +502,17 @@ struct expression_pack : expression<E...> }; template <typename... E> -struct expression_unpack : private expression<E...>, output_expression +struct expression_unpack : private expression_base<E...>, output_expression { - using expression<E...>::begin_block; - using expression<E...>::end_block; + using expression_base<E...>::begin_block; + using expression_base<E...>::end_block; using output_expression::begin_block; using output_expression::end_block; constexpr static size_t count = sizeof...(E); - expression_unpack(E&&... e) : expression<E...>(std::forward<E>(e)...) {} + expression_unpack(E&&... e) : expression_base<E...>(std::forward<E>(e)...) {} - using expression<E...>::size; + using expression_base<E...>::size; template <typename U, size_t N> CMT_INLINE void operator()(coutput_t coutput, size_t index, const vec<vec<U, count>, N>& x) diff --git a/include/kfr/base/expression.hpp b/include/kfr/base/expression.hpp @@ -256,13 +256,13 @@ namespace internal { template <typename... Args> -struct expression : input_expression +struct expression_base : input_expression { CMT_INLINE constexpr size_t size() const noexcept { return size_impl(indicesfor_t<Args...>()); } constexpr static size_t count = sizeof...(Args); - expression() = delete; - constexpr expression(Args&&... args) noexcept : args(std::forward<Args>(args)...) {} + expression_base() = delete; + constexpr expression_base(Args&&... args) noexcept : args(std::forward<Args>(args)...) {} CMT_INLINE void begin_block(cinput_t cinput, size_t size) const { @@ -364,19 +364,19 @@ template <typename T> using arg = typename internal::arg_impl<decay<T>, T>::type; template <typename Fn, typename... Args> -struct expression_function : expression<arg<Args>...> +struct expression_function : expression_base<arg<Args>...> { using value_type = subtype<decltype(std::declval<Fn>()(std::declval<vec<value_type_of<arg<Args>>, 1>>()...))>; using T = value_type; expression_function(Fn&& fn, arg<Args>&&... args) noexcept - : expression<arg<Args>...>(std::forward<arg<Args>>(args)...), + : expression_base<arg<Args>...>(std::forward<arg<Args>>(args)...), fn(std::forward<Fn>(fn)) { } expression_function(const Fn& fn, arg<Args>&&... args) noexcept - : expression<arg<Args>...>(std::forward<arg<Args>>(args)...), + : expression_base<arg<Args>...>(std::forward<arg<Args>>(args)...), fn(fn) { } diff --git a/include/kfr/dft/convolution.hpp b/include/kfr/dft/convolution.hpp @@ -86,6 +86,5 @@ CMT_FUNC univector<T> autocorrelate(const univector<T, Tag1>& src) result = result.slice(result.size() / 2); return result; } - } CMT_PRAGMA_GNU(GCC diagnostic pop) diff --git a/include/kfr/dsp/biquad.hpp b/include/kfr/dsp/biquad.hpp @@ -137,12 +137,12 @@ struct biquad_block }; template <size_t filters, typename T, typename E1, KFR_ARCH_DEP> -struct expression_biquads : public expression<E1> +struct expression_biquads : public expression_base<E1> { using value_type = T; expression_biquads(const biquad_block<T, filters>& bq, E1&& e1) - : expression<E1>(std::forward<E1>(e1)), bq(bq) + : expression_base<E1>(std::forward<E1>(e1)), bq(bq) { } template <size_t width> @@ -173,12 +173,12 @@ struct expression_biquads : public expression<E1> }; template <size_t filters, typename T, typename E1, KFR_ARCH_DEP> -struct expression_biquads_zl : expression<E1> +struct expression_biquads_zl : expression_base<E1> { using value_type = T; expression_biquads_zl(const biquad_block<T, filters>& bq, E1&& e1) - : expression<E1>(std::forward<E1>(e1)), bq(bq), block_end(0) + : expression_base<E1>(std::forward<E1>(e1)), bq(bq), block_end(0) { } diff --git a/include/kfr/dsp/delay.hpp b/include/kfr/dsp/delay.hpp @@ -34,11 +34,11 @@ namespace kfr namespace internal { template <size_t delay, typename E> -struct expression_delay : expression<E> +struct expression_delay : expression_base<E> { using value_type = value_type_of<E>; using T = value_type; - using expression<E>::expression; + using expression_base<E>::expression_base; template <size_t N, KFR_ENABLE_IF(N <= delay)> vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N>) const @@ -75,11 +75,11 @@ struct expression_delay : expression<E> }; template <typename E> -struct expression_delay<1, E> : expression<E> +struct expression_delay<1, E> : expression_base<E> { using value_type = value_type_of<E>; using T = value_type; - using expression<E>::expression; + using expression_base<E>::expression_base; template <size_t N> vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N>) const diff --git a/include/kfr/dsp/fir.hpp b/include/kfr/dsp/fir.hpp @@ -91,12 +91,12 @@ struct state_holder<T, true> }; template <size_t tapcount, typename T, typename E1, bool stateless = false, KFR_ARCH_DEP> -struct expression_short_fir : expression<E1> +struct expression_short_fir : expression_base<E1> { using value_type = T; expression_short_fir(E1&& e1, const short_fir_state<tapcount, T>& state) - : expression<E1>(std::forward<E1>(e1)), state(state) + : expression_base<E1>(std::forward<E1>(e1)), state(state) { } template <size_t N> @@ -116,10 +116,13 @@ struct expression_short_fir : expression<E1> }; template <typename T, typename E1, bool stateless = false, KFR_ARCH_DEP> -struct expression_fir : expression<E1> +struct expression_fir : expression_base<E1> { using value_type = T; - expression_fir(E1&& e1, const fir_state<T>& state) : expression<E1>(std::forward<E1>(e1)), state(state) {} + expression_fir(E1&& e1, const fir_state<T>& state) + : expression_base<E1>(std::forward<E1>(e1)), state(state) + { + } template <size_t N> CMT_INLINE vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N> x) const diff --git a/include/kfr/dsp/sample_rate_conversion.hpp b/include/kfr/dsp/sample_rate_conversion.hpp @@ -208,13 +208,13 @@ template <size_t factor, size_t offset, typename E> struct expression_downsample; template <typename E> -struct expression_upsample<2, E> : expression<E> +struct expression_upsample<2, E> : expression_base<E> { - using expression<E>::expression; + using expression_base<E>::expression_base; using value_type = value_type_of<E>; using T = value_type; - size_t size() const noexcept { return expression<E>::size() * 2; } + size_t size() const noexcept { return expression_base<E>::size() * 2; } template <size_t N> vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N>) const @@ -232,13 +232,13 @@ struct expression_upsample<2, E> : expression<E> }; template <typename E> -struct expression_upsample<4, E> : expression<E> +struct expression_upsample<4, E> : expression_base<E> { - using expression<E>::expression; + using expression_base<E>::expression_base; using value_type = value_type_of<E>; using T = value_type; - size_t size() const noexcept { return expression<E>::size() * 4; } + size_t size() const noexcept { return expression_base<E>::size() * 4; } template <size_t N> vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N>) const @@ -269,13 +269,13 @@ struct expression_upsample<4, E> : expression<E> }; template <typename E, size_t offset> -struct expression_downsample<2, offset, E> : expression<E> +struct expression_downsample<2, offset, E> : expression_base<E> { - using expression<E>::expression; + using expression_base<E>::expression_base; using value_type = value_type_of<E>; using T = value_type; - size_t size() const noexcept { return expression<E>::size() / 2; } + size_t size() const noexcept { return expression_base<E>::size() / 2; } template <size_t N> vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N>) const @@ -286,13 +286,13 @@ struct expression_downsample<2, offset, E> : expression<E> }; template <typename E, size_t offset> -struct expression_downsample<4, offset, E> : expression<E> +struct expression_downsample<4, offset, E> : expression_base<E> { - using expression<E>::expression; + using expression_base<E>::expression_base; using value_type = value_type_of<E>; using T = value_type; - size_t size() const noexcept { return expression<E>::size() / 4; } + size_t size() const noexcept { return expression_base<E>::size() / 4; } template <size_t N> vec<T, N> operator()(cinput_t cinput, size_t index, vec_t<T, N>) const