Blender V4.3
blender::VArrayCommon< T > Class Template Reference

#include <BLI_virtual_array.hh>

Inherited by blender::VArray< T >, and blender::VMutableArray< T >.

Public Member Functions

 operator bool () const
 
T operator[] (const int64_t index) const
 
T get (const int64_t index) const
 
int64_t size () const
 
T first () const
 
T last (const int64_t n=0) const
 
bool is_empty () const
 
IndexRange index_range () const
 
CommonVArrayInfo common_info () const
 
bool is_span () const
 
Span< Tget_internal_span () const
 
bool is_single () const
 
T get_internal_single () const
 
std::optional< Tget_if_single () const
 
void materialize (MutableSpan< T > r_span) const
 
void materialize (const IndexMask &mask, MutableSpan< T > r_span) const
 
void materialize_to_uninitialized (MutableSpan< T > r_span) const
 
void materialize_to_uninitialized (const IndexMask &mask, MutableSpan< T > r_span) const
 
void materialize_compressed (const IndexMask &mask, MutableSpan< T > r_span) const
 
void materialize_compressed_to_uninitialized (const IndexMask &mask, MutableSpan< T > r_span) const
 
bool try_assign_GVArray (GVArray &varray) const
 
const VArrayImpl< T > * get_implementation () const
 

Protected Types

using Storage = Any<blender::detail::VArrayAnyExtraInfo<T>, 24, 8>
 

Protected Member Functions

 VArrayCommon ()=default
 
 VArrayCommon (const VArrayCommon &other)
 
 VArrayCommon (VArrayCommon &&other) noexcept
 
 VArrayCommon (const VArrayImpl< T > *impl)
 
 VArrayCommon (std::shared_ptr< const VArrayImpl< T > > impl)
 
template<typename ImplT , typename... Args>
void emplace (Args &&...args)
 
void copy_from (const VArrayCommon &other)
 
void move_from (VArrayCommon &&other) noexcept
 
const VArrayImpl< T > * impl_from_storage () const
 

Protected Attributes

const VArrayImpl< T > * impl_ = nullptr
 
Storage storage_
 

Detailed Description

template<typename T>
class blender::VArrayCommon< T >

Utility class to reduce code duplication for methods available on #VArray and #VMutableArray. Deriving #VMutableArray from #VArray would have some issues:

  • Static methods on #VArray would also be available on #VMutableArray.
  • It would allow assigning a #VArray to a #VMutableArray under some circumstances which is not allowed and could result in hard to find bugs.

Definition at line 496 of file BLI_virtual_array.hh.

Member Typedef Documentation

◆ Storage

template<typename T >
using blender::VArrayCommon< T >::Storage = Any<blender::detail::VArrayAnyExtraInfo<T>, 24, 8>
protected

Store the virtual array implementation in an #Any. This makes it easy to avoid a memory allocation if the implementation is small enough and is copyable. This is the case for the most common virtual arrays. Other virtual array implementations are typically stored as #std::shared_ptr. That works even when the implementation itself is not copyable and makes copying VArrayCommon cheaper.

Definition at line 505 of file BLI_virtual_array.hh.

Constructor & Destructor Documentation

◆ VArrayCommon() [1/5]

template<typename T >
blender::VArrayCommon< T >::VArrayCommon ( )
protecteddefault

◆ VArrayCommon() [2/5]

template<typename T >
blender::VArrayCommon< T >::VArrayCommon ( const VArrayCommon< T > & other)
inlineprotected

◆ VArrayCommon() [3/5]

template<typename T >
blender::VArrayCommon< T >::VArrayCommon ( VArrayCommon< T > && other)
inlineprotectednoexcept

◆ VArrayCommon() [4/5]

template<typename T >
blender::VArrayCommon< T >::VArrayCommon ( const VArrayImpl< T > * impl)
inlineprotected

Wrap an existing #VArrayImpl and don't take ownership of it. This should rarely be used in practice.

Definition at line 541 of file BLI_virtual_array.hh.

References blender::VArrayCommon< T >::impl_, and blender::VArrayCommon< T >::storage_.

◆ VArrayCommon() [5/5]

template<typename T >
blender::VArrayCommon< T >::VArrayCommon ( std::shared_ptr< const VArrayImpl< T > > impl)
inlineprotected

Wrap an existing #VArrayImpl that is contained in a #std::shared_ptr. This takes ownership.

