Get data for a specific region.
695{
697 return {};
698
699 const size_t layer = (
m_data.size() > 1 && !region.start_coordinates.empty())
700 ? static_cast<size_t>(region.start_coordinates[0])
701 : 0;
702
703 if (layer >=
m_data.size())
704 return {};
705
706 std::optional<std::vector<DataVariant>> result;
708 result = std::visit(
709 [&](const auto& vec) -> std::vector<DataVariant> {
710 using T =
typename std::decay_t<
decltype(vec)>::value_type;
711 if constexpr (std::is_same_v<T, uint8_t>
712 || std::is_same_v<T, uint16_t>
713 || std::is_same_v<T, float>) {
714 auto extracted = extract_region_data<T>(
715 std::span<const T>(vec.data(), vec.size()),
716 region,
719 } else {
720 return {};
721 }
722 },
724 });
725 return result.value_or(std::vector<DataVariant> {});
726}
Memory::SeqlockArray m_slot_locks
ContainerDataStructure m_structure
std::vector< DataVariant > m_data
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.
bool seqlock_read_void(const Seqlock &lock, uint32_t max_attempts, Fn &&fn)
Invoke a void read functor under a Seqlock with a bounded retry count.
std::vector< DataDimension > dimensions