72 uint32_t add_series(std::string name,
95 void bind(uint32_t series_index, std::shared_ptr<Nodes::Node> node);
107 void bind(uint32_t series_index,
108 std::shared_ptr<Buffers::AudioBuffer> buffer);
119 void bind(uint32_t series_index,
120 std::shared_ptr<Nodes::Network::NodeNetwork>
network);
132 void bind(uint32_t series_index,
133 std::function<
void(std::vector<double>&)> fn);
144 void set_raw(uint32_t series_index, std::vector<double> data);
150 void unbind(uint32_t series_index);
157 void write_series(uint32_t index, std::span<const double> samples);
165 void write_sample(uint32_t index, uint64_t sample_index,
double value);
172 void resize_series(uint32_t index, uint64_t
count);
177 [[nodiscard]] uint32_t series_count()
const;
182 [[nodiscard]]
const std::string& series_name(uint32_t index)
const;
187 [[nodiscard]] uint64_t series_size(uint32_t index)
const;
198 [[nodiscard]] std::vector<DataDimension> get_dimensions()
const override;
199 [[nodiscard]] uint64_t get_total_elements()
const override;
204 [[nodiscard]] uint64_t get_num_frames()
const override;
216 [[nodiscard]] std::vector<DataVariant> get_region_data(
const Region& region)
const override;
225 void set_region_data(
const Region& region,
const std::vector<DataVariant>& data)
override;
227 [[nodiscard]] std::vector<DataVariant> get_region_group_data(
const RegionGroup& group)
const override;
228 [[nodiscard]] std::vector<DataVariant> get_segments_data(
const std::vector<RegionSegment>& segments)
const override;
232 [[nodiscard]] uint64_t coordinates_to_linear_index(
const std::vector<uint64_t>& coordinates)
const override;
233 [[nodiscard]] std::vector<uint64_t> linear_index_to_coordinates(uint64_t linear_index)
const override;
235 void clear()
override;
237 [[nodiscard]]
const void* get_raw_data()
const override;
238 [[nodiscard]]
bool has_data()
const override;
246 [[nodiscard]] std::unordered_map<std::string, RegionGroup> get_all_region_groups()
const override;
253 [[nodiscard]]
DataAccess channel_data(
size_t index)
override;
254 [[nodiscard]] std::vector<DataAccess> all_channel_data()
override;
263 void register_state_change_callback(
264 std::function<
void(
const std::shared_ptr<SignalSourceContainer>&,
ProcessingState)> cb)
override;
265 void unregister_state_change_callback()
override;
267 [[nodiscard]]
bool is_ready_for_processing()
const override;
268 void mark_ready_for_processing(
bool ready)
override;
270 void create_default_processor()
override;
271 void process_default()
override;
273 void set_default_processor(
const std::shared_ptr<DataProcessor>& processor)
override;
274 [[nodiscard]] std::shared_ptr<DataProcessor> get_default_processor()
const override;
276 [[nodiscard]] std::shared_ptr<DataProcessingChain> get_processing_chain()
override;
280 [[nodiscard]]
const std::vector<DataVariant>&
get_processed_data()
const override {
return m_processed_data; }
281 [[nodiscard]]
const std::vector<DataVariant>&
get_data()
override {
return m_data; }
294 [[nodiscard]]
auto get_frame_span_impl(uint64_t frame_index)
const ->
DataSpanVariant override;
295 void get_frames_impl(
void*
output,
size_t count, uint64_t start_frame, uint64_t num_frames,
const std::type_info& type)
const override;
297 void get_value_impl(
const std::vector<uint64_t>& coords,
298 void* out,
const std::type_info& type)
const override;
300 void set_value_impl(
const std::vector<uint64_t>& coords,
301 const void* in,
const std::type_info& type)
override;
325 std::atomic<ProcessingState> m_processing_state { ProcessingState::IDLE };
326 std::atomic<bool> m_ready_for_processing {
false };
330 [[nodiscard]]
auto get_frame_typed(uint64_t frame_index)
const -> std::span<const double>;
331 void get_frames_typed(std::span<double>
output, uint64_t start_frame, uint64_t num_frames)
const;
Core::GlobalNetworkConfig network
std::shared_ptr< Core::VKImage > output
Type-erased accessor for NDData with semantic view construction.
std::shared_ptr< DataProcessingChain > m_chain
std::vector< DataVariant > m_data
uint32_t register_dimension_reader(uint32_t) override
Register a reader for a specific dimension.
void set_processing_chain(const std::shared_ptr< DataProcessingChain > &chain) override
Set the processing chain for this container.
void unload_region(const Region &) override
Unload a region from memory.
void mark_dimension_consumed(uint32_t, uint32_t) override
Mark a dimension as consumed for the current processing cycle.
const std::vector< DataVariant > & get_processed_data() const override
Get a const reference to the processed data buffer.
MemoryLayout get_memory_layout() const override
Get the memory layout used by this container.
std::function< void(const std::shared_ptr< SignalSourceContainer > &, ProcessingState)> m_state_cb
PlotContainer(PlotContainer &&)=delete
Memory::Seqlock m_cb_lock
void unregister_dimension_reader(uint32_t) override
Unregister a reader for a specific dimension.
std::unordered_map< std::string, RegionGroup > m_region_groups
std::vector< DataVariant > m_processed_data
ContainerDataStructure m_structure
std::type_index value_element_type() const override
Runtime query for the native scalar element type of this container.
bool all_dimensions_consumed() const override
Check if all active dimensions have been consumed in this cycle.
void mark_buffers_for_removal() override
Mark associated buffers for removal from the system.
bool is_region_loaded(const Region &) const override
Check if a region is loaded in memory.
void set_structure(ContainerDataStructure s) override
Set the data structure for this container.
PlotContainer(const PlotContainer &)=delete
std::vector< DataVariant > & get_processed_data() override
Get a mutable reference to the processed data buffer.
Memory::SeqlockArray m_series_locks
void load_region(const Region &) override
Load a region into memory.
void set_memory_layout(MemoryLayout) override
Set the memory layout for this container.
~PlotContainer() override=default
Memory::Seqlock m_region_lock
uint64_t get_frame_size() const override
Get the number of elements that constitute one "frame".
PlotContainer & operator=(PlotContainer &&)=delete
ContainerDataStructure & get_structure() override
Get the data structure defining this container's layout.
std::shared_ptr< DataProcessor > m_processor
const ContainerDataStructure & get_structure() const override
const std::vector< DataVariant > & get_data() override
Get a reference to the raw data stored in the container.
void mark_buffers_for_processing(bool) override
Mark associated buffers for processing in the next cycle.
bool has_active_readers() const override
Check if any dimensions currently have active readers.
PlotContainer & operator=(const PlotContainer &)=delete
SignalSourceContainer holding N named scalar series for plotting and signal use.
DataProcessor that acquires per-series data from heterogeneous sources and writes into PlotContainer:...
Data-driven interface for managing arbitrary processable signal sources.
Indexed collection of independent, equal-ranked Seqlock instances.
Single-writer multiple-reader sequence lock for fixed-size data regions.
ProcessingState
Represents the current processing lifecycle state of a container.
typename detail::span_const_from_vector_variant< DataVariant >::type DataSpanVariant
std::optional< RegionGroup > get_region_group(const std::unordered_map< std::string, RegionGroup > &groups, const std::string &name)
Get a RegionGroup by name from a group map.
DataModality
Data modality types for cross-modal analysis.
void add_region_group(std::unordered_map< std::string, RegionGroup > &groups, const RegionGroup &group)
Add a RegionGroup to a group map.
MemoryLayout
Memory layout for multi-dimensional data.
void remove_region_group(std::unordered_map< std::string, RegionGroup > &groups, const std::string &name)
Remove a RegionGroup by name from a group map.
Contains the node-based computational processing system components.
Container structure for consistent dimension ordering.
Role
Semantic role of the dimension.
Organizes related signal regions into a categorized collection.
Represents a point or span in N-dimensional space.