Blender V5.0
blender::GVArrayCommon Class Reference

#include <BLI_generic_virtual_array.hh>

Inherited by blender::GVArray, and blender::GVMutableArray.

Public Member Functions

bool may_have_ownership () const

Protected Types

using Storage = Any<detail::GVArrayAnyExtraInfo, 40, 8>

Protected Member Functions

 GVArrayCommon ()=default

Protected Attributes

const GVArrayImplimpl_ = nullptr
Storage storage_

#GVArrayCommon

 GVArrayCommon (const GVArrayCommon &other)
 GVArrayCommon (GVArrayCommon &&other) noexcept
 GVArrayCommon (const GVArrayImpl *impl)
 GVArrayCommon (std::shared_ptr< const GVArrayImpl > impl)
 ~GVArrayCommon ()
void copy_from (const GVArrayCommon &other)
void move_from (GVArrayCommon &&other) noexcept
const GVArrayImplimpl_from_storage () const
IndexRange index_range () const
void materialize (void *dst) const
void materialize (const IndexMask &mask, void *dst) const
void materialize_to_uninitialized (void *dst) const
void materialize_to_uninitialized (const IndexMask &mask, void *dst) const
void materialize_compressed (const IndexMask &mask, void *dst) const
void materialize_compressed_to_uninitialized (const IndexMask &mask, void *dst) const
bool is_span () const
GSpan get_internal_span () const
bool is_single () const
void get_internal_single (void *r_value) const
void get_internal_single_to_uninitialized (void *r_value) const

Inline methods for #GVArrayCommon.

template<typename ImplT, typename... Args>
void emplace (Args &&...args)
const CPPTypetype () const
 operator bool () const
int64_t size () const
bool is_empty () const
template<typename T>
bool try_assign_VArray (VArray< T > &varray) const
CommonVArrayInfo common_info () const
void get (int64_t index, void *r_value) const
template<typename T>
T get (int64_t index) const
void get_to_uninitialized (int64_t index, void *r_value) const

Detailed Description

Utility class to reduce code duplication between GVArray and GVMutableArray. It pretty much follows VArrayCommon. Don't use this class outside of this header.

Definition at line 91 of file BLI_generic_virtual_array.hh.

Member Typedef Documentation

◆ Storage

See VArrayCommon for more information. The inline buffer is a bit larger here, because generic virtual array implementations often require a bit more space than typed ones.

Definition at line 97 of file BLI_generic_virtual_array.hh.

Constructor & Destructor Documentation

◆ GVArrayCommon() [1/5]

◆ GVArrayCommon() [2/5]

blender::GVArrayCommon::GVArrayCommon ( const GVArrayCommon & other)
protected

Definition at line 548 of file generic_virtual_array.cc.

References GVArrayCommon(), impl_, impl_from_storage(), and storage_.

◆ GVArrayCommon() [3/5]

blender::GVArrayCommon::GVArrayCommon ( GVArrayCommon && other)
protectednoexcept

Definition at line 553 of file generic_virtual_array.cc.

References GVArrayCommon(), impl_, impl_from_storage(), and storage_.

◆ GVArrayCommon() [4/5]

blender::GVArrayCommon::GVArrayCommon ( const GVArrayImpl * impl)
protected

Definition at line 560 of file generic_virtual_array.cc.

References impl_, and storage_.

◆ GVArrayCommon() [5/5]

blender::GVArrayCommon::GVArrayCommon ( std::shared_ptr< const GVArrayImpl > impl)
protected

Definition at line 565 of file generic_virtual_array.cc.

References get(), impl_, and storage_.

◆ ~GVArrayCommon()

blender::GVArrayCommon::~GVArrayCommon ( )
protecteddefault

References GVArrayCommon().

Member Function Documentation

◆ common_info()

◆ copy_from()

void blender::GVArrayCommon::copy_from ( const GVArrayCommon & other)
protected

◆ emplace()

template<typename ImplT, typename... Args>
void blender::GVArrayCommon::emplace ( Args &&... args)
inlineprotected

◆ get() [1/2]

template<typename T>
T blender::GVArrayCommon::get ( int64_t index) const
inline

Returns a copy of the value at the given index. Usually a typed virtual array should be used instead, but sometimes this is simpler when only a few indices are needed.

Definition at line 713 of file BLI_generic_virtual_array.hh.

References BLI_assert, impl_, size(), T, and type().

◆ get() [2/2]

◆ get_internal_single()

void blender::GVArrayCommon::get_internal_single ( void * r_value) const

Copies the value that is used for every element into r_value, which is expected to point to initialized memory. This invokes undefined behavior if the virtual array would not return the same value for every index.

Definition at line 644 of file generic_virtual_array.cc.

References BLI_assert, blender::CPPType::copy_assign(), blender::CommonVArrayInfo::data, impl_, is_single(), and type().

Referenced by blender::bke::CurvesGeometry::adapt_domain(), blender::bke::adapt_mesh_attribute_domain(), and get_internal_single_to_uninitialized().

