98 [[nodiscard]] std::optional<CompositeSlice>
slice(
size_t start,
size_t count)
const
100 return m_data.slice(start,
count);
108 [[nodiscard]] std::optional<CompositeSlice>
slice(
const Region& region)
const
110 return m_data.slice(region);
120 [[nodiscard]]
bool materialize_next();
126 void seek(
size_t row)
noexcept { m_next_element = std::min(row, m_data.size()); }
129 [[nodiscard]]
size_t position() const noexcept {
return m_next_element; }
132 [[nodiscard]]
bool at_end() const noexcept {
return m_next_element >= m_data.size(); }
141 [[nodiscard]]
size_t batch_size() const noexcept {
return m_batch_size; }
144 [[nodiscard]] std::vector<DataDimension> get_dimensions()
const override;
166 [[nodiscard]] std::vector<CompositeArray> get_region_data(
const Region& region)
const override;
175 [[nodiscard]] std::vector<CompositeArray> get_region_group_data(
const RegionGroup& group)
const override;
185 [[nodiscard]] std::vector<CompositeArray> get_segments_data(
const std::vector<RegionSegment>& segments)
const override;
193 void set_region_data(
const Region& region,
const std::vector<CompositeArray>& data)
override;
207 return m_region_groups;
214 [[nodiscard]]
bool is_region_loaded(
const Region& region)
const override;
223 [[nodiscard]] uint64_t coordinates_to_linear_index(
const std::vector<uint64_t>& coordinates)
const override;
226 [[nodiscard]] std::vector<uint64_t> linear_index_to_coordinates(uint64_t linear_index)
const override;
229 void clear()
override;
232 [[nodiscard]]
const void* get_raw_data()
const override;
235 [[nodiscard]]
bool has_data()
const override {
return !m_data.empty(); }
250 return std::span<const uint8_t> {};
254 void get_frames_impl(
void*,
size_t, uint64_t, uint64_t,
const std::type_info&)
const override { }
257 void get_value_impl(
const std::vector<uint64_t>&,
void*,
const std::type_info&)
const override { }
260 void set_value_impl(
const std::vector<uint64_t>&,
const void*,
const std::type_info&)
override { }
265 size_t m_next_element {};
Owns a sequence of values that share a CompositeLayout.
const ContainerDataStructure & get_structure() const override
Dimensional metadata.
std::unordered_map< std::string, RegionGroup > m_region_groups
void set_batch_size(size_t rows) noexcept
Set the maximum number of elements copied per call.
void load_region(const Region &) override
Elements are already resident in the array.
void get_frames_impl(void *, size_t, uint64_t, uint64_t, const std::type_info &) const override
No frame copies are available for composite elements.
std::optional< CompositeSlice > slice(const Region ®ion) const
Borrow elements selected by a one-dimensional Region.
void set_value_impl(const std::vector< uint64_t > &, const void *, const std::type_info &) override
Write fields through CompositeInsertion.
void unload_region(const Region &) override
Elements remain resident until clear() is called.
void seek(size_t row) noexcept
Set the next source position for materialize_next().
MemoryLayout get_memory_layout() const override
Packed composite elements use row-major storage.
uint64_t get_num_frames() const override
This container has no frame axis.
void set_memory_layout(MemoryLayout) override
Layout changes are not supported for packed composite elements.
CompositeArray m_materialized_data
const CompositeArray & get_materialized_data() const noexcept
Borrow the most recently materialized owning window.
std::type_index value_element_type() const override
Composite elements have no single scalar value type.
const CompositeArray & get_data() const noexcept
Borrow the complete array.
CompositeInsertion insert() noexcept
Create an insertion adapter for the array.
uint64_t get_frame_size() const override
This container has no frame axis.
auto get_frame_span_impl(uint64_t) const -> DataSpanVariant override
No frame span is available for composite elements.
DataFieldTraversal< CompositeArray > traverse(size_t batch_size=1) const noexcept
Create an independent traversal over elements.
ContainerDataStructure & get_structure() override
Mutable dimensional metadata.
uint64_t get_total_elements() const override
Number of composite elements.
bool has_data() const override
Whether the array contains any elements.
std::optional< CompositeSlice > slice(size_t start, size_t count) const
Borrow consecutive elements without copying.
bool at_end() const noexcept
Whether materialize_next() has no more elements.
size_t batch_size() const noexcept
Maximum elements copied by one materialize_next() call.
size_t position() const noexcept
Next element index for materialize_next().
~CompositeContainer() override
void get_value_impl(const std::vector< uint64_t > &, void *, const std::type_info &) const override
Read fields through Composite::get() or Composite::text().
void set_structure(ContainerDataStructure structure) override
Replace dimensional metadata.
std::unordered_map< std::string, RegionGroup > get_all_region_groups() const override
Copy all named region groups.
Owns composite data and a bounded, independently owned window.
Mutable insertion adapter for a CompositeArray.
Shared field description and byte layout for a CompositeArray.
On-demand windowing and field operations over an indexed array.
Abstract interface for N-dimensional data containers.
void remove_region_group(std::unordered_map< std::string, RegionGroup > &groups, const std::string &name)
Remove a RegionGroup by name from a group map.
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.
typename detail::span_const_from_vector_variant< DataVariant >::type DataSpanVariant
MemoryLayout
Memory layout for multi-dimensional data.
void add_region_group(std::unordered_map< std::string, RegionGroup > &groups, const RegionGroup &group)
Add a RegionGroup to a group map.
Container structure for consistent dimension ordering.
Organizes related signal regions into a categorized collection.
Represents a point or span in N-dimensional space.