Definition at line 549 of file BLI_virtual_array.hh.

References impl, and blender::VArrayCommon< T >::storage_.

Member Function Documentation

◆ common_info()

◆ copy_from()

template<typename T >
void blender::VArrayCommon< T >::copy_from ( const VArrayCommon< T > & other)
inlineprotected

◆ emplace()

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

◆ first()

template<typename T >
T blender::VArrayCommon< T >::first ( ) const
inline

Get the first element.

Definition at line 653 of file BLI_virtual_array.hh.

◆ get()

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

◆ get_if_single()

◆ get_implementation()

template<typename T >
const VArrayImpl< T > * blender::VArrayCommon< T >::get_implementation ( ) const
inline

Definition at line 773 of file BLI_virtual_array.hh.

References blender::VArrayCommon< T >::impl_.

◆ get_internal_single()

◆ get_internal_span()

template<typename T >
Span< T > blender::VArrayCommon< T >::get_internal_span ( ) const
inline

◆ impl_from_storage()

◆ index_range()

◆ is_empty()

◆ is_single()

template<typename T >
bool blender::VArrayCommon< T >::is_single ( ) const
inline

Return true when the virtual array returns the same value for every index.

Definition at line 702 of file BLI_virtual_array.hh.

References BLI_assert, blender::VArrayCommon< T >::impl_, blender::CommonVArrayInfo::Single, and blender::CommonVArrayInfo::type.

