59 [[nodiscard]] std::vector<DataDimension::Role> get_expected_dimension_roles()
const;
90 [[nodiscard]]
size_t get_expected_variant_count(
const std::vector<DataDimension>& dimensions)
const;
100 [[nodiscard]]
static uint64_t get_variant_size(
const std::vector<DataDimension>& dimensions,
109 [[nodiscard]]
bool validate_dimensions(
const std::vector<DataDimension>& dimensions)
const;
117 [[nodiscard]]
size_t get_dimension_index_for_role(
const std::vector<DataDimension>& dimensions,
125 [[nodiscard]]
static uint64_t get_total_elements(
const std::vector<DataDimension>& dimensions);
133 [[nodiscard]]
static uint64_t get_samples_count(
const std::vector<DataDimension>& dimensions);
141 [[nodiscard]]
static uint64_t get_samples_count_per_channel(
const std::vector<DataDimension>& dimensions);
149 [[nodiscard]]
static uint64_t get_channel_count(
const std::vector<DataDimension>& dimensions);
157 [[nodiscard]]
static uint64_t get_pixels_count(
const std::vector<DataDimension>& dimensions);
165 [[nodiscard]]
static uint64_t get_height(
const std::vector<DataDimension>& dimensions);
173 [[nodiscard]]
static uint64_t get_width(
const std::vector<DataDimension>& dimensions);
181 [[nodiscard]]
static size_t get_frame_count(
const std::vector<DataDimension>& dimensions);
189 [[nodiscard]]
static size_t get_frame_size(
const std::vector<DataDimension>& dimensions);
275 [[nodiscard]]
virtual std::vector<DataVariant>
get_segments_data(
const std::vector<RegionSegment>& segments)
const = 0;
291 return FrameView(get_frame_span_impl(frame_index));
300 template <DataVariantElement T>
303 get_frames_impl(
output.data(),
output.size(), start_frame, num_frames,
typeid(T));
312 template <DataVariantElement T>
313 [[nodiscard]]
auto get_frame_as(uint64_t frame_index)
const -> std::span<const T>
315 return get_frame(frame_index).template as<T>();
334 template <DataVariantElement T>
337 get_frames_impl(
output.data(),
output.size(), start_frame, num_frames,
typeid(T));
365 template <DataVariantElement T>
366 [[nodiscard]] T
get_value_at(
const std::vector<uint64_t>& coordinates)
const
369 get_value_impl(coordinates, &v,
typeid(T));
383 template <DataVariantElement T>
386 set_value_impl(coordinates, &
value,
typeid(T));
512 const std::type_info& type)
const = 0;
523 const std::type_info& type) = 0;
std::shared_ptr< Core::VKImage > output
Zero-copy typed view over one frame of container storage.
virtual std::vector< DataVariant > get_region_group_data(const RegionGroup ®ions) const =0
Get data for multiple regions efficiently.
virtual void set_region_data(const Region ®ion, const std::vector< DataVariant > &data)=0
Set data for a specific region.
void get_frames_as(std::vector< T > &output, uint64_t start_frame, uint64_t num_frames) const
Get multiple frames efficiently as a typed span.
virtual void unload_region(const Region ®ion)=0
Unload a region from memory.
virtual void clear()=0
Clear all data in the container.
virtual void set_value_impl(const std::vector< uint64_t > &coords, const void *in, const std::type_info &type)=0
Type-erased single-element write.
virtual RegionGroup get_region_group(const std::string &name) const =0
Get a region group by name.
virtual void add_region_group(const RegionGroup &group)=0
Add a named group of regions to the container.
virtual void get_frames_impl(void *output, size_t count, uint64_t start_frame, uint64_t num_frames, const std::type_info &type) const =0
Implementation-specific method to retrieve multiple frames.
virtual const ContainerDataStructure & get_structure() const =0
virtual std::type_index value_element_type() const =0
Runtime query for the native scalar element type of this container.
virtual bool has_data() const =0
Check if the container currently holds any data.
void set_value_at(const std::vector< uint64_t > &coordinates, T value)
Write a single element at the given N-dimensional coordinates.
virtual std::vector< DataDimension > get_dimensions() const =0
Get the dimensions describing the structure of the data.
virtual void set_memory_layout(MemoryLayout layout)=0
Set the memory layout for this container.
virtual ContainerDataStructure & get_structure()=0
Get the data structure defining this container's layout.
void get_frames(std::span< T > output, uint64_t start_frame, uint64_t num_frames) const
Get multiple frames efficiently.
virtual void load_region(const Region ®ion)=0
Load a region into memory.
virtual void set_structure(ContainerDataStructure structure)=0
Set the data structure for this container.
T get_value_at(const std::vector< uint64_t > &coordinates) const
Read a single element at the given N-dimensional coordinates.
virtual std::unordered_map< std::string, RegionGroup > get_all_region_groups() const =0
Get all region groups in the container.
virtual bool is_region_loaded(const Region ®ion) const =0
Check if a region is loaded in memory.
virtual void remove_region_group(const std::string &name)=0
Remove a region group by name.
virtual ~NDDataContainer()=default
auto get_frame(uint64_t frame_index) const -> FrameView
Get a single frame of data efficiently.
virtual const void * get_raw_data() const =0
Get a raw pointer to the underlying data storage.
virtual std::vector< DataVariant > get_segments_data(const std::vector< RegionSegment > &segments) const =0
Get data for multiple region segments efficiently.
virtual auto get_frame_span_impl(uint64_t frame_index) const -> DataSpanVariant=0
Implementation-specific method to retrieve a frame span.
virtual std::vector< DataVariant > get_region_data(const Region ®ion) const =0
Get data for a specific region.
virtual MemoryLayout get_memory_layout() const =0
Get the memory layout used by this container.
virtual uint64_t coordinates_to_linear_index(const std::vector< uint64_t > &coordinates) const =0
Convert coordinates to linear index based on current memory layout.
virtual uint64_t get_frame_size() const =0
Get the number of elements that constitute one "frame".
auto get_frame_as(uint64_t frame_index) const -> std::span< const T >
Get a single frame of data as a typed span.
virtual void get_value_impl(const std::vector< uint64_t > &coords, void *out, const std::type_info &type) const =0
Type-erased single-element read.
virtual uint64_t get_total_elements() const =0
Get the total number of elements in the container.
virtual uint64_t get_num_frames() const =0
Get the number of frames in the primary (temporal) dimension.
virtual std::vector< uint64_t > linear_index_to_coordinates(uint64_t linear_index) const =0
Convert linear index to coordinates based on current memory layout.
Abstract interface for N-dimensional data containers.
typename detail::span_const_from_vector_variant< DataVariant >::type DataSpanVariant
DataModality
Data modality types for cross-modal analysis.
MemoryLayout
Memory layout for multi-dimensional data.
OrganizationStrategy
Data organization strategy for multi-channel/multi-frame data.
std::vector< DataDimension > dimensions
size_t get_frame_size() const
uint64_t get_samples_count_per_channel() const
uint64_t get_channel_count() const
uint64_t get_pixels_count() const
uint64_t get_total_elements() const
std::optional< size_t > channel_dims
std::optional< size_t > time_dims
ContainerDataStructure()=default
uint64_t get_height() const
uint64_t get_samples_count() const
std::optional< size_t > width_dims
uint64_t get_variant_size() const
std::optional< size_t > height_dims
uint64_t get_width() const
size_t get_frame_count() const
std::optional< size_t > frequency_dims
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.