8#include <range/v3/algorithm/copy.hpp>
9#include <range/v3/range/concepts.hpp>
10#include <range/v3/range/primitives.hpp>
11#include <range/v3/view/common.hpp>
37 std::vector<std::size_t>
const& exclude_positions)
const = 0;
47 std::size_t n_components)
64template <
typename PROP_VAL_TYPE>
79 PROP_VAL_TYPE&
getComponent(std::size_t tuple_index,
int component)
96 std::vector<std::size_t>
const& exclude_positions)
const override
106 constexpr std::size_t
size()
const {
return data_.size(); }
108 constexpr std::ptrdiff_t
ssize()
const {
return std::ssize(
data_); }
112 constexpr const PROP_VAL_TYPE*
data()
const {
return data_.data(); }
113 constexpr PROP_VAL_TYPE*
data() {
return data_.data(); }
118 constexpr const PROP_VAL_TYPE*
cbegin()
const {
return data_.data(); }
119 constexpr const PROP_VAL_TYPE*
cend()
const
124 constexpr const PROP_VAL_TYPE*
end()
const {
return cend(); }
128 if constexpr (std::is_same_v<PROP_VAL_TYPE, bool>)
131 "PropertyVector<bool>::operator[] cannot be "
132 "instantiated for booleans.");
139 constexpr PROP_VAL_TYPE
const&
operator[](std::size_t
const pos)
const
141 if constexpr (std::is_same_v<PROP_VAL_TYPE, bool>)
144 "PropertyVector<bool>::operator[] cannot be "
145 "instantiated for booleans.");
154 constexpr void resize(std::size_t
const size,
const PROP_VAL_TYPE& value)
159 template <
typename R>
160 requires std::ranges::input_range<R> &&
161 std::convertible_to<std::ranges::range_value_t<R>,
165#if __cpp_lib_containers_ranges >= 202202L
166 data_.assign_range(r);
168 if constexpr (ranges::common_range<R>)
170 data_.assign(r.begin(), r.end());
174 data_.assign(ranges::views::common(r).
begin(),
175 ranges::views::common(r).
end());
191 std::size_t n_components)
204 std::string
const& property_name,
206 std::size_t n_components)
208 data_(n_property_values * n_components)
216static_assert(ranges::contiguous_range<PropertyVector<double>>);
217static_assert(ranges::sized_range<PropertyVector<double>>);
229 std::size_t
const offset =
property.size();
230 property.resize(offset + count);
231 return property.begin() + offset;
239template <
typename T,
typename R>
240 requires ranges::sized_range<R> &&
241 std::convertible_to<ranges::range_value_t<R>, T>
244 ranges::copy(values,
extend(property, ranges::size(values)));
virtual PropertyVectorBase * clone(std::vector< std::size_t > const &exclude_positions) const =0
MeshItemType getMeshItemType() const
MeshItemType const _mesh_item_type
PropertyVectorBase(std::string property_name, MeshItemType mesh_item_type, std::size_t n_components)
virtual ~PropertyVectorBase()=default
std::string const _property_name
int getNumberOfGlobalComponents() const
std::string const & getPropertyName() const
std::vector< PROP_VAL_TYPE > data_
constexpr PROP_VAL_TYPE const & operator[](std::size_t const pos) const
constexpr const PROP_VAL_TYPE * end() const
constexpr bool empty() const
constexpr std::ptrdiff_t ssize() const
constexpr std::size_t getNumberOfTuples() const
constexpr PROP_VAL_TYPE * begin()
PropertyVector(std::size_t n_property_values, std::string const &property_name, MeshItemType mesh_item_type, std::size_t n_components)
The constructor taking meta information for the data.
constexpr void assign(R &&r)
PROP_VAL_TYPE & getComponent(std::size_t tuple_index, int component)
Returns the value for the given component stored in the given tuple.
constexpr void resize(std::size_t const size)
constexpr PROP_VAL_TYPE * data()
constexpr PROP_VAL_TYPE & operator[](std::size_t const pos)
constexpr std::size_t size() const
PropertyVector(std::string const &property_name, MeshItemType mesh_item_type, std::size_t n_components)
The constructor taking meta information for the data.
constexpr void resize(std::size_t const size, const PROP_VAL_TYPE &value)
PropertyVectorBase * clone(std::vector< std::size_t > const &exclude_positions) const override
constexpr const PROP_VAL_TYPE * begin() const
constexpr const PROP_VAL_TYPE * data() const
PROP_VAL_TYPE const & getComponent(std::size_t tuple_index, int component) const
Returns the value for the given component stored in the given tuple.
constexpr const PROP_VAL_TYPE * cbegin() const
constexpr const PROP_VAL_TYPE * cend() const
constexpr PROP_VAL_TYPE * end()
std::vector< T > excludeObjectCopy(std::vector< T > const &src_vec, std::vector< std::size_t > const &exclude_positions)
constexpr void appendValues(PropertyVector< T > &property, R &&values)
constexpr std::string vtkGhostTypeString
constexpr auto extend(PropertyVector< T > &property, std::size_t const count)