Referenced by blender::nodes::node_geo_instance_on_points_cc::add_instances_from_component(), BKE_mesh_material_index_used(), BKE_sculpt_sync_face_visibility_to_grids(), blender::io::obj::OBJMesh::calc_face_order(), blender::geometry::convert_curves_to_nurbs(), corner_tris_no_hidden_map_get(), blender::nodes::node_geo_points_to_curves_cc::curve_from_points(), blender::nodes::node_geo_points_to_curves_cc::curves_from_points(), blender::nodes::node_geo_curve_fill_cc::do_group_aware_cdt(), blender::ed::curves::duplicate_points(), everything_selected(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_edges(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_face_regions(), blender::fn::FieldEvaluator::get_evaluated_as_mask(), blender::VArrayCommon< T >::get_internal_single(), blender::io::usd::get_loops_polys(), blender::nodes::node_geo_curve_topology_points_of_curve_cc::PointsOfCurveInput::get_varray_for_context(), blender::nodes::node_geo_input_curve_handles_cc::HandlePositionFieldInput::get_varray_for_context(), blender::nodes::node_geo_mesh_face_group_boundaries_cc::BoundaryFieldInput::get_varray_for_context(), blender::nodes::node_geo_mesh_topology_corners_of_edge_cc::CornersOfEdgeInput::get_varray_for_context(), blender::nodes::node_geo_mesh_topology_corners_of_face_cc::CornersOfFaceInput::get_varray_for_context(), blender::nodes::node_geo_mesh_topology_corners_of_vertex_cc::CornersOfVertInput::get_varray_for_context(), blender::nodes::node_geo_mesh_topology_edges_of_vertex_cc::EdgesOfVertInput::get_varray_for_context(), blender::bke::mesh_hide_face_flush(), blender::bke::mesh_hide_vert_flush(), blender::bke::mesh_select_edge_flush(), blender::bke::mesh_select_face_flush(), blender::bke::mesh_select_vert_flush(), blender::nodes::node_geo_sort_elements_cc::sorted_indices(), blender::nodes::node_geo_curve_subdivide_cc::subdivide_curves(), blender::nodes::node_geo_curve_subdivide_cc::subdivide_grease_pencil_curves(), blender::tests::TEST(), and blender::tests::TEST().

◆ is_span()

◆ last()

template<typename T >
T blender::VArrayCommon< T >::last ( const int64_t n = 0) const
inline

Get the nth last element.

Definition at line 660 of file BLI_virtual_array.hh.

References blender::VArrayCommon< T >::size().

◆ materialize() [1/2]

template<typename T >
void blender::VArrayCommon< T >::materialize ( const IndexMask & mask,
MutableSpan< T > r_span ) const
inline

Copy some indices of the virtual array into a span.

Definition at line 739 of file BLI_virtual_array.hh.

References BLI_assert, blender::MutableSpan< T >::data(), and blender::VArrayCommon< T >::impl_.

◆ materialize() [2/2]

◆ materialize_compressed()

◆ materialize_compressed_to_uninitialized()

◆ materialize_to_uninitialized() [1/2]

template<typename T >
void blender::VArrayCommon< T >::materialize_to_uninitialized ( const IndexMask & mask,
MutableSpan< T > r_span ) const
inline

◆ materialize_to_uninitialized() [2/2]

◆ move_from()

template<typename T >
void blender::VArrayCommon< T >::move_from ( VArrayCommon< T > && other)
inlineprotectednoexcept

◆ operator bool()

template<typename T >
blender::VArrayCommon< T >::operator bool ( ) const
inline

Return false when there is no virtual array implementation currently.

Definition at line 612 of file BLI_virtual_array.hh.

References blender::VArrayCommon< T >::impl_.

◆ operator[]()

template<typename T >
T blender::VArrayCommon< T >::operator[] ( const int64_t index) const
inline

Get the element at a specific index.

Note
This can't return a reference because the value may be computed on the fly. This also implies that one can not use this method for assignments.

Definition at line 622 of file BLI_virtual_array.hh.

References BLI_assert, blender::VArrayCommon< T >::impl_, and blender::VArrayCommon< T >::size().

◆ size()

template<typename T >
int64_t blender::VArrayCommon< T >::size ( ) const
inline

Return the size of the virtual array. It's allowed to call this method even when there is no virtual array. In this case 0 is returned.

Definition at line 643 of file BLI_virtual_array.hh.

References blender::VArrayCommon< T >::impl_.

Referenced by blender::array_utils::booleans_mix_calc(), collect_vertex_counts_per_poly(), blender::ed::greasepencil::compute_topology_change(), blender::ed::curves::contains(), blender::array_utils::copy(), blender::io::usd::copy_blender_buffer_to_primvar(), blender::array_utils::count_booleans(), blender::array_utils::count_booleans(), blender::ed::greasepencil::create_curves_outline(), blender::nodes::node_geo_points_to_curves_cc::curve_from_points(), blender::deform_drawing_as_envelope(), blender::VArrayDevirtualizer< T, UseSingle, UseSpan >::devirtualize(), blender::nodes::node_geo_curve_fill_cc::do_group_aware_cdt(), blender::VArray< T >::ForSingle(), blender::index_mask::IndexMask::from_bools(), blender::index_mask::IndexMask::from_group_ids(), blender::index_mask::IndexMask::from_group_ids(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::fn::FieldEvaluator::get_evaluated_as_mask(), blender::ed::greasepencil::grease_pencil_weight_invert_exec(), blender::GVMutableArray::GVMutableArray(), blender::VArrayCommon< T >::index_range(), blender::VArrayCommon< T >::is_empty(), blender::VArrayCommon< T >::last(), blender::VArrayCommon< T >::materialize(), blender::VArrayCommon< T >::materialize_to_uninitialized(), blender::VArrayCommon< T >::operator[](), blender::VMutableArray< T >::set(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::geometry::trim_curves(), blender::ed::sculpt_paint::greasepencil::trim_end_points(), blender::VArray< T >::VArray(), blender::VArraySpan< T >::VArraySpan(), and blender::VArraySpan< T >::VArraySpan().

◆ try_assign_GVArray()

template<typename T >
bool blender::VArrayCommon< T >::try_assign_GVArray ( GVArray & varray) const
inline

See #GVArrayImpl::try_assign_GVArray.

Definition at line 768 of file BLI_virtual_array.hh.

References blender::VArrayCommon< T >::impl_.

Member Data Documentation

◆ impl_

◆ storage_

template<typename T >
Storage blender::VArrayCommon< T >::storage_
protected

Does the memory management for the virtual array implementation. It contains one of the following:

  • Inlined subclass of #VArrayImpl.
  • Non-owning pointer to a #VArrayImpl.
  • Shared pointer to a #VArrayImpl.

Definition at line 518 of file BLI_virtual_array.hh.

Referenced by blender::VArrayCommon< T >::copy_from(), blender::VArrayCommon< T >::emplace(), blender::VArrayCommon< T >::impl_from_storage(), blender::VArrayCommon< T >::move_from(), blender::VArrayCommon< T >::VArrayCommon(), and blender::VArrayCommon< T >::VArrayCommon().


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