64 uint64_t write_frames(std::span<const double> data, uint64_t start_frame = 0, uint32_t channel = 0);
65 uint64_t write_frames(std::vector<std::span<const double>> data, uint64_t start_frame = 0);
73 inline uint64_t
read_frames(std::span<double> output, uint64_t count)
75 return read_sequential(output, count);
95 void ensure_capacity(uint64_t required_frames);
102 void enable_circular_buffer(uint64_t capacity);
108 void disable_circular_buffer();
120 std::span<const double> get_channel_frames(uint32_t channel, uint64_t start_frame, uint64_t num_frames)
const;
122 void get_channel_frames(std::span<double> output, uint32_t channel, uint64_t start_frame)
const;
128 bool m_is_circular {};
129 uint64_t m_circular_capacity {};
131 void expand_to(uint64_t target_frames);
133 std::vector<DataVariant> create_expanded_data(uint64_t new_frame_count);
136 void set_all_data(
const std::vector<DataVariant>& new_data);
138 uint64_t validate(std::vector<std::span<const double>>& data, uint64_t start_frame = 0);
140 uint64_t validate_single_channel(std::span<const double> data, uint64_t start_frame = 0, uint32_t channel = 0);
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.