14inline void*
pulp_aligned_alloc(
size_t alignment,
size_t size) {
return _aligned_malloc(size, alignment); }
16#elif defined(__ANDROID__)
20 void* allocation =
nullptr;
21 return posix_memalign(&allocation, alignment, size) == 0 ? allocation :
nullptr;
27inline void*
pulp_aligned_alloc(
size_t alignment,
size_t size) {
return std::aligned_alloc(alignment, size); }
42template <
typename SampleType =
float>
48 : size_(num_samples) {
49 if (num_samples > 0) {
51 size_t bytes = num_samples *
sizeof(SampleType);
52 data_ =
static_cast<SampleType*
>(
54 std::memset(data_, 0, align_up(bytes));
62 : data_(other.data_), size_(other.size_) {
63 other.data_ =
nullptr;
72 other.data_ =
nullptr;
81 SampleType*
data() {
return data_; }
82 const SampleType*
data()
const {
return data_; }
83 size_t size()
const {
return size_; }
84 bool empty()
const {
return size_ == 0; }
89 SampleType*
begin() {
return data_; }
90 SampleType*
end() {
return data_ + size_; }
91 const SampleType*
begin()
const {
return data_; }
92 const SampleType*
end()
const {
return data_ + size_; }
97 std::memset(data_, 0, size_ *
sizeof(SampleType));
102 if (new_size == size_)
return;
107 size_t bytes = new_size *
sizeof(SampleType);
108 data_ =
static_cast<SampleType*
>(
110 std::memset(data_, 0, align_up(bytes));
116 count = std::min(count, size_);
117 std::memcpy(data_, src, count *
sizeof(SampleType));
121 static size_t align_up(
size_t bytes) {
125 SampleType* data_ =
nullptr;
RAII aligned buffer with SIMD-friendly access.
Definition simd_buffer.hpp:43
void resize(size_t new_size)
Resize (reallocates, does not preserve data).
Definition simd_buffer.hpp:101
AlignedBufferT & operator=(AlignedBufferT &&other) noexcept
Definition simd_buffer.hpp:67
void clear()
Clear buffer to zero.
Definition simd_buffer.hpp:95
~AlignedBufferT()
Definition simd_buffer.hpp:58
SampleType & operator[](size_t i)
Definition simd_buffer.hpp:86
void copy_from(const SampleType *src, size_t count)
Copy from raw pointer.
Definition simd_buffer.hpp:115
AlignedBufferT(size_t num_samples)
Definition simd_buffer.hpp:47
AlignedBufferT(AlignedBufferT &&other) noexcept
Definition simd_buffer.hpp:61
const SampleType * begin() const
Definition simd_buffer.hpp:91
SampleType * end()
Definition simd_buffer.hpp:90
SampleType * begin()
Definition simd_buffer.hpp:89
const SampleType * data() const
Definition simd_buffer.hpp:82
size_t size() const
Definition simd_buffer.hpp:83
SampleType * data()
Definition simd_buffer.hpp:81
bool empty() const
Definition simd_buffer.hpp:84
AlignedBufferT(const AlignedBufferT &)=delete
const SampleType & operator[](size_t i) const
Definition simd_buffer.hpp:87
AlignedBufferT & operator=(const AlignedBufferT &)=delete
const SampleType * end() const
Definition simd_buffer.hpp:92
Definition additive_bank.hpp:218
static constexpr size_t kSimdAlignment
Alignment in bytes for SIMD operations (covers AVX-512).
Definition simd_buffer.hpp:34
AlignedBufferT< double > AlignedBuffer64
Definition simd_buffer.hpp:130
@ i
Definition formant_filter_bank.hpp:20
AlignedBufferT< float > AlignedBuffer
Definition simd_buffer.hpp:129
void pulp_aligned_free(void *p)
Definition simd_buffer.hpp:28
void * pulp_aligned_alloc(size_t alignment, size_t size)
Definition simd_buffer.hpp:27