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 5cb2ef6a5ecab4767830fca3dcb584e032de4e70
parent 8799e91906ea4ea194b41633a7f8754fd8186b41
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Wed, 27 Jul 2016 15:03:04 +0300

Any argument types for all functions

Diffstat:
Minclude/kfr/base/abs.hpp | 4++--
Minclude/kfr/base/asin_acos.hpp | 4++--
Minclude/kfr/base/atan.hpp | 12++++++------
Minclude/kfr/base/complex.hpp | 73++++++++++++++++++++++++++++++++++++++++++-------------------------------
Minclude/kfr/base/function.hpp | 47+++++++++++++++++++----------------------------
Minclude/kfr/base/gamma.hpp | 8++++----
Minclude/kfr/base/hyperbolic.hpp | 24++++++++++++------------
Minclude/kfr/base/log_exp.hpp | 50+++++++++++++++++++++++++-------------------------
Minclude/kfr/base/min_max.hpp | 28++++++++++++++++------------
Minclude/kfr/base/modzerobessel.hpp | 4++--
Minclude/kfr/base/round.hpp | 18+++++++++---------
Minclude/kfr/base/saturation.hpp | 14++++++++------
Minclude/kfr/base/sin_cos.hpp | 30+++++++++++++++---------------
Minclude/kfr/base/sqrt.hpp | 4++--
Minclude/kfr/base/tan.hpp | 6+++---
Minclude/kfr/dft/ft.hpp | 6+++---
Minclude/kfr/dsp/fir_design.hpp | 8++++----
Minclude/kfr/dsp/oscillators.hpp | 28++++++++++++++--------------
Minclude/kfr/dsp/weighting.hpp | 12++++++------
Minclude/kfr/expressions/conversion.hpp | 1-
20 files changed, 194 insertions(+), 187 deletions(-)

