43 virtual void get(
int64_t index,
void *r_value)
const;
51 bool dst_is_uninitialized)
const;
65 virtual void set_all(
const void *src);
79 [](
const void * ) ->
const GVArrayImpl * {
return nullptr; };
109 template<
typename ImplT,
typename... Args>
void emplace(Args &&...args);
118 operator bool()
const;
175 friend GVMutableArray;
183 GVArray(std::shared_ptr<const GVArrayImpl> impl);
193 template<
typename ImplT,
typename... Args>
static GVArray from(Args &&...args);
225 template<
typename ImplT,
typename... Args>
static GVMutableArray from(Args &&...args);
230 operator
GVArray() && noexcept;
243 void fill(const
void *value);
265 void *owned_data_ =
nullptr;
280 void *owned_data_ =
nullptr;
281 bool save_has_been_called_ =
false;
282 bool show_not_saved_warning_ =
true;
317 *
static_cast<T *
>(r_value) =
varray_[index];
327 const bool dst_is_uninitialized)
const override
329 varray_.get_implementation()->materialize(
mask,
static_cast<T *
>(dst), dst_is_uninitialized);
334 const bool dst_is_uninitialized)
const override
336 varray_.get_implementation()->materialize_compressed(
337 mask,
static_cast<T *
>(dst), dst_is_uninitialized);
385 varray_.get_implementation()->materialize(
mask, dst, dst_is_uninitialized);
390 const bool dst_is_uninitialized)
const override
392 varray_.get_implementation()->materialize_compressed(
mask, dst, dst_is_uninitialized);
410 *
static_cast<T *
>(r_value) =
varray_[index];
425 const T &value_ = *(
const T *)value;
431 T &value_ = *
static_cast<T *
>(value);
432 varray_.set(index, std::move(value_));
438 T &value_ = *
static_cast<T *
>(value);
439 varray_.set(index, std::move(value_));
449 const bool dst_is_uninitialized)
const override
451 varray_.get_implementation()->materialize(
mask,
static_cast<T *
>(dst), dst_is_uninitialized);
456 const bool dst_is_uninitialized)
const override
458 varray_.get_implementation()->materialize_compressed(
459 mask,
static_cast<T *
>(dst), dst_is_uninitialized);
489 T get(
const int64_t index)
const override
492 varray_.
get(index, &value);
496 void set(
const int64_t index,
T value)
override
501 CommonVArrayInfo common_info()
const override
506 bool try_assign_GVArray(GVArray &varray)
const override
512 bool try_assign_GVMutableArray(GVMutableArray &varray)
const override
518 void materialize(
const IndexMask &
mask,
T *dst,
const bool dst_is_uninitialized)
const override
523 void materialize_compressed(
const IndexMask &
mask,
525 const bool dst_is_uninitialized)
const override
557 void get(
int64_t index,
void *r_value)
const override;
558 void get_to_uninitialized(
int64_t index,
void *r_value)
const override;
560 void set_by_copy(
int64_t index,
const void *value)
override;
561 void set_by_move(
int64_t index,
void *value)
override;
562 void set_by_relocate(
int64_t index,
void *value)
override;
566 void materialize(
const IndexMask &
mask,
void *dst,
bool dst_is_uninitialized)
const override;
570 bool dst_is_uninitialized)
const override;
604 void get(
const int64_t index,
void *r_value)
const override;
605 void get_to_uninitialized(
const int64_t index,
void *r_value)
const override;
607 void materialize(
const IndexMask &
mask,
void *dst,
bool dst_is_uninitialized)
const override;
610 bool dst_is_uninitialized)
const override;
656 this->get_impl()->set_by_copy(index, value);
663 this->get_impl()->set_by_move(index, value);
670 this->get_impl()->set_by_relocate(index, value);
677 return this->get_impl()->try_assign_VMutableArray(&varray);
693 static_assert(std::is_base_of_v<GVArrayImpl, ImplT>);
694 if constexpr (std::is_copy_constructible_v<ImplT> && Storage::template is_inline_v<ImplT>) {
698 std::shared_ptr<const GVArrayImpl>
ptr = std::make_shared<ImplT>(std::forward<Args>(args)...);
710 impl_->get(index, r_value);
719 impl_->get(index, &value);
728 impl_->get_to_uninitialized(index, r_value);
734 return impl_->try_assign_VArray(&varray);
739 return impl_->type();
742inline GVArrayCommon::operator bool()
const
744 return impl_ !=
nullptr;
749 return impl_->common_info();
754 if (
impl_ ==
nullptr) {
757 return impl_->size();
762 return this->
size() == 0;
775 if constexpr (UseSingle) {
780 if constexpr (UseSpan) {
812 static_assert(std::is_base_of_v<GVArrayImpl, StorageT> ||
815 if constexpr (std::is_base_of_v<GVArrayImpl, StorageT>) {
816 return {[](
const void *buffer) {
817 return static_cast<const GVArrayImpl *
>((
const StorageT *)buffer);
820 else if constexpr (std::is_same_v<StorageT, const GVArrayImpl *>) {
821 return {[](
const void *buffer) {
return *(
const StorageT *)buffer; }};
823 else if constexpr (std::is_same_v<StorageT, std::shared_ptr<const GVArrayImpl>>) {
824 return {[](
const void *buffer) {
return ((
const StorageT *)buffer)->get(); }};
835 static_assert(std::is_base_of_v<GVArrayImpl, ImplT>);
861 if (varray.try_assign_GVArray(*
this)) {
895template<
typename ImplT,
typename... Args>
898 static_assert(std::is_base_of_v<GVMutableArrayImpl, ImplT>);
900 varray.
emplace<ImplT>(std::forward<Args>(args)...);
#define BLI_assert_unreachable()
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
btGeneric6DofConstraint & operator=(btGeneric6DofConstraint &other)
static const CPPType & get()
const GVMutableArray & varray() const
void disable_not_applied_warning()
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_
Any< detail::GVArrayAnyExtraInfo, 40, 8 > Storage
void materialize_compressed(const IndexMask &mask, void *dst) const
void get_internal_single(void *r_value) const
GVArrayImpl_For_GSpan(const GMutableSpan span)
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, const void *value)
GVArrayImpl_For_SingleValueRef(const CPPType &type, const int64_t size)
bool try_assign_VArray(void *varray) const override
GVArrayImpl_For_VArray(VArray< T > varray)
void materialize(const IndexMask &mask, void *dst, const bool dst_is_uninitialized) const override
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 bool dst_is_uninitialized) const override
virtual void materialize(const IndexMask &mask, void *dst, bool dst_is_uninitialized) const
virtual void get_to_uninitialized(int64_t index, void *r_value) const =0
virtual void get(int64_t index, void *r_value) const
virtual bool try_assign_VArray(void *varray) const
virtual void materialize_compressed(const IndexMask &mask, void *dst, bool dst_is_uninitialized) const
GVArrayImpl(const CPPType &type, int64_t size)
virtual CommonVArrayInfo common_info() const
const CPPType & type() const
virtual ~GVArrayImpl()=default
GVArraySpan(VArray< T > varray)
GVArray slice(IndexRange slice) const
GVArray & operator=(const GVArray &other)
GVArray(const GVArray &other)
static GVArray from_empty(const CPPType &type)
const GVArrayImpl * get_implementation() const
GVArray(GVArray &&other) noexcept
static GVArray from(Args &&...args)
static GVArray from_single_default(const CPPType &type, int64_t size)
static GVArray from_garray(GArray<> array)
VArray< T > typed() const
static GVArray from_single(const CPPType &type, int64_t size, const void *value)
static GVArray from_span(GSpan span)
static GVArray from_single_ref(const CPPType &type, int64_t size, const void *value)
void materialize(const IndexMask &mask, void *dst, const bool dst_is_uninitialized) const override
GVMutableArrayImpl_For_VMutableArray(VMutableArray< T > varray)
void set_by_copy(const int64_t index, const void *value) 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
bool try_assign_VArray(void *varray) const override
void get_to_uninitialized(const int64_t index, void *r_value) const override
void set_by_relocate(const int64_t index, void *value) override
void materialize_compressed(const IndexMask &mask, void *dst, const bool dst_is_uninitialized) 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
static GVMutableArray from_span(GMutableSpan span)
GMutableSpan get_internal_span() const
bool try_assign_VMutableArray(VMutableArray< T > &varray) const
GVMutableArray & operator=(const GVMutableArray &other)
void fill(const void *value)
static GVMutableArray from(Args &&...args)
VMutableArray< T > typed() const
void set_by_relocate(int64_t index, void *value)
NonCopyable(const NonCopyable &other)=delete
NonMovable(NonMovable &&other)=delete
CommonVArrayInfo common_info() const
void materialize(const IndexMask &mask, T *dst, const bool dst_is_uninitialized) const override
void materialize_compressed(const IndexMask &mask, T *dst, const bool dst_is_uninitialized) 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
VArrayImpl(const int64_t size)
static VArray from_single(T value, const int64_t size)
static VArray from_span(Span< T > values)
VMutableArrayImpl_For_GVMutableArray(GVMutableArray varray)
bool try_assign_GVMutableArray(GVMutableArray &varray) const
static VMutableArray from_span(MutableSpan< T > values)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
constexpr bool is_same_any_v
constexpr bool is_trivial_extended_v
bool devirtualize(const Fn &fn) const
const GVArrayImpl & varray_impl