Blender  V3.3
Public Member Functions | Static Public Member Functions | List of all members
blender::VArray< T > Class Template Reference

#include <BLI_virtual_array.hh>

Inheritance diagram for blender::VArray< T >:
blender::VArrayCommon< T >

Public Member Functions

 VArray ()=default
 
 VArray (const VArray &other)=default
 
 VArray (VArray &&other) noexcept=default
 
 VArray (const VArrayImpl< T > *impl)
 
 VArray (std::shared_ptr< const VArrayImpl< T >> impl)
 
 VArray (varray_tag::span, Span< T > span)
 
 VArray (varray_tag::single, T value, const int64_t size)
 
VArrayoperator= (const VArray &other)
 
VArrayoperator= (VArray &&other) noexcept
 
- Public Member Functions inherited from blender::VArrayCommon< T >
 operator bool () const
 
T operator[] (const int64_t index) const
 
T get (const int64_t index) const
 
int64_t size () 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
 
bool is_same (const VArrayCommon< T > &other) const
 
void materialize (MutableSpan< T > r_span) const
 
void materialize (IndexMask mask, MutableSpan< T > r_span) const
 
void materialize_to_uninitialized (MutableSpan< T > r_span) const
 
void materialize_to_uninitialized (IndexMask mask, MutableSpan< T > r_span) const
 
void materialize_compressed (IndexMask mask, MutableSpan< T > r_span) const
 
void materialize_compressed_to_uninitialized (IndexMask mask, MutableSpan< T > r_span) const
 
bool try_assign_GVArray (GVArray &varray) const
 

Static Public Member Functions

template<typename ImplT , typename... Args>
static VArray For (Args &&...args)
 
static VArray ForSingle (T value, const int64_t size)
 
static VArray ForSpan (Span< T > values)
 
template<typename GetFunc >
static VArray ForFunc (const int64_t size, GetFunc get_func)
 
template<typename StructT , T(*)(const StructT &) GetFunc>
static VArray ForDerivedSpan (Span< StructT > values)
 
template<typename ContainerT >
static VArray ForContainer (ContainerT container)
 

Additional Inherited Members

- Protected Types inherited from blender::VArrayCommon< T >
using Storage = Any< detail::VArrayAnyExtraInfo< T >, 24, 8 >
 
- Protected Member Functions inherited from blender::VArrayCommon< T >
 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 inherited from blender::VArrayCommon< T >
const VArrayImpl< T > * impl_ = nullptr
 
Storage storage_
 

Detailed Description

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

