43 const CompositeLayout& layout);
75 [[nodiscard]]
size_t size() const noexcept
77 return std::get<std::vector<uint8_t>>(*m_elements).size() / m_layout->stride_bytes();
84 [[nodiscard]] std::optional<Composite> at(
size_t index)
const noexcept;
86 [[nodiscard]] std::span<const uint8_t>
element_bytes() const noexcept;
88 [[nodiscard]] const
DataVariant& element_data() const noexcept {
return *m_elements; }
98 [[nodiscard]] std::vector<DataDimension> byte_dimensions()
const;
105 [[nodiscard]] std::optional<CompositeSlice> slice(
size_t start,
size_t count)
const noexcept;
111 [[nodiscard]] std::optional<CompositeSlice> slice(
const Region& region)
const;
119 : m_elements(&elements)
162 [[nodiscard]]
size_t size() const noexcept {
return m_count; }
164 [[nodiscard]]
size_t start() const noexcept {
return m_start; }
172 [[nodiscard]] std::optional<Composite> at(
size_t index)
const noexcept;
174 [[nodiscard]] std::span<const uint8_t>
element_bytes() const noexcept;
176 [[nodiscard]] const
DataVariant& text_data() const noexcept {
return m_access.text_data(); }
182 return m_region ? &*m_region :
nullptr;
193 template <
typename T>
195 [[nodiscard]] std::optional<CompositeProjection> to_nddata(std::string_view field_name)
const;
201 std::optional<Region> region = std::nullopt)
205 , m_region(
std::move(region))
219 const auto field_index = layout().find_field(field_name);
220 if (!field_index || layout().fields()[*field_index].
type != std::type_index(
typeid(T)))
223 std::vector<T>
values(m_count);
224 std::vector<uint8_t> presence(m_count, 0);
225 for (
size_t i = 0; i < m_count; ++i) {
226 const auto element = at(i);
229 if (
auto value = element->get<T>(field_name)) {
237 result.
presence = std::move(presence);
246 const auto selection = slice(0,
size());
247 return selection ? selection->to_nddata<T>(field_name) : std::nullopt;
std::vector< std::byte > values
vk::PhysicalDeviceType type
CompositeAccess(const DataVariant &elements, const DataVariant &text, const DataVariant &blob, const CompositeLayout &layout) noexcept
const DataVariant * m_elements
const DataVariant & blob_data() const noexcept
Borrow the binary byte DataVariant without conversion.
const CompositeLayout & layout() const noexcept
Layout used to interpret packed elements.
const DataVariant * m_text
size_t size() const noexcept
Number of packed elements in the current element store.
const DataVariant * m_blob
const DataVariant & text_data() const noexcept
Borrow the UTF-8 byte DataVariant without conversion.
const CompositeLayout * m_layout
Validated, non-owning access to packed Composite NDData storage.
std::optional< CompositeProjection > to_nddata(std::string_view field_name) const
Materialize one exact-type numeric field as homogeneous NDData.
Shared field description and byte layout for a CompositeArray.
const DataVariant & blob_data() const noexcept
Borrow the full binary store used by selected elements.
size_t size() const noexcept
Number of selected elements.
CompositeSlice(CompositeAccess access, size_t start, size_t count, std::optional< Region > region=std::nullopt)
const CompositeLayout & layout() const noexcept
Shared layout of all selected elements.
const Region * region() const noexcept
Original Region when selected by Region; otherwise nullptr.
size_t start() const noexcept
First element index in the source access view.
std::optional< Region > m_region
std::optional< CompositeProjection > to_nddata(std::string_view field_name) const
Materialize one exact-type arithmetic field as homogeneous NDData.
Borrowed consecutive elements, optionally selected by a Region.
Concept to constrain types to valid DataVariant elements.
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.
DataModality
Data modality types for cross-modal analysis.
@ TENSOR_ND
N-dimensional tensor.
std::optional< CompositeAccess > as_composite_access(const DataVariant &elements, const DataVariant &text, const DataVariant &blob, const CompositeLayout &layout)
Validate and borrow packed Composite-compatible NDData.
DataVariant values
Homogeneous values of the requested field type.
DataVariant presence
One byte per value.
DataModality modality
Projection modality.
std::vector< DataDimension > dimensions
One CUSTOM axis named for the field.
Owning homogeneous NDData projection of one Composite field.
@ CUSTOM
User-defined or application-specific.
Represents a point or span in N-dimensional space.