28class GVMutableArrayImpl;
44 virtual void get(
int64_t index,
void *r_value)
const;
67 virtual void set_all(
const void *src);
81 [](
const void * ) ->
const GVArrayImpl * {
return nullptr; };
112 template<
typename ImplT,
typename... Args>
void emplace(Args &&...args);
121 operator bool()
const;
171 template<
typename T> T
get(
int64_t index)
const;
196 template<
typename ImplT,
typename... Args>
static GVArray For(Args &&...args);
228 template<
typename ImplT,
typename... Args>
static GVMutableArray For(Args &&...args);
233 operator
GVArray() && noexcept;
246 void fill(const
void *value);
268 void *owned_data_ =
nullptr;
282 void *owned_data_ =
nullptr;
283 bool save_has_been_called_ =
false;
284 bool show_not_saved_warning_ =
true;
296 void disable_not_applied_warning();
319 *
static_cast<T *
>(r_value) = varray_[index];
324 new (r_value)
T(varray_[index]);
335 mask,
MutableSpan(
static_cast<T *
>(dst), mask.min_array_size()));
346 mask,
MutableSpan(
static_cast<T *
>(dst), mask.size()));
377 varray_.
get(index, &value);
427 *
static_cast<T *
>(r_value) = varray_[index];
432 new (r_value)
T(varray_[index]);
442 const T &value_ = *(
const T *)value;
443 varray_.
set(index, value_);
448 T &value_ = *
static_cast<T *
>(value);
449 varray_.
set(index, std::move(value_));
455 T &value_ = *
static_cast<T *
>(value);
456 varray_.
set(index, std::move(value_));
461 varray_.
set_all(
Span(
static_cast<const T *
>(src), size_));
472 mask,
MutableSpan(
static_cast<T *
>(dst), mask.min_array_size()));
483 mask,
MutableSpan(
static_cast<T *
>(dst), mask.size()));
513 T get(
const int64_t index)
const override
516 varray_.
get(index, &value);
520 void set(
const int64_t index, T value)
override
525 CommonVArrayInfo common_info()
const override
530 bool try_assign_GVArray(GVArray &varray)
const override
536 bool try_assign_GVMutableArray(GVMutableArray &varray)
const override
542 void materialize(
const IndexMask &mask, T *dst)
const override
547 void materialize_to_uninitialized(
const IndexMask &mask, T *dst)
const override
552 void materialize_compressed(
const IndexMask &mask, T *dst)
const override
557 void materialize_compressed_to_uninitialized(
const IndexMask &mask, T *dst)
const override
571 void *data_ =
nullptr;
578 element_size_(span.type().size())
589 void get(
int64_t index,
void *r_value)
const override;
590 void get_to_uninitialized(
int64_t index,
void *r_value)
const override;
592 void set_by_copy(
int64_t index,
const void *value)
override;
593 void set_by_move(
int64_t index,
void *value)
override;
594 void set_by_relocate(
int64_t index,
void *value)
override;
598 virtual void materialize(
const IndexMask &mask,
void *dst)
const override;
599 virtual void materialize_to_uninitialized(
const IndexMask &mask,
void *dst)
const override;
601 virtual void materialize_compressed(
const IndexMask &mask,
void *dst)
const override;
602 virtual void materialize_compressed_to_uninitialized(
const IndexMask &mask,
603 void *dst)
const override;
608 using GVArrayImpl_For_GSpan::GVArrayImpl_For_GSpan;
624 const void *value_ =
nullptr;
637 void get(
const int64_t index,
void *r_value)
const override;
638 void get_to_uninitialized(
const int64_t index,
void *r_value)
const override;
640 void materialize(
const IndexMask &mask,
void *dst)
const override;
641 void materialize_to_uninitialized(
const IndexMask &mask,
void *dst)
const override;
642 void materialize_compressed(
const IndexMask &mask,
void *dst)
const override;
643 void materialize_compressed_to_uninitialized(
const IndexMask &mask,
void *dst)
const override;
648 using GVArrayImpl_For_SingleValueRef::GVArrayImpl_For_SingleValueRef;
664 : type_(&type), size_(size)
726 static_assert(std::is_base_of_v<GVArrayImpl, ImplT>);
727 if constexpr (std::is_copy_constructible_v<ImplT> && Storage::template is_inline_v<ImplT>) {
731 std::shared_ptr<const GVArrayImpl>
ptr = std::make_shared<ImplT>(std::forward<Args>(args)...);
775inline GVArrayCommon::operator bool()
const
777 return impl_ !=
nullptr;
787 if (
impl_ ==
nullptr) {
795 return this->
size() == 0;
808 if constexpr (UseSingle) {
813 if constexpr (UseSpan) {
815 return fn(
Span<T>(
static_cast<const T *
>(info.
data), size));
845 static_assert(std::is_base_of_v<GVArrayImpl, StorageT> ||
848 if constexpr (std::is_base_of_v<GVArrayImpl, StorageT>) {
849 return {[](
const void *buffer) {
850 return static_cast<const GVArrayImpl *
>((
const StorageT *)buffer);
853 else if constexpr (std::is_same_v<StorageT, const GVArrayImpl *>) {
854 return {[](
const void *buffer) {
return *(
const StorageT *)buffer; }};
856 else if constexpr (std::is_same_v<StorageT, std::shared_ptr<const GVArrayImpl>>) {
857 return {[](
const void *buffer) {
return ((
const StorageT *)buffer)->
get(); }};
868 static_assert(std::is_base_of_v<GVArrayImpl, ImplT>);
894 if (varray.try_assign_GVArray(*
this)) {
928template<
typename ImplT,
typename... Args>
931 static_assert(std::is_base_of_v<GVMutableArrayImpl, ImplT>);
933 varray.
emplace<ImplT>(std::forward<Args>(args)...);
#define BLI_assert_unreachable()
btGeneric6DofConstraint & operator=(btGeneric6DofConstraint &other)
static const CPPType & get()
const CPPType & type() const
const void * data() const
CommonVArrayInfo common_info() const
bool may_have_ownership() const
void emplace(Args &&...args)
GSpan get_internal_span() const
void materialize_compressed_to_uninitialized(const IndexMask &mask, void *dst) const
const GVArrayImpl * impl_from_storage() const
bool try_assign_VArray(VArray< T > &varray) const
void copy_from(const GVArrayCommon &other)
const CPPType & type() const
void move_from(GVArrayCommon &&other) noexcept
void get_to_uninitialized(int64_t index, void *r_value) const
void materialize(void *dst) const
void get_internal_single_to_uninitialized(void *r_value) const
void materialize_to_uninitialized(void *dst) const
void get(int64_t index, void *r_value) const
IndexRange index_range() const
const GVArrayImpl * impl_
void materialize_compressed(const IndexMask &mask, void *dst) const
void get_internal_single(void *r_value) const
GVArrayImpl_For_GSpan(const CPPType &type, int64_t size)
const int64_t element_size_
GVArrayImpl_For_GSpan(const GMutableSpan span)
GVArrayImpl_For_SingleValueRef(const CPPType &type, const int64_t size, const void *value)
GVArrayImpl_For_SingleValueRef(const CPPType &type, const int64_t size)
void materialize(const IndexMask &mask, void *dst) const override
bool try_assign_VArray(void *varray) const override
GVArrayImpl_For_VArray(VArray< T > varray)
void get(const int64_t index, void *r_value) const override
void get_to_uninitialized(const int64_t index, void *r_value) const override
CommonVArrayInfo common_info() const override
void materialize_compressed(const IndexMask &mask, void *dst) const override
void materialize_compressed_to_uninitialized(const IndexMask &mask, void *dst) const override
void materialize_to_uninitialized(const IndexMask &mask, void *dst) const override
virtual void materialize_compressed_to_uninitialized(const IndexMask &mask, void *dst) const
virtual void materialize(const IndexMask &mask, void *dst) const
virtual void get_to_uninitialized(int64_t index, void *r_value) const =0
virtual void materialize_compressed(const IndexMask &mask, void *dst) const
virtual void get(int64_t index, void *r_value) const
virtual bool try_assign_VArray(void *varray) const
GVArrayImpl(const CPPType &type, int64_t size)
virtual CommonVArrayInfo common_info() const
const CPPType & type() const
virtual ~GVArrayImpl()=default
virtual void materialize_to_uninitialized(const IndexMask &mask, void *dst) const
GVArray slice(IndexRange slice) const
static GVArray ForEmpty(const CPPType &type)
static GVArray ForGArray(GArray<> array)
static GVArray ForSingleDefault(const CPPType &type, int64_t size)
GVArray & operator=(const GVArray &other)
static GVArray For(Args &&...args)
GVArray(const GVArray &other)
const GVArrayImpl * get_implementation() const
GVArray(GVArray &&other) noexcept
static GVArray ForSingleRef(const CPPType &type, int64_t size, const void *value)
static GVArray ForSpan(GSpan span)
static GVArray ForSingle(const CPPType &type, int64_t size, const void *value)
VArray< T > typed() const
GVMutableArrayImpl_For_VMutableArray(VMutableArray< T > varray)
void set_by_copy(const int64_t index, const void *value) override
void materialize(const IndexMask &mask, void *dst) const override
bool try_assign_VMutableArray(void *varray) const override
VMutableArray< T > varray_
CommonVArrayInfo common_info() const override
void get(const int64_t index, void *r_value) const override
void materialize_to_uninitialized(const IndexMask &mask, void *dst) const override
bool try_assign_VArray(void *varray) const override
void get_to_uninitialized(const int64_t index, void *r_value) const override
void materialize_compressed_to_uninitialized(const IndexMask &mask, void *dst) const override
void set_by_relocate(const int64_t index, void *value) override
void materialize_compressed(const IndexMask &mask, void *dst) const override
void set_by_move(const int64_t index, void *value) override
void set_all(const void *src) override
virtual bool try_assign_VMutableArray(void *varray) const
virtual void set_all(const void *src)
virtual void set_by_copy(int64_t index, const void *value)
GVMutableArrayImpl(const CPPType &type, int64_t size)
virtual void set_by_relocate(int64_t index, void *value)
virtual void set_by_move(int64_t index, void *value)=0
GVMutableArray(GVMutableArray &&other) noexcept
void set_by_move(int64_t index, void *value)
void set_all(const void *src)
void set_by_copy(int64_t index, const void *value)
GVMutableArray(const GVMutableArray &other)
GVMutableArrayImpl * get_implementation() const
GMutableSpan get_internal_span() const
bool try_assign_VMutableArray(VMutableArray< T > &varray) const
GVMutableArray & operator=(const GVMutableArray &other)
VMutableArray< T > typed() const
static GVMutableArray ForSpan(GMutableSpan span)
static GVMutableArray For(Args &&...args)
void set_by_relocate(int64_t index, void *value)
void materialize(MutableSpan< T > r_span) const
void materialize_compressed_to_uninitialized(const IndexMask &mask, MutableSpan< T > r_span) const
void materialize_to_uninitialized(MutableSpan< T > r_span) const
void materialize_compressed(const IndexMask &mask, MutableSpan< T > r_span) const
CommonVArrayInfo common_info() const
void materialize_compressed_to_uninitialized(const IndexMask &mask, T *dst) const override
void materialize_to_uninitialized(const IndexMask &mask, T *dst) const override
void materialize_compressed(const IndexMask &mask, T *dst) const override
void materialize(const IndexMask &mask, T *dst) const override
bool try_assign_GVArray(GVArray &varray) const override
VArrayImpl_For_GVArray(GVArray varray)
CommonVArrayInfo common_info() const override
T get(const int64_t index) const override
static VArray ForSingle(T value, const int64_t size)
static VArray ForSpan(Span< T > values)
VMutableArrayImpl_For_GVMutableArray(GVMutableArray varray)
void set(const int64_t index, T value)
static VMutableArray ForSpan(MutableSpan< T > values)
bool try_assign_GVMutableArray(GVMutableArray &varray) const
void set_all(Span< T > src)
node_ attributes set("label", ss.str())
constexpr bool is_same_any_v
constexpr bool is_trivial_extended_v< GVArrayImpl_For_GSpan_final >
constexpr bool is_trivial_extended_v< GVArrayImpl_For_SingleValueRef_final >
bool devirtualize(const Fn &fn) const
const GVArrayImpl & varray_impl