A VArray wraps a virtual array implementation and provides easy access to its elements. It can be copied and moved. While it is relatively small, it should still be passed by reference if possible (other than e.g. #Span).

Definition at line 883 of file BLI_virtual_array.hh.

Constructor & Destructor Documentation

◆ VArray() [1/7]

template<typename T >
blender::VArray< T >::VArray ( )
default

◆ VArray() [2/7]

template<typename T >
blender::VArray< T >::VArray ( const VArray< T > &  other)
default

◆ VArray() [3/7]

template<typename T >
blender::VArray< T >::VArray ( VArray< T > &&  other)
defaultnoexcept

◆ VArray() [4/7]

template<typename T >
blender::VArray< T >::VArray ( const VArrayImpl< T > *  impl)
inline

Definition at line 891 of file BLI_virtual_array.hh.

◆ VArray() [5/7]

template<typename T >
blender::VArray< T >::VArray ( std::shared_ptr< const VArrayImpl< T >>  impl)
inline

Definition at line 895 of file BLI_virtual_array.hh.

◆ VArray() [6/7]

template<typename T >
blender::VArray< T >::VArray ( varray_tag::span  ,
Span< T span 
)
inline

Definition at line 899 of file BLI_virtual_array.hh.

References blender::Span< T >::data(), blender::Span< T >::size(), and T.

◆ VArray() [7/7]

template<typename T >
blender::VArray< T >::VArray ( varray_tag::single  ,
T  value,
const int64_t  size 
)
inline

Definition at line 907 of file BLI_virtual_array.hh.

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

Member Function Documentation

◆ For()

template<typename T >
template<typename ImplT , typename... Args>
static VArray blender::VArray< T >::For ( Args &&...  args)
inlinestatic

Construct a new virtual array for a custom #VArrayImpl.

Definition at line 915 of file BLI_virtual_array.hh.

Referenced by blender::VArray< T >::ForFunc().

◆ ForContainer()

template<typename T >
template<typename ContainerT >
static VArray blender::VArray< T >::ForContainer ( ContainerT  container)
inlinestatic

Construct a new virtual array for an existing container. Every container that lays out the elements in a plain array works. This takes ownership of the passed in container. If that is not desired, use ForSpan instead.

Definition at line 967 of file BLI_virtual_array.hh.

Referenced by blender::nodes::node_geo_input_mesh_vertex_neighbors_cc::construct_face_count_gvarray(), blender::nodes::node_geo_input_mesh_face_neighbors_cc::construct_neighbor_count_gvarray(), blender::nodes::node_geo_uv_unwrap_cc::construct_uv_gvarray(), blender::nodes::node_geo_uv_pack_islands_cc::construct_uv_gvarray(), blender::nodes::node_geo_input_mesh_vertex_neighbors_cc::construct_vertex_count_gvarray(), blender::nodes::node_geo_edge_paths_to_selection_cc::PathToEdgeSelectionFieldInput::get_varray_for_context(), blender::nodes::node_geo_curve_handle_type_selection_cc::HandleTypeFieldInput::get_varray_for_context(), blender::nodes::node_geo_field_at_index_cc::FieldAtIndex::get_varray_for_context(), blender::nodes::node_geo_input_curve_handles_cc::HandlePositionFieldInput::get_varray_for_context(), blender::nodes::node_geo_accumulate_field_cc::AccumulateFieldInput< T >::get_varray_for_context(), blender::nodes::node_geo_accumulate_field_cc::TotalFieldInput< T >::get_varray_for_context(), blender::nodes::node_geo_input_mesh_edge_neighbors_cc::EdgeNeighborCountFieldInput::get_varray_for_context(), blender::nodes::node_geo_input_mesh_island_cc::IslandFieldInput::get_varray_for_context(), blender::bke::mesh_normals_varray(), and blender::tests::TEST().

◆ ForDerivedSpan()

template<typename T >
template<typename StructT , T(*)(const StructT &) GetFunc>
static VArray blender::VArray< T >::ForDerivedSpan ( Span< StructT >  values)
inlinestatic

Construct a new virtual array for an existing span with a mapping function. This does not take ownership of the span.

Definition at line 954 of file BLI_virtual_array.hh.

References blender::Span< T >::data(), and blender::Span< T >::size().

◆ ForFunc()

template<typename T >
template<typename GetFunc >
static VArray blender::VArray< T >::ForFunc ( const int64_t  size,
GetFunc  get_func 
)
inlinestatic

◆ ForSingle()

template<typename T >
static VArray blender::VArray< T >::ForSingle ( T  value,
const int64_t  size 
)
inlinestatic

◆ ForSpan()

template<typename T >
static VArray blender::VArray< T >::ForSpan ( Span< T values)
inlinestatic

Construct a new virtual array for an existing span. This does not take ownership of the underlying memory.

Definition at line 935 of file BLI_virtual_array.hh.

References blender::VArray< T >::VArray().

Referenced by blender::bke::get_varray_attribute(), blender::bke::make_array_read_attribute(), blender::bke::mesh_normals_varray(), blender::tests::TEST(), blender::bke::NormalAttributeProvider::try_get_for_read(), and blender::GVArray::typed().

◆ operator=() [1/2]

template<typename T >
VArray& blender::VArray< T >::operator= ( const VArray< T > &  other)
inline

Definition at line 972 of file BLI_virtual_array.hh.

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

◆ operator=() [2/2]

template<typename T >
VArray& blender::VArray< T >::operator= ( VArray< T > &&  other)
inlinenoexcept

Definition at line 978 of file BLI_virtual_array.hh.

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


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