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 dc3757a51967dfb883f12b07e22aed901e5beecc
parent 744f1e945bc8d1855394e7d5fc2175041335f3f8
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Fri,  4 Nov 2016 03:03:12 +0300

Subscript operator for mask

Diffstat:
Minclude/kfr/base/vec.hpp | 10+++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/include/kfr/base/vec.hpp b/include/kfr/base/vec.hpp @@ -98,6 +98,8 @@ struct mask : vec<T, N> } KFR_I_CE mask operator^(const base& y) const noexcept { return static_cast<const base&>(*this) ^ y; } + bool operator[](size_t index) const noexcept; + constexpr base asvec() const noexcept { return static_cast<const base&>(*this); } }; @@ -501,6 +503,12 @@ constexpr CMT_INLINE vec<To, Nout> fbitcast(const vec<From, N>& value) noexcept return vec<To, Nout>::frombits(value); } +template <typename T, size_t N> +inline bool mask<T, N>::operator[](size_t index) const noexcept +{ + return ibitcast(base::operator[](index)) < 0; +} + constexpr CMT_INLINE size_t vector_alignment(size_t size) { return next_poweroftwo(size); } namespace internal @@ -969,7 +977,7 @@ CMT_INLINE f64x2 tovec(__m128d x) { return f64x2(x); } #endif template <typename T, typename... Args, size_t Nout = (sizeof...(Args) + 1)> -constexpr CMT_INLINE vec<T, Nout> make_mask(bool arg, Args... args) +constexpr CMT_INLINE mask<T, Nout> make_mask(bool arg, Args... args) { return vec<T, Nout>(internal::maskbits<T>(arg), internal::maskbits<T>(static_cast<bool>(args))...); }