diff --git a/include/kfr/base/abs.hpp b/include/kfr/base/abs.hpp @@ -71,8 +71,8 @@ KFR_SINTRIN vec<T, N> abs(vec<T, N> x) return select(x >= T(), x, -x); } #endif -KFR_HANDLE_SCALAR_1(abs) -KFR_FN(abs) +KFR_I_CONVERTER(abs) +KFR_I_FN(abs) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/asin_acos.hpp b/include/kfr/base/asin_acos.hpp @@ -46,8 +46,8 @@ KFR_SINTRIN vec<Tout, N> acos(vec<T, N> x) const vec<Tout, N> xx = cast<Tout>(x); return atan2(sqrt(Tout(1) - xx * xx), xx); } -KFR_HANDLE_SCALAR_1(asin) -KFR_HANDLE_SCALAR_1(acos) +KFR_I_CONVERTER(asin) +KFR_I_CONVERTER(acos) KFR_I_FN(asin) KFR_I_FN(acos) } diff --git a/include/kfr/base/atan.hpp b/include/kfr/base/atan.hpp @@ -200,12 +200,12 @@ KFR_SINTRIN common_type<T1, T2> atan2deg(const T1& y, const T2& x) return atan2(y, x) * c_radtodeg<common_type<T1, T2>>; } -KFR_HANDLE_SCALAR(atan) -KFR_HANDLE_SCALAR(atan2) -KFR_FN(atan) -KFR_FN(atandeg) -KFR_FN(atan2) -KFR_FN(atan2deg) +KFR_I_CONVERTER(atan) +KFR_I_CONVERTER(atan2) +KFR_I_FN(atan) +KFR_I_FN(atandeg) +KFR_I_FN(atan2) +KFR_I_FN(atan2deg) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/complex.hpp b/include/kfr/base/complex.hpp @@ -393,37 +393,48 @@ KFR_SINTRIN vec<complex<T>, N> csqrt(const vec<complex<T>, N>& x) return ccomp(select(dupodd(x) < T(), cdecom(cnegimag(ccomp(t))), t)); } -KFR_HANDLE_SCALAR(csin) -KFR_HANDLE_SCALAR(csinh) -KFR_HANDLE_SCALAR(ccos) -KFR_HANDLE_SCALAR(ccosh) -KFR_HANDLE_SCALAR(cabs) -KFR_HANDLE_SCALAR(carg) -KFR_HANDLE_SCALAR(clog) -KFR_HANDLE_SCALAR(clog2) -KFR_HANDLE_SCALAR(clog10) -KFR_HANDLE_SCALAR(cexp) -KFR_HANDLE_SCALAR(cexp2) -KFR_HANDLE_SCALAR(cexp10) -KFR_HANDLE_SCALAR(polar) -KFR_HANDLE_SCALAR(cartesian) -KFR_HANDLE_SCALAR(csqrt) - -KFR_FN(csin) -KFR_FN(csinh) -KFR_FN(ccos) -KFR_FN(ccosh) -KFR_FN(cabs) -KFR_FN(carg) -KFR_FN(clog) -KFR_FN(clog2) -KFR_FN(clog10) -KFR_FN(cexp) -KFR_FN(cexp2) -KFR_FN(cexp10) -KFR_FN(polar) -KFR_FN(cartesian) -KFR_FN(csqrt) +KFR_I_CONVERTER(csin) +KFR_I_CONVERTER(csinh) +KFR_I_CONVERTER(ccos) +KFR_I_CONVERTER(ccosh) +KFR_I_CONVERTER(clog) +KFR_I_CONVERTER(clog2) +KFR_I_CONVERTER(clog10) +KFR_I_CONVERTER(cexp) +KFR_I_CONVERTER(cexp2) +KFR_I_CONVERTER(cexp10) +KFR_I_CONVERTER(polar) +KFR_I_CONVERTER(cartesian) +KFR_I_CONVERTER(csqrt) + +template <typename T1> +KFR_SINTRIN realtype<T1> cabs(const T1& a) +{ + using vecout = vec1<T1>; + return to_scalar(internal::cabs(vecout(a))); +} +template <typename T1> +KFR_SINTRIN realtype<T1> carg(const T1& a) +{ + using vecout = vec1<T1>; + return to_scalar(internal::carg(vecout(a))); +} + +KFR_I_FN(csin) +KFR_I_FN(csinh) +KFR_I_FN(ccos) +KFR_I_FN(ccosh) +KFR_I_FN(cabs) +KFR_I_FN(carg) +KFR_I_FN(clog) +KFR_I_FN(clog2) +KFR_I_FN(clog10) +KFR_I_FN(cexp) +KFR_I_FN(cexp2) +KFR_I_FN(cexp10) +KFR_I_FN(polar) +KFR_I_FN(cartesian) +KFR_I_FN(csqrt) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/function.hpp b/include/kfr/base/function.hpp @@ -33,11 +33,12 @@ namespace kfr { -#define KFR_HANDLE_SCALAR(fn) \ - template <typename T, typename... Ts, KFR_ENABLE_IF(is_numeric_args<T, Ts...>::value)> \ - KFR_SINTRIN auto fn(const T& x, const Ts&... rest) \ +#define KFR_I_CONVERTER(fn) \ + template <typename T1, typename... Args, typename Tout = ::cometa::common_type<T1, Args...>> \ + KFR_SINTRIN Tout fn(const T1& a, const Args&... b) \ { \ - return fn(make_vector(x), make_vector(rest)...)[0]; \ + using vecout = vec1<Tout>; \ + return to_scalar(internal::fn(vecout(a), vecout(b)...)); \ } template <typename T> @@ -147,12 +148,6 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x, identity<T> value) { \ return concat(fn(low(a)), fn(high(a))); \ } -#define KFR_HANDLE_SCALAR_1(fn) \ - template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN auto fn(T a) \ - { \ - return fn(make_vector(a))[0]; \ - } #define KFR_HANDLE_ALL_SIZES_FLT_1(fn) \ template <typename T, size_t N, KFR_ENABLE_IF(N < vector_width<T, cpu_t::native>)> \ @@ -233,12 +228,6 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x, identity<T> value) { \ return concat(fn(low(a), low(b)), fn(high(a), high(b))); \ } -#define KFR_HANDLE_SCALAR_2(fn) \ - template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN auto fn(T a, T b) \ - { \ - return fn(make_vector(a), make_vector(b))[0]; \ - } #define KFR_HANDLE_ALL_SIZES_3(fn) \ template <typename T, size_t N, KFR_ENABLE_IF(N < vector_width<T, cpu_t::native>)> \ @@ -251,12 +240,6 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x, identity<T> value) { \ return concat(fn(low(a), low(b), low(c)), fn(high(a), high(b), high(c))); \ } -#define KFR_HANDLE_SCALAR_3(fn) \ - template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN auto fn(T a, T b, T c) \ - { \ - return fn(make_vector(a), make_vector(b), make_vector(c))[0]; \ - } #define KFR_HANDLE_ALL_SIZES_4(fn) \ template <typename T, size_t N, KFR_ENABLE_IF(N < vector_width<T, cpu_t::native>)> \ @@ -269,12 +252,20 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x, identity<T> value) { \ return concat(fn(low(a), low(b), low(c), low(d)), fn(high(a), high(b), high(c), high(d))); \ } -#define KFR_HANDLE_SCALAR_4(fn) \ - template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN auto fn(T a, T b, T c, T d) \ - { \ - return fn(make_vector(a), make_vector(b), make_vector(c), make_vector(d))[0]; \ - } + +template <typename T> +using vec1 = conditional<is_vec<T>::value, T, vec<T, 1>>; + +template <typename T> +inline T to_scalar(const T& value) +{ + return value; +} +template <typename T> +inline T to_scalar(const vec<T, 1>& value) +{ + return value[0]; +} } } #pragma clang diagnostic pop diff --git a/include/kfr/base/gamma.hpp b/include/kfr/base/gamma.hpp @@ -58,10 +58,10 @@ KFR_SINTRIN vec<T, N> factorial_approx(vec<T, N> x) { return gamma(x + T(1)); } -KFR_HANDLE_SCALAR(gamma) -KFR_HANDLE_SCALAR(factorial_approx) -KFR_FN(gamma) -KFR_FN(factorial_approx) +KFR_I_CONVERTER(gamma) +KFR_I_CONVERTER(factorial_approx) +KFR_I_FN(gamma) +KFR_I_FN(factorial_approx) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/hyperbolic.hpp b/include/kfr/base/hyperbolic.hpp @@ -77,18 +77,18 @@ KFR_SINTRIN vec<T, N> coshsinh(vec<T, N> x) return addsub(a, b) * T(0.5); } -KFR_HANDLE_SCALAR(sinh) -KFR_HANDLE_SCALAR(cosh) -KFR_HANDLE_SCALAR(tanh) -KFR_HANDLE_SCALAR(coth) -KFR_HANDLE_SCALAR(sinhcosh) -KFR_HANDLE_SCALAR(coshsinh) -KFR_FN(sinh) -KFR_FN(cosh) -KFR_FN(tanh) -KFR_FN(coth) -KFR_FN(sinhcosh) -KFR_FN(coshsinh) +KFR_I_CONVERTER(sinh) +KFR_I_CONVERTER(cosh) +KFR_I_CONVERTER(tanh) +KFR_I_CONVERTER(coth) +KFR_I_CONVERTER(sinhcosh) +KFR_I_CONVERTER(coshsinh) +KFR_I_FN(sinh) +KFR_I_FN(cosh) +KFR_I_FN(tanh) +KFR_I_FN(coth) +KFR_I_FN(sinhcosh) +KFR_I_FN(coshsinh) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/log_exp.hpp b/include/kfr/base/log_exp.hpp @@ -314,31 +314,31 @@ KFR_SINTRIN vec<Tout, N> cbrt(vec<T, N> x) return cbrt(cast<Tout>(x)); } -KFR_HANDLE_SCALAR(exp) -KFR_HANDLE_SCALAR(exp2) -KFR_HANDLE_SCALAR(exp10) -KFR_HANDLE_SCALAR(log) -KFR_HANDLE_SCALAR(log2) -KFR_HANDLE_SCALAR(log10) -KFR_HANDLE_SCALAR(logb) -KFR_HANDLE_SCALAR(pow) -KFR_HANDLE_SCALAR(root) -KFR_HANDLE_SCALAR(cbrt) - -KFR_FN(exp) -KFR_FN(exp2) -KFR_FN(exp10) -KFR_FN(log) -KFR_FN(log2) -KFR_FN(log10) -KFR_FN(logb) -KFR_FN(logn) -KFR_FN(logm) -KFR_FN(exp_fmadd) -KFR_FN(log_fmadd) -KFR_FN(pow) -KFR_FN(root) -KFR_FN(cbrt) +KFR_I_CONVERTER(exp) +KFR_I_CONVERTER(exp2) +KFR_I_CONVERTER(exp10) +KFR_I_CONVERTER(log) +KFR_I_CONVERTER(log2) +KFR_I_CONVERTER(log10) +KFR_I_CONVERTER(logb) +KFR_I_CONVERTER(pow) +KFR_I_CONVERTER(root) +KFR_I_CONVERTER(cbrt) + +KFR_I_FN(exp) +KFR_I_FN(exp2) +KFR_I_FN(exp10) +KFR_I_FN(log) +KFR_I_FN(log2) +KFR_I_FN(log10) +KFR_I_FN(logb) +KFR_I_FN(logn) +KFR_I_FN(logm) +KFR_I_FN(exp_fmadd) +KFR_I_FN(log_fmadd) +KFR_I_FN(pow) +KFR_I_FN(root) +KFR_I_FN(cbrt) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/min_max.hpp b/include/kfr/base/min_max.hpp @@ -150,18 +150,19 @@ KFR_SINTRIN vec<T, N> absmax(vec<T, N> x, vec<T, N> y) return max(abs(x), abs(y)); } -KFR_HANDLE_SCALAR_2(min) +KFR_I_CONVERTER(min) KFR_I_FN(min) -KFR_HANDLE_SCALAR_2(max) +KFR_I_CONVERTER(max) KFR_I_FN(max) -KFR_HANDLE_SCALAR_2(absmin) +KFR_I_CONVERTER(absmin) KFR_I_FN(absmin) -KFR_HANDLE_SCALAR_2(absmax) +KFR_I_CONVERTER(absmax) KFR_I_FN(absmax) } -template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value)> -KFR_INTRIN common_type<T1, T2> min(const T1& x, const T2& y) +template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value), + typename Tout = common_type<T1, T2>> +KFR_INTRIN Tout min(const T1& x, const T2& y) { return internal::min(x, y); } @@ -172,8 +173,9 @@ KFR_INTRIN expr_func<internal::fn_min, E1, E2> min(E1&& x, E2&& y) return { {}, std::forward<E1>(x), std::forward<E2>(y) }; } -template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value)> -KFR_INTRIN common_type<T1, T2> max(const T1& x, const T2& y) +template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value), + typename Tout = common_type<T1, T2>> +KFR_INTRIN Tout max(const T1& x, const T2& y) { return internal::max(x, y); } @@ -184,8 +186,9 @@ KFR_INTRIN expr_func<internal::fn_max, E1, E2> max(E1&& x, E2&& y) return { {}, std::forward<E1>(x), std::forward<E2>(y) }; } -template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value)> -KFR_INTRIN common_type<T1, T2> absmin(const T1& x, const T2& y) +template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value), + typename Tout = common_type<T1, T2>> +KFR_INTRIN Tout absmin(const T1& x, const T2& y) { return internal::absmin(x, y); } @@ -196,8 +199,9 @@ KFR_INTRIN expr_func<internal::fn_absmin, E1, E2> absmin(E1&& x, E2&& y) return { {}, std::forward<E1>(x), std::forward<E2>(y) }; } -template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value)> -KFR_INTRIN common_type<T1, T2> absmax(const T1& x, const T2& y) +template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value), + typename Tout = common_type<T1, T2>> +KFR_INTRIN Tout absmax(const T1& x, const T2& y) { return internal::absmax(x, y); } diff --git a/include/kfr/base/modzerobessel.hpp b/include/kfr/base/modzerobessel.hpp @@ -93,8 +93,8 @@ KFR_INLINE vec<T, N> modzerobessel(vec<T, N> x) return result; } -KFR_HANDLE_SCALAR(modzerobessel) -KFR_FN(modzerobessel) +KFR_I_CONVERTER(modzerobessel) +KFR_I_FN(modzerobessel) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/round.hpp b/include/kfr/base/round.hpp @@ -191,15 +191,15 @@ KFR_SINTRIN vec<IT, N> iround(vec<T, N> value) return cast<IT>(round(value)); } -KFR_HANDLE_SCALAR_1(floor) -KFR_HANDLE_SCALAR_1(ceil) -KFR_HANDLE_SCALAR_1(round) -KFR_HANDLE_SCALAR_1(trunc) -KFR_HANDLE_SCALAR_1(fract) -KFR_HANDLE_SCALAR_1(ifloor) -KFR_HANDLE_SCALAR_1(iceil) -KFR_HANDLE_SCALAR_1(iround) -KFR_HANDLE_SCALAR_1(itrunc) +KFR_I_CONVERTER(floor) +KFR_I_CONVERTER(ceil) +KFR_I_CONVERTER(round) +KFR_I_CONVERTER(trunc) +KFR_I_CONVERTER(fract) +KFR_I_CONVERTER(ifloor) +KFR_I_CONVERTER(iceil) +KFR_I_CONVERTER(iround) +KFR_I_CONVERTER(itrunc) KFR_I_FN(floor) KFR_I_FN(ceil) KFR_I_FN(round) diff --git a/include/kfr/base/saturation.hpp b/include/kfr/base/saturation.hpp @@ -126,14 +126,15 @@ KFR_SINTRIN vec<T, N> satsub(vec<T, N> a, vec<T, N> b) return saturated_unsigned_sub(a, b); } #endif -KFR_HANDLE_SCALAR_2(satadd) +KFR_I_CONVERTER(satadd) KFR_I_FN(satadd) -KFR_HANDLE_SCALAR_2(satsub) +KFR_I_CONVERTER(satsub) KFR_I_FN(satsub) } -template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value)> -KFR_INTRIN common_type<T1, T2> satadd(const T1& x, const T2& y) +template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value), + typename Tout = common_type<T1, T2>> +KFR_INTRIN Tout satadd(const T1& x, const T2& y) { return internal::satadd(x, y); } @@ -144,8 +145,9 @@ KFR_INTRIN expr_func<internal::fn_satadd, E1, E2> satadd(E1&& x, E2&& y) return { {}, std::forward<E1>(x), std::forward<E2>(y) }; } -template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value)> -KFR_INTRIN common_type<T1, T2> satsub(const T1& x, const T2& y) +template <typename T1, typename T2, KFR_ENABLE_IF(is_numeric_args<T1, T2>::value), + typename Tout = common_type<T1, T2>> +KFR_INTRIN Tout satsub(const T1& x, const T2& y) { return internal::satsub(x, y); } diff --git a/include/kfr/base/sin_cos.hpp b/include/kfr/base/sin_cos.hpp @@ -315,21 +315,21 @@ KFR_SINTRIN T cossindeg(const T& x) return cossin(x * c_degtorad<T>); } -KFR_HANDLE_SCALAR_1(sin) -KFR_HANDLE_SCALAR_1(cos) -KFR_HANDLE_SCALAR_1(fastsin) -KFR_HANDLE_SCALAR_1(fastcos) -KFR_HANDLE_SCALAR_1(sincos) -KFR_HANDLE_SCALAR_1(cossin) -KFR_HANDLE_SCALAR_1(sinc) - -KFR_FN(sin) -KFR_FN(cos) -KFR_FN(fastsin) -KFR_FN(fastcos) -KFR_FN(sincos) -KFR_FN(cossin) -KFR_FN(sinc) +KFR_I_CONVERTER(sin) +KFR_I_CONVERTER(cos) +KFR_I_CONVERTER(fastsin) +KFR_I_CONVERTER(fastcos) +KFR_I_CONVERTER(sincos) +KFR_I_CONVERTER(cossin) +KFR_I_CONVERTER(sinc) + +KFR_I_FN(sin) +KFR_I_FN(cos) +KFR_I_FN(fastsin) +KFR_I_FN(fastcos) +KFR_I_FN(sincos) +KFR_I_FN(cossin) +KFR_I_FN(sinc) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/sqrt.hpp b/include/kfr/base/sqrt.hpp @@ -53,8 +53,8 @@ KFR_SINTRIN vec<Tout, N> sqrt(vec<T, N> x) return apply([](T x) { return std::sqrt(static_cast<Tout>(x)); }, x); } #endif -KFR_HANDLE_SCALAR_1(sqrt) -KFR_FN(sqrt) +KFR_I_CONVERTER(sqrt) +KFR_I_FN(sqrt) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/base/tan.hpp b/include/kfr/base/tan.hpp @@ -125,9 +125,9 @@ KFR_SINTRIN T tandeg(const T& x) return tan(x * c_degtorad<T>); } -KFR_HANDLE_SCALAR(tan) -KFR_FN(tan) -KFR_FN(tandeg) +KFR_I_CONVERTER(tan) +KFR_I_FN(tan) +KFR_I_FN(tandeg) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/dft/ft.hpp b/include/kfr/dft/ft.hpp @@ -67,7 +67,7 @@ KFR_INLINE vec<T, std::max(N1, N2)> cmul(vec<T, N1> x, vec<T, N2> y) { return internal::cmul_impl(x, y); } -KFR_FN(cmul) +KFR_I_FN(cmul) template <typename T, size_t N, KFR_ENABLE_IF(N >= 2)> KFR_INLINE vec<T, N> cmul_conj(vec<T, N> x, vec<T, N> y) @@ -103,8 +103,8 @@ KFR_INLINE vec<T, N> cmul_conj(vec<T, 2> x, vec<T, N> y) vec<T, N> xx = resize<N>(x); return cmul_conj(xx, y); } -KFR_FN(cmul_conj) -KFR_FN(cmul_2conj) +KFR_I_FN(cmul_conj) +KFR_I_FN(cmul_2conj) template <size_t N, bool A = false, typename T> KFR_INLINE cvec<T, N> cread(const complex<T>* src) diff --git a/include/kfr/dsp/fir_design.hpp b/include/kfr/dsp/fir_design.hpp @@ -114,10 +114,10 @@ KFR_SINTRIN void fir_bandstop(univector_ref<T> taps, T frequency1, T frequency2, } } -KFR_FN(fir_lowpass) -KFR_FN(fir_highpass) -KFR_FN(fir_bandpass) -KFR_FN(fir_bandstop) +KFR_I_FN(fir_lowpass) +KFR_I_FN(fir_highpass) +KFR_I_FN(fir_bandpass) +KFR_I_FN(fir_bandstop) } template <typename T, size_t Tag> diff --git a/include/kfr/dsp/oscillators.hpp b/include/kfr/dsp/oscillators.hpp @@ -119,20 +119,20 @@ KFR_SINTRIN T triangle(T x) return trianglenorm(c_recip_pi<T, 1, 2> * x); } -KFR_FN(rawsine) -KFR_FN(sine) -KFR_FN(sinenorm) -KFR_FN(rawsquare) -KFR_FN(square) -KFR_FN(squarenorm) -KFR_FN(rawtriangle) -KFR_FN(triangle) -KFR_FN(trianglenorm) -KFR_FN(rawsawtooth) -KFR_FN(sawtooth) -KFR_FN(sawtoothnorm) -KFR_FN(isawtooth) -KFR_FN(isawtoothnorm) +KFR_I_FN(rawsine) +KFR_I_FN(sine) +KFR_I_FN(sinenorm) +KFR_I_FN(rawsquare) +KFR_I_FN(square) +KFR_I_FN(squarenorm) +KFR_I_FN(rawtriangle) +KFR_I_FN(triangle) +KFR_I_FN(trianglenorm) +KFR_I_FN(rawsawtooth) +KFR_I_FN(sawtooth) +KFR_I_FN(sawtoothnorm) +KFR_I_FN(isawtooth) +KFR_I_FN(isawtoothnorm) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> diff --git a/include/kfr/dsp/weighting.hpp b/include/kfr/dsp/weighting.hpp @@ -103,11 +103,11 @@ KFR_SINTRIN T cweightingdB(T f) return amp_to_dB(cweighting(f)); } -KFR_FN(aweighting) -KFR_FN(bweighting) -KFR_FN(cweighting) -KFR_FN(aweightingdB) -KFR_FN(bweightingdB) -KFR_FN(cweightingdB) +KFR_I_FN(aweighting) +KFR_I_FN(bweighting) +KFR_I_FN(cweighting) +KFR_I_FN(aweightingdB) +KFR_I_FN(bweightingdB) +KFR_I_FN(cweightingdB) } } diff --git a/include/kfr/expressions/conversion.hpp b/include/kfr/expressions/conversion.hpp @@ -50,5 +50,4 @@ KFR_INLINE internal::expression_convert<From, decay<E>> convert(E&& expr) { return internal::expression_convert<From, decay<E>>(std::forward<E>(expr)); } -KFR_FN(convert) }