68 uint64_t write_frames(std::span<const double> data, uint64_t start_frame = 0, uint32_t
channel = 0);
69 uint64_t write_frames(std::vector<std::span<const double>> data, uint64_t start_frame = 0);
79 return read_sequential(output,
count);
99 void ensure_capacity(uint64_t required_frames);
106 void enable_circular_buffer(uint64_t capacity);
112 void disable_circular_buffer();
124 std::span<const double> get_channel_frames(uint32_t
channel, uint64_t start_frame, uint64_t num_frames)
const;
126 void get_channel_frames(std::span<double> output, uint32_t
channel, uint64_t start_frame)
const;
140 uint32_t allocate_dynamic_slot();
146 void release_dynamic_slot(uint32_t index);
152 [[nodiscard]] std::vector<DataVariant>& get_dynamic_data(uint32_t index);
153 [[nodiscard]]
const std::vector<DataVariant>& get_dynamic_data(uint32_t index)
const;
157 bool m_is_circular {};
158 uint64_t m_circular_capacity {};
162 void expand_to(uint64_t target_frames);
164 std::vector<DataVariant> create_expanded_data(uint64_t new_frame_count);
167 void set_all_data(
const std::vector<DataVariant>& new_data);
169 uint64_t validate(std::vector<std::span<const double>>& data, uint64_t start_frame = 0);
171 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.