aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/albit.h7
-rw-r--r--common/almalloc.h56
-rw-r--r--common/alnumbers.h8
-rw-r--r--common/alnumeric.h2
-rw-r--r--common/alspan.h102
-rw-r--r--common/intrusive_ptr.h6
-rw-r--r--common/pffft.cpp30
-rw-r--r--common/ringbuffer.h25
-rw-r--r--common/vecmat.h8
9 files changed, 121 insertions, 123 deletions
diff --git a/common/albit.h b/common/albit.h
index 82a4a00d..d54a189c 100644
--- a/common/albit.h
+++ b/common/albit.h
@@ -1,6 +1,7 @@
#ifndef AL_BIT_H
#define AL_BIT_H
+#include <array>
#include <cstdint>
#include <cstring>
#include <limits>
@@ -17,9 +18,9 @@ std::enable_if_t<sizeof(To) == sizeof(From) && std::is_trivially_copyable_v<From
&& std::is_trivially_copyable_v<To>,
To> bit_cast(const From &src) noexcept
{
- alignas(To) char dst[sizeof(To)];
- std::memcpy(&dst[0], &src, sizeof(To));
- return *std::launder(reinterpret_cast<To*>(&dst[0]));
+ alignas(To) std::array<char,sizeof(To)> dst;
+ std::memcpy(dst.data(), &src, sizeof(To));
+ return *std::launder(reinterpret_cast<To*>(dst.data()));
}
#ifdef __BYTE_ORDER__
diff --git a/common/almalloc.h b/common/almalloc.h
index 873473ca..288b5075 100644
--- a/common/almalloc.h
+++ b/common/almalloc.h
@@ -211,34 +211,34 @@ struct FlexArray {
FlexArray(index_type size) : mStore{size} { }
~FlexArray() = default;
- index_type size() const noexcept { return mStore.mSize; }
- bool empty() const noexcept { return mStore.mSize == 0; }
-
- pointer data() noexcept { return mStore.mArray; }
- const_pointer data() const noexcept { return mStore.mArray; }
-
- reference operator[](index_type i) noexcept { return mStore.mArray[i]; }
- const_reference operator[](index_type i) const noexcept { return mStore.mArray[i]; }
-
- reference front() noexcept { return mStore.mArray[0]; }
- const_reference front() const noexcept { return mStore.mArray[0]; }
-
- reference back() noexcept { return mStore.mArray[mStore.mSize-1]; }
- const_reference back() const noexcept { return mStore.mArray[mStore.mSize-1]; }
-
- iterator begin() noexcept { return mStore.mArray; }
- const_iterator begin() const noexcept { return mStore.mArray; }
- const_iterator cbegin() const noexcept { return mStore.mArray; }
- iterator end() noexcept { return mStore.mArray + mStore.mSize; }
- const_iterator end() const noexcept { return mStore.mArray + mStore.mSize; }
- const_iterator cend() const noexcept { return mStore.mArray + mStore.mSize; }
-
- reverse_iterator rbegin() noexcept { return end(); }
- const_reverse_iterator rbegin() const noexcept { return end(); }
- const_reverse_iterator crbegin() const noexcept { return cend(); }
- reverse_iterator rend() noexcept { return begin(); }
- const_reverse_iterator rend() const noexcept { return begin(); }
- const_reverse_iterator crend() const noexcept { return cbegin(); }
+ [[nodiscard]] auto size() const noexcept -> index_type { return mStore.mSize; }
+ [[nodiscard]] auto empty() const noexcept -> bool { return mStore.mSize == 0; }
+
+ [[nodiscard]] auto data() noexcept -> pointer { return mStore.mArray; }
+ [[nodiscard]] auto data() const noexcept -> const_pointer { return mStore.mArray; }
+
+ [[nodiscard]] auto operator[](index_type i) noexcept -> reference { return mStore.mArray[i]; }
+ [[nodiscard]] auto operator[](index_type i) const noexcept -> const_reference { return mStore.mArray[i]; }
+
+ [[nodiscard]] auto front() noexcept -> reference { return mStore.mArray[0]; }
+ [[nodiscard]] auto front() const noexcept -> const_reference { return mStore.mArray[0]; }
+
+ [[nodiscard]] auto back() noexcept -> reference { return mStore.mArray[mStore.mSize-1]; }
+ [[nodiscard]] auto back() const noexcept -> const_reference { return mStore.mArray[mStore.mSize-1]; }
+
+ [[nodiscard]] auto begin() noexcept -> iterator { return mStore.mArray; }
+ [[nodiscard]] auto begin() const noexcept -> const_iterator { return mStore.mArray; }
+ [[nodiscard]] auto cbegin() const noexcept -> const_iterator { return mStore.mArray; }
+ [[nodiscard]] auto end() noexcept -> iterator { return mStore.mArray + mStore.mSize; }
+ [[nodiscard]] auto end() const noexcept -> const_iterator { return mStore.mArray + mStore.mSize; }
+ [[nodiscard]] auto cend() const noexcept -> const_iterator { return mStore.mArray + mStore.mSize; }
+
+ [[nodiscard]] auto rbegin() noexcept -> reverse_iterator { return end(); }
+ [[nodiscard]] auto rbegin() const noexcept -> const_reverse_iterator { return end(); }
+ [[nodiscard]] auto crbegin() const noexcept -> const_reverse_iterator { return cend(); }
+ [[nodiscard]] auto rend() noexcept -> reverse_iterator { return begin(); }
+ [[nodiscard]] auto rend() const noexcept -> const_reverse_iterator { return begin(); }
+ [[nodiscard]] auto crend() const noexcept -> const_reverse_iterator { return cbegin(); }
DEF_PLACE_NEWDEL()
};
diff --git a/common/alnumbers.h b/common/alnumbers.h
index e92d7b87..7abe6b32 100644
--- a/common/alnumbers.h
+++ b/common/alnumbers.h
@@ -3,9 +3,7 @@
#include <utility>
-namespace al {
-
-namespace numbers {
+namespace al::numbers {
namespace detail_ {
template<typename T>
@@ -29,8 +27,6 @@ inline constexpr auto inv_pi = inv_pi_v<double>;
inline constexpr auto sqrt2 = sqrt2_v<double>;
inline constexpr auto sqrt3 = sqrt3_v<double>;
-} // namespace numbers
-
-} // namespace al
+} // namespace al::numbers
#endif /* COMMON_ALNUMBERS_H */
diff --git a/common/alnumeric.h b/common/alnumeric.h
index 6281b012..cb8704b2 100644
--- a/common/alnumeric.h
+++ b/common/alnumeric.h
@@ -245,7 +245,7 @@ inline float fast_roundf(float f) noexcept
/* Integral limit, where sub-integral precision is not available for
* floats.
*/
- static constexpr float ilim[2]{
+ static constexpr std::array ilim{
8388608.0f /* 0x1.0p+23 */,
-8388608.0f /* -0x1.0p+23 */
};
diff --git a/common/alspan.h b/common/alspan.h
index 341ce7c8..d91747c2 100644
--- a/common/alspan.h
+++ b/common/alspan.h
@@ -107,43 +107,43 @@ public:
constexpr span& operator=(const span &rhs) noexcept = default;
- constexpr reference front() const { return *mData; }
- constexpr reference back() const { return *(mData+E-1); }
- constexpr reference operator[](index_type idx) const { return mData[idx]; }
- constexpr pointer data() const noexcept { return mData; }
-
- constexpr index_type size() const noexcept { return E; }
- constexpr index_type size_bytes() const noexcept { return E * sizeof(value_type); }
- constexpr bool empty() const noexcept { return E == 0; }
-
- constexpr iterator begin() const noexcept { return mData; }
- constexpr iterator end() const noexcept { return mData+E; }
- constexpr const_iterator cbegin() const noexcept { return mData; }
- constexpr const_iterator cend() const noexcept { return mData+E; }
-
- constexpr reverse_iterator rbegin() const noexcept { return reverse_iterator{end()}; }
- constexpr reverse_iterator rend() const noexcept { return reverse_iterator{begin()}; }
- constexpr const_reverse_iterator crbegin() const noexcept
+ [[nodiscard]] constexpr auto front() const -> reference { return *mData; }
+ [[nodiscard]] constexpr auto back() const -> reference { return *(mData+E-1); }
+ [[nodiscard]] constexpr auto operator[](index_type idx) const -> reference { return mData[idx]; }
+ [[nodiscard]] constexpr auto data() const noexcept -> pointer { return mData; }
+
+ [[nodiscard]] constexpr auto size() const noexcept -> index_type { return E; }
+ [[nodiscard]] constexpr auto size_bytes() const noexcept -> index_type { return E * sizeof(value_type); }
+ [[nodiscard]] constexpr auto empty() const noexcept -> bool { return E == 0; }
+
+ [[nodiscard]] constexpr auto begin() const noexcept -> iterator { return mData; }
+ [[nodiscard]] constexpr auto end() const noexcept -> iterator { return mData+E; }
+ [[nodiscard]] constexpr auto cbegin() const noexcept -> const_iterator { return mData; }
+ [[nodiscard]] constexpr auto cend() const noexcept -> const_iterator { return mData+E; }
+
+ [[nodiscard]] constexpr auto rbegin() const noexcept -> reverse_iterator { return reverse_iterator{end()}; }
+ [[nodiscard]] constexpr auto rend() const noexcept -> reverse_iterator { return reverse_iterator{begin()}; }
+ [[nodiscard]] constexpr auto crbegin() const noexcept -> const_reverse_iterator
{ return const_reverse_iterator{cend()}; }
- constexpr const_reverse_iterator crend() const noexcept
+ [[nodiscard]] constexpr auto crend() const noexcept -> const_reverse_iterator
{ return const_reverse_iterator{cbegin()}; }
template<size_t C>
- constexpr span<element_type,C> first() const
+ [[nodiscard]] constexpr auto first() const -> span<element_type,C>
{
static_assert(E >= C, "New size exceeds original capacity");
return span<element_type,C>{mData, C};
}
template<size_t C>
- constexpr span<element_type,C> last() const
+ [[nodiscard]] constexpr auto last() const -> span<element_type,C>
{
static_assert(E >= C, "New size exceeds original capacity");
return span<element_type,C>{mData+(E-C), C};
}
template<size_t O, size_t C>
- constexpr auto subspan() const -> std::enable_if_t<C!=dynamic_extent,span<element_type,C>>
+ [[nodiscard]] constexpr auto subspan() const -> std::enable_if_t<C!=dynamic_extent,span<element_type,C>>
{
static_assert(E >= O, "Offset exceeds extent");
static_assert(E-O >= C, "New size exceeds original capacity");
@@ -151,7 +151,7 @@ public:
}
template<size_t O, size_t C=dynamic_extent>
- constexpr auto subspan() const -> std::enable_if_t<C==dynamic_extent,span<element_type,E-O>>
+ [[nodiscard]] constexpr auto subspan() const -> std::enable_if_t<C==dynamic_extent,span<element_type,E-O>>
{
static_assert(E >= O, "Offset exceeds extent");
return span<element_type,E-O>{mData+O, E-O};
@@ -161,10 +161,10 @@ public:
* defining the specialization. As a result, these methods need to be
* defined later.
*/
- constexpr span<element_type,dynamic_extent> first(size_t count) const;
- constexpr span<element_type,dynamic_extent> last(size_t count) const;
- constexpr span<element_type,dynamic_extent> subspan(size_t offset,
- size_t count=dynamic_extent) const;
+ [[nodiscard]] constexpr auto first(size_t count) const -> span<element_type,dynamic_extent>;
+ [[nodiscard]] constexpr auto last(size_t count) const -> span<element_type,dynamic_extent>;
+ [[nodiscard]] constexpr auto subspan(size_t offset,
+ size_t count=dynamic_extent) const -> span<element_type,dynamic_extent>;
private:
pointer mData{nullptr};
@@ -221,51 +221,51 @@ public:
constexpr span& operator=(const span &rhs) noexcept = default;
- constexpr reference front() const { return *mData; }
- constexpr reference back() const { return *(mDataEnd-1); }
- constexpr reference operator[](index_type idx) const { return mData[idx]; }
- constexpr pointer data() const noexcept { return mData; }
+ [[nodiscard]] constexpr auto front() const -> reference { return *mData; }
+ [[nodiscard]] constexpr auto back() const -> reference { return *(mDataEnd-1); }
+ [[nodiscard]] constexpr auto operator[](index_type idx) const -> reference { return mData[idx]; }
+ [[nodiscard]] constexpr auto data() const noexcept -> pointer { return mData; }
- constexpr index_type size() const noexcept { return static_cast<index_type>(mDataEnd-mData); }
- constexpr index_type size_bytes() const noexcept
+ [[nodiscard]] constexpr auto size() const noexcept -> index_type { return static_cast<index_type>(mDataEnd-mData); }
+ [[nodiscard]] constexpr auto size_bytes() const noexcept -> index_type
{ return static_cast<index_type>(mDataEnd-mData) * sizeof(value_type); }
- constexpr bool empty() const noexcept { return mData == mDataEnd; }
+ [[nodiscard]] constexpr auto empty() const noexcept -> bool { return mData == mDataEnd; }
- constexpr iterator begin() const noexcept { return mData; }
- constexpr iterator end() const noexcept { return mDataEnd; }
- constexpr const_iterator cbegin() const noexcept { return mData; }
- constexpr const_iterator cend() const noexcept { return mDataEnd; }
+ [[nodiscard]] constexpr auto begin() const noexcept -> iterator { return mData; }
+ [[nodiscard]] constexpr auto end() const noexcept -> iterator { return mDataEnd; }
+ [[nodiscard]] constexpr auto cbegin() const noexcept -> const_iterator { return mData; }
+ [[nodiscard]] constexpr auto cend() const noexcept -> const_iterator { return mDataEnd; }
- constexpr reverse_iterator rbegin() const noexcept { return reverse_iterator{end()}; }
- constexpr reverse_iterator rend() const noexcept { return reverse_iterator{begin()}; }
- constexpr const_reverse_iterator crbegin() const noexcept
+ [[nodiscard]] constexpr auto rbegin() const noexcept -> reverse_iterator { return reverse_iterator{end()}; }
+ [[nodiscard]] constexpr auto rend() const noexcept -> reverse_iterator { return reverse_iterator{begin()}; }
+ [[nodiscard]] constexpr auto crbegin() const noexcept -> const_reverse_iterator
{ return const_reverse_iterator{cend()}; }
- constexpr const_reverse_iterator crend() const noexcept
+ [[nodiscard]] constexpr auto crend() const noexcept -> const_reverse_iterator
{ return const_reverse_iterator{cbegin()}; }
template<size_t C>
- constexpr span<element_type,C> first() const
+ [[nodiscard]] constexpr auto first() const -> span<element_type,C>
{ return span<element_type,C>{mData, C}; }
- constexpr span first(size_t count) const
+ [[nodiscard]] constexpr auto first(size_t count) const -> span
{ return (count >= size()) ? *this : span{mData, mData+count}; }
template<size_t C>
- constexpr span<element_type,C> last() const
+ [[nodiscard]] constexpr auto last() const -> span<element_type,C>
{ return span<element_type,C>{mDataEnd-C, C}; }
- constexpr span last(size_t count) const
+ [[nodiscard]] constexpr auto last(size_t count) const -> span
{ return (count >= size()) ? *this : span{mDataEnd-count, mDataEnd}; }
template<size_t O, size_t C>
- constexpr auto subspan() const -> std::enable_if_t<C!=dynamic_extent,span<element_type,C>>
+ [[nodiscard]] constexpr auto subspan() const -> std::enable_if_t<C!=dynamic_extent,span<element_type,C>>
{ return span<element_type,C>{mData+O, C}; }
template<size_t O, size_t C=dynamic_extent>
- constexpr auto subspan() const -> std::enable_if_t<C==dynamic_extent,span<element_type,C>>
+ [[nodiscard]] constexpr auto subspan() const -> std::enable_if_t<C==dynamic_extent,span<element_type,C>>
{ return span<element_type,C>{mData+O, mDataEnd}; }
- constexpr span subspan(size_t offset, size_t count=dynamic_extent) const
+ [[nodiscard]] constexpr auto subspan(size_t offset, size_t count=dynamic_extent) const -> span
{
return (offset > size()) ? span{} :
(count >= size()-offset) ? span{mData+offset, mDataEnd} :
@@ -278,21 +278,21 @@ private:
};
template<typename T, size_t E>
-constexpr inline auto span<T,E>::first(size_t count) const -> span<element_type,dynamic_extent>
+[[nodiscard]] constexpr inline auto span<T,E>::first(size_t count) const -> span<element_type,dynamic_extent>
{
return (count >= size()) ? span<element_type>{mData, extent} :
span<element_type>{mData, count};
}
template<typename T, size_t E>
-constexpr inline auto span<T,E>::last(size_t count) const -> span<element_type,dynamic_extent>
+[[nodiscard]] constexpr inline auto span<T,E>::last(size_t count) const -> span<element_type,dynamic_extent>
{
return (count >= size()) ? span<element_type>{mData, extent} :
span<element_type>{mData+extent-count, count};
}
template<typename T, size_t E>
-constexpr inline auto span<T,E>::subspan(size_t offset, size_t count) const
+[[nodiscard]] constexpr inline auto span<T,E>::subspan(size_t offset, size_t count) const
-> span<element_type,dynamic_extent>
{
return (offset > size()) ? span<element_type>{} :
diff --git a/common/intrusive_ptr.h b/common/intrusive_ptr.h
index 714a5617..0152b92a 100644
--- a/common/intrusive_ptr.h
+++ b/common/intrusive_ptr.h
@@ -81,9 +81,9 @@ public:
explicit operator bool() const noexcept { return mPtr != nullptr; }
- T& operator*() const noexcept { return *mPtr; }
- T* operator->() const noexcept { return mPtr; }
- T* get() const noexcept { return mPtr; }
+ [[nodiscard]] auto operator*() const noexcept -> T& { return *mPtr; }
+ [[nodiscard]] auto operator->() const noexcept -> T* { return mPtr; }
+ [[nodiscard]] auto get() const noexcept -> T* { return mPtr; }
void reset(T *ptr=nullptr) noexcept
{
diff --git a/common/pffft.cpp b/common/pffft.cpp
index 8e849cb4..505c9791 100644
--- a/common/pffft.cpp
+++ b/common/pffft.cpp
@@ -58,11 +58,11 @@
#include "pffft.h"
#include <array>
-#include <assert.h>
+#include <cassert>
#include <cmath>
+#include <cstdio>
+#include <cstdlib>
#include <cstring>
-#include <stdio.h>
-#include <stdlib.h>
#include <vector>
#include "albit.h"
@@ -90,7 +90,7 @@ using uint = unsigned int;
* Altivec support macros
*/
#if defined(__ppc__) || defined(__ppc64__) || defined(__powerpc__) || defined(__powerpc64__)
-typedef vector float v4sf;
+using v4sf = vector float;
#define SIMD_SZ 4
#define VZERO() ((vector float) vec_splat_u8(0))
#define VMUL(a,b) vec_madd(a,b, VZERO())
@@ -142,7 +142,7 @@ force_inline void vtranspose4(v4sf &x0, v4sf &x1, v4sf &x2, v4sf &x3) noexcept
(defined(_M_IX86_FP) && _M_IX86_FP >= 1)
#include <xmmintrin.h>
-typedef __m128 v4sf;
+using v4sf = __m128;
#define SIMD_SZ 4 // 4 floats by simd vector -- this is pretty much hardcoded in the preprocess/finalize functions anyway so you will have to work if you want to enable AVX with its 256-bit vectors.
#define VZERO _mm_setzero_ps
#define VMUL _mm_mul_ps
@@ -178,7 +178,7 @@ force_inline void vtranspose4(v4sf &x0, v4sf &x1, v4sf &x2, v4sf &x3) noexcept
#elif defined(__ARM_NEON) || defined(__aarch64__) || defined(__arm64)
#include <arm_neon.h>
-typedef float32x4_t v4sf;
+using v4sf = float32x4_t;
#define SIMD_SZ 4
#define VZERO() vdupq_n_f32(0)
#define VMUL vmulq_f32
@@ -297,7 +297,7 @@ force_inline v4sf vswaphl(v4sf a, v4sf b) noexcept
// fallback mode for situations where SIMD is not available, use scalar mode instead
#ifdef PFFFT_SIMD_DISABLE
-typedef float v4sf;
+using v4sf = float;
#define SIMD_SZ 1
#define VZERO() 0.f
#define VMUL(a,b) ((a)*(b))
@@ -335,14 +335,14 @@ force_inline void vcplxmulconj(v4sf &ar, v4sf &ai, v4sf br, v4sf bi) noexcept
[[maybe_unused]] void validate_pffft_simd()
{
using float4 = std::array<float,4>;
- static constexpr float f[16]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ static constexpr std::array<float,16> f{{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
float4 a0_f, a1_f, a2_f, a3_f, t_f, u_f;
v4sf a0_v, a1_v, a2_v, a3_v, t_v, u_v;
- std::memcpy(&a0_v, f, 4*sizeof(float));
- std::memcpy(&a1_v, f+4, 4*sizeof(float));
- std::memcpy(&a2_v, f+8, 4*sizeof(float));
- std::memcpy(&a3_v, f+12, 4*sizeof(float));
+ std::memcpy(&a0_v, f.data(), 4*sizeof(float));
+ std::memcpy(&a1_v, f.data()+4, 4*sizeof(float));
+ std::memcpy(&a2_v, f.data()+8, 4*sizeof(float));
+ std::memcpy(&a3_v, f.data()+12, 4*sizeof(float));
t_v = VZERO(); t_f = al::bit_cast<float4>(t_v);
printf("VZERO=[%2g %2g %2g %2g]\n", t_f[0], t_f[1], t_f[2], t_f[3]); assertv4(t, 0, 0, 0, 0);
@@ -1331,7 +1331,7 @@ uint decompose(const uint n, const al::span<uint,15> ifac, const al::span<const
void rffti1_ps(const uint n, float *wa, const al::span<uint,15> ifac)
{
- static constexpr uint ntryh[]{4,2,3,5};
+ static constexpr std::array ntryh{4u,2u,3u,5u};
const uint nf{decompose(n, ifac, ntryh)};
const double argh{2.0*al::numbers::pi / n};
@@ -1365,7 +1365,7 @@ void rffti1_ps(const uint n, float *wa, const al::span<uint,15> ifac)
void cffti1_ps(const uint n, float *wa, const al::span<uint,15> ifac)
{
- static constexpr uint ntryh[]{5,3,4,2};
+ static constexpr std::array ntryh{5u,3u,4u,2u};
const uint nf{decompose(n, ifac, ntryh)};
const double argh{2.0*al::numbers::pi / n};
@@ -1814,7 +1814,7 @@ void pffft_transform_internal(const PFFFT_Setup *setup, const v4sf *vinput, v4sf
const size_t Ncvec{setup->Ncvec};
const bool nf_odd{(setup->ifac[1]&1) != 0};
- v4sf *buff[2]{voutput, scratch};
+ std::array buff{voutput, scratch};
bool ib{nf_odd != ordered};
if(direction == PFFFT_FORWARD)
{
diff --git a/common/ringbuffer.h b/common/ringbuffer.h
index 8c65c3af..718238a3 100644
--- a/common/ringbuffer.h
+++ b/common/ringbuffer.h
@@ -36,26 +36,26 @@ public:
RingBuffer(const std::size_t count) : mBuffer{count} { }
/** Reset the read and write pointers to zero. This is not thread safe. */
- void reset() noexcept;
+ auto reset() noexcept -> void;
/**
* The non-copying data reader. Returns two ringbuffer data pointers that
* hold the current readable data. If the readable data is in one segment
* the second segment has zero length.
*/
- DataPair getReadVector() const noexcept;
+ [[nodiscard]] auto getReadVector() const noexcept -> DataPair;
/**
* The non-copying data writer. Returns two ringbuffer data pointers that
* hold the current writeable data. If the writeable data is in one segment
* the second segment has zero length.
*/
- DataPair getWriteVector() const noexcept;
+ [[nodiscard]] auto getWriteVector() const noexcept -> DataPair;
/**
* Return the number of elements available for reading. This is the number
* of elements in front of the read pointer and behind the write pointer.
*/
- std::size_t readSpace() const noexcept
+ [[nodiscard]] auto readSpace() const noexcept -> size_t
{
const size_t w{mWritePtr.load(std::memory_order_acquire)};
const size_t r{mReadPtr.load(std::memory_order_acquire)};
@@ -66,14 +66,14 @@ public:
* The copying data reader. Copy at most `cnt' elements into `dest'.
* Returns the actual number of elements copied.
*/
- std::size_t read(void *dest, std::size_t cnt) noexcept;
+ [[nodiscard]] auto read(void *dest, size_t cnt) noexcept -> size_t;
/**
* The copying data reader w/o read pointer advance. Copy at most `cnt'
* elements into `dest'. Returns the actual number of elements copied.
*/
- std::size_t peek(void *dest, std::size_t cnt) const noexcept;
+ [[nodiscard]] auto peek(void *dest, size_t cnt) const noexcept -> size_t;
/** Advance the read pointer `cnt' places. */
- void readAdvance(std::size_t cnt) noexcept
+ auto readAdvance(size_t cnt) noexcept -> void
{ mReadPtr.fetch_add(cnt, std::memory_order_acq_rel); }
@@ -81,7 +81,7 @@ public:
* Return the number of elements available for writing. This is the number
* of elements in front of the write pointer and behind the read pointer.
*/
- std::size_t writeSpace() const noexcept
+ [[nodiscard]] auto writeSpace() const noexcept -> size_t
{
const size_t w{mWritePtr.load(std::memory_order_acquire)};
const size_t r{mReadPtr.load(std::memory_order_acquire) + mWriteSize - mSizeMask};
@@ -92,12 +92,12 @@ public:
* The copying data writer. Copy at most `cnt' elements from `src'. Returns
* the actual number of elements copied.
*/
- std::size_t write(const void *src, std::size_t cnt) noexcept;
+ [[nodiscard]] auto write(const void *src, size_t cnt) noexcept -> size_t;
/** Advance the write pointer `cnt' places. */
- void writeAdvance(std::size_t cnt) noexcept
+ auto writeAdvance(size_t cnt) noexcept -> void
{ mWritePtr.fetch_add(cnt, std::memory_order_acq_rel); }
- std::size_t getElemSize() const noexcept { return mElemSize; }
+ [[nodiscard]] auto getElemSize() const noexcept -> size_t { return mElemSize; }
/**
* Create a new ringbuffer to hold at least `sz' elements of `elem_sz'
@@ -105,7 +105,8 @@ public:
* (even if it is already a power of two, to ensure the requested amount
* can be written).
*/
- static std::unique_ptr<RingBuffer> Create(std::size_t sz, std::size_t elem_sz, int limit_writes);
+ [[nodiscard]]
+ static auto Create(size_t sz, size_t elem_sz, int limit_writes) -> std::unique_ptr<RingBuffer>;
DEF_FAM_NEWDEL(RingBuffer, mBuffer)
};
diff --git a/common/vecmat.h b/common/vecmat.h
index a45f262f..0cdb82eb 100644
--- a/common/vecmat.h
+++ b/common/vecmat.h
@@ -14,7 +14,7 @@ namespace alu {
template<typename T>
class VectorR {
static_assert(std::is_floating_point<T>::value, "Must use floating-point types");
- alignas(16) T mVals[4];
+ alignas(16) std::array<T,4> mVals;
public:
constexpr VectorR() noexcept = default;
@@ -58,7 +58,7 @@ public:
return T{0};
}
- constexpr VectorR cross_product(const alu::VectorR<T> &rhs) const noexcept
+ [[nodiscard]] constexpr auto cross_product(const alu::VectorR<T> &rhs) const noexcept -> VectorR
{
return VectorR{
mVals[1]*rhs.mVals[2] - mVals[2]*rhs.mVals[1],
@@ -67,7 +67,7 @@ public:
T{0}};
}
- constexpr T dot_product(const alu::VectorR<T> &rhs) const noexcept
+ [[nodiscard]] constexpr auto dot_product(const alu::VectorR<T> &rhs) const noexcept -> T
{ return mVals[0]*rhs.mVals[0] + mVals[1]*rhs.mVals[1] + mVals[2]*rhs.mVals[2]; }
};
using Vector = VectorR<float>;
@@ -75,7 +75,7 @@ using Vector = VectorR<float>;
template<typename T>
class MatrixR {
static_assert(std::is_floating_point<T>::value, "Must use floating-point types");
- alignas(16) T mVals[16];
+ alignas(16) std::array<T,16> mVals;
public:
constexpr MatrixR() noexcept = default;