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 93b6371f1423f3243fab18a6fffff93fb915b623
parent d38198176a3d7c53f1f9d9e5794e1e2732d09f4f
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Thu, 20 Dec 2018 17:51:20 +0000

univector support for read/write

Diffstat:
Minclude/kfr/io/audiofile.hpp | 4++++
Minclude/kfr/io/file.hpp | 22++++++++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/include/kfr/io/audiofile.hpp b/include/kfr/io/audiofile.hpp @@ -72,6 +72,8 @@ struct audio_format_and_length : audio_format template <typename T> struct audio_reader : public abstract_reader<T> { + /// @brief Reads interleaved audio + using abstract_reader<T>::read; /// @brief Returns audio format description virtual const audio_format_and_length& format() const = 0; @@ -80,6 +82,8 @@ struct audio_reader : public abstract_reader<T> template <typename T> struct audio_writer : public abstract_writer<T> { + /// @brief Writes interleaved audio + using abstract_writer<T>::writer; /// @brief Returns audio format description virtual const audio_format_and_length& format() const = 0; diff --git a/include/kfr/io/file.hpp b/include/kfr/io/file.hpp @@ -30,6 +30,7 @@ #include "../base/vec.hpp" #include <cstdio> #include <string> +#include <vector> namespace kfr { @@ -102,6 +103,20 @@ template <typename T = void> struct abstract_reader : abstract_stream<T> { virtual size_t read(T* data, size_t size) = 0; + + template <univector_tag Tag> + size_t read(univector<T, Tag>& data) + { + return read(data.data(), data.size()); + } + size_t read(univector_ref<T>&& data) { return read(data.data(), data.size()); } + + univector<T> read(size_t size) + { + univector<T> result(size); + this->read(result); + return result; + } }; /// @brief Base class for all typed writers @@ -109,6 +124,13 @@ template <typename T = void> struct abstract_writer : abstract_stream<T> { virtual size_t write(const T* data, size_t size) = 0; + + template <univector_tag Tag> + size_t write(const univector<T, Tag>& data) + { + return write(data.data(), data.size()); + } + size_t write(univector_ref<const T>&& data) { return write(data.data(), data.size()); } }; template <typename From, typename To = void>