◆ get_internal_single_to_uninitialized()

void blender::GVArrayCommon::get_internal_single_to_uninitialized ( void * r_value) const

Same as get_internal_single, but r_value points to initialized memory.

Definition at line 651 of file generic_virtual_array.cc.

References get_internal_single(), and impl_.

◆ get_internal_span()

◆ get_to_uninitialized()

◆ impl_from_storage()

const GVArrayImpl * blender::GVArrayCommon::impl_from_storage ( ) const
protected

Definition at line 657 of file generic_virtual_array.cc.

References storage_.

Referenced by copy_from(), GVArrayCommon(), GVArrayCommon(), and move_from().

◆ index_range()

IndexRange blender::GVArrayCommon::index_range ( ) const

◆ is_empty()

bool blender::GVArrayCommon::is_empty ( ) const
inline

◆ is_single()

bool blender::GVArrayCommon::is_single ( ) const

◆ is_span()

bool blender::GVArrayCommon::is_span ( ) const

Returns true when the virtual array is stored as a span internally.

Definition at line 625 of file generic_virtual_array.cc.

References impl_, blender::CommonVArrayInfo::Span, and blender::CommonVArrayInfo::type.

Referenced by blender::nodes::node_geo_instance_on_points_cc::add_instances_from_component(), blender::ed::greasepencil::attributes_varrays_span_data_equal(), blender::bke::build_mesh_positions(), blender::nodes::node_geo_instances_to_points_cc::convert_instances_to_points(), blender::nodes::node_geo_curves_to_grease_pencil_cc::curve_instances_to_grease_pencil_layers(), blender::bke::evaluate_attribute(), blender::fn::evaluate_fields(), blender::bke::gather_attributes(), blender::geometry::gather_realize_tasks_for_instances(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), get_internal_span(), blender::GVMutableArray::get_internal_span(), blender::nodes::node_geo_grease_pencil_to_curves_cc::node_geo_exec(), blender::geometry::prepare_attribute_fallbacks(), blender::geometry::preprocess_curves(), blender::geometry::preprocess_meshes(), blender::geometry::preprocess_pointclouds(), blender::bke::MutableAttributeAccessor::rename(), blender::ed::sculpt_paint::replace_attribute(), blender::bke::save_shared_attribute(), blender::save_shared_attribute(), blender::bke::bake::serialize_attributes(), blender::bke::try_add_shared_field_attribute(), blender::bke::try_direct_evaluate_point_data(), and blender::bke::try_sharing_point_data().

◆ materialize() [1/2]

void blender::GVArrayCommon::materialize ( const IndexMask & mask,
void * dst ) const

Definition at line 579 of file generic_virtual_array.cc.

References impl_, and mask().

◆ materialize() [2/2]

◆ materialize_compressed()

void blender::GVArrayCommon::materialize_compressed ( const IndexMask & mask,
void * dst ) const

Definition at line 595 of file generic_virtual_array.cc.

References impl_, and mask().

◆ materialize_compressed_to_uninitialized()

void blender::GVArrayCommon::materialize_compressed_to_uninitialized ( const IndexMask & mask,
void * dst ) const

Definition at line 600 of file generic_virtual_array.cc.

References impl_, and mask().

◆ materialize_to_uninitialized() [1/2]

void blender::GVArrayCommon::materialize_to_uninitialized ( const IndexMask & mask,
void * dst ) const

Definition at line 589 of file generic_virtual_array.cc.

References BLI_assert, impl_, and mask().

◆ materialize_to_uninitialized() [2/2]

void blender::GVArrayCommon::materialize_to_uninitialized ( void * dst) const

◆ may_have_ownership()

bool blender::GVArrayCommon::may_have_ownership ( ) const

References mask(), and T.

◆ move_from()

void blender::GVArrayCommon::move_from ( GVArrayCommon && other)
protectednoexcept

◆ operator bool()

blender::GVArrayCommon::operator bool ( ) const
inline

Definition at line 742 of file BLI_generic_virtual_array.hh.

References impl_.

◆ size()

◆ try_assign_VArray()

template<typename T>
bool blender::GVArrayCommon::try_assign_VArray ( VArray< T > & varray) const
inline

Definition at line 731 of file BLI_generic_virtual_array.hh.

References BLI_assert, impl_, and T.

Referenced by blender::GVArray::typed().

◆ type()

const CPPType & blender::GVArrayCommon::type ( ) const
inline

Definition at line 737 of file BLI_generic_virtual_array.hh.

References impl_.

Referenced by blender::ed::sculpt_paint::color::active_color_attribute(), blender::bke::adapt_curve_domain_curve_to_point(), blender::bke::adapt_curve_domain_point_to_curve(), blender::bke::CurvesGeometry::adapt_domain(), blender::bke::adapt_domain_and_type_if_necessary(), blender::bke::adapt_mesh_attribute_domain(), blender::bke::adapt_mesh_domain_corner_to_edge(), blender::bke::adapt_mesh_domain_corner_to_face(), blender::bke::adapt_mesh_domain_corner_to_point(), blender::bke::adapt_mesh_domain_edge_to_corner(), blender::bke::adapt_mesh_domain_edge_to_face(), blender::bke::adapt_mesh_domain_edge_to_point(), blender::bke::adapt_mesh_domain_face_to_corner(), blender::bke::adapt_mesh_domain_face_to_edge(), blender::bke::adapt_mesh_domain_face_to_point(), blender::bke::adapt_mesh_domain_point_to_corner(), blender::bke::adapt_mesh_domain_point_to_edge(), blender::bke::adapt_mesh_domain_point_to_face(), blender::fn::multi_function::ParamsBuilder::add_readonly_single_input(), blender::ed::spreadsheet::apply_row_filter(), attr_create_generic(), attr_create_generic(), blender::bke::attribute_init_to_data(), blender::ed::greasepencil::attributes_varrays_not_equal(), bke_attribute_copy_if_exists(), BKE_attribute_duplicate(), BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(), blender::fn::multi_function::tests::GenericAppendFunction::call(), blender::ed::geometry::convert_attribute(), blender::array_utils::copy(), blender::array_utils::copy(), copy_attributes(), blender::bke::copy_curve_domain_attribute_to_mesh(), blender::bke::copy_main_point_domain_attribute_to_mesh(), blender::nodes::node_geo_duplicate_elements_cc::copy_stable_id_curves(), blender::nodes::node_geo_duplicate_elements_cc::copy_stable_id_edges(), blender::nodes::node_geo_duplicate_elements_cc::copy_stable_id_faces(), blender::nodes::node_geo_duplicate_elements_cc::copy_stable_id_point(), blender::bke::copy_with_checked_indices(), blender::geometry::create_id_index_map(), blender::ed::greasepencil::curves_geometry_is_equal(), blender::ed::greasepencil::ensure_selection_domain(), blender::bke::evaluate_attribute(), blender::fn::evaluate_fields(), blender::GVectorArray::extend(), blender::draw::extract_attribute(), blender::draw::extract_attribute_data(), blender::draw::extract_attribute_subdiv(), blender::ed::curves::extrude_curves(), blender::GVMutableArray::fill(), blender::GVArray::from_empty(), blender::GVArray::from_single(), blender::GVArray::from_single_default(), blender::GVArray::from_single_ref(), blender::array_utils::gather(), blender::bke::attribute_math::gather(), blender::geometry::gather_realize_tasks_for_instances(), geometry_attribute_get_tarmat(), get(), get_internal_single(), get_internal_span(), blender::GVMutableArray::get_internal_span(), blender::bke::EvaluateAtIndexInput::get_varray_for_context(), blender::nodes::node_geo_accumulate_field_cc::AccumulateFieldInput::get_varray_for_context(), blender::nodes::node_geo_accumulate_field_cc::TotalFieldInput::get_varray_for_context(), blender::nodes::node_geo_field_average_cc::FieldAverageInput::get_varray_for_context(), blender::nodes::node_geo_field_min_and_max_cc::FieldMinMaxInput::get_varray_for_context(), blender::nodes::node_geo_field_variance_cc::FieldVarianceInput::get_varray_for_context(), blender::GVArray::GVArray(), blender::GVArray::GVArray(), blender::GVArray::GVArray(), blender::nodes::LazyFunctionForReduceForeachGeometryElement::handle_generation_items_group(), blender::ed::mesh::join_normals(), blender::bke::MutableAttributeAccessor::lookup_for_write(), blender::geometry::point_merge_by_distance(), blender::geometry::preprocess_curves(), blender::geometry::preprocess_meshes(), blender::geometry::preprocess_pointclouds(), blender::bke::MutableAttributeAccessor::rename(), blender::geometry::retrieve_attribute_spans(), blender::geometry::retrieve_attribute_spans(), blender::bke::mesh_surface_sample::sample_corner_attribute(), blender::bke::mesh_surface_sample::sample_face_attribute(), blender::bke::mesh_surface_sample::sample_point_attribute(), blender::bke::save_shared_attribute(), blender::save_shared_attribute(), blender::ed::curves::set_attribute_invoke(), blender::ed::pointcloud::set_attribute_invoke(), blender::GVArray::slice(), blender::bke::compare_geometry::sort_domain_using_attributes(), blender::nodes::node_geo_dual_mesh_cc::transfer_attributes(), transform_active_color_data(), blender::bke::DataTypeConversions::try_convert(), blender::bke::DataTypeConversions::try_convert(), blender::bke::try_sharing_point_data(), blender::GVMutableArray::typed(), blender::draw::pbvh::update_generic_attribute_mesh(), blender::bke::compare_geometry::verify_attributes_compatible(), vertex_paint_from_weight(), and vpaint_init_vpaint().

Member Data Documentation

◆ impl_

◆ storage_

Storage blender::GVArrayCommon::storage_
protected

The documentation for this class was generated from the following files: