Blender V5.0
VArray< T > Class Template Reference

#include <BLI_virtual_array.hh>

Inherits 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
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

Static Public Member Functions

template<typename ImplT, typename... Args>
static VArray from (Args &&...args)
static VArray from_single (T value, const int64_t size)
static VArray from_span (Span< T > values)
template<typename GetFunc>
static VArray from_func (const int64_t size, GetFunc get_func)
static VArray from_std_func (const int64_t size, std::function< T(int64_t index)> get_func)
template<typename StructT, T(*)(const StructT &) GetFunc>
static VArray from_derived_span (Span< StructT > values)
template<typename ContainerT>
static VArray from_container (ContainerT container)

Additional Inherited Members

Protected Types inherited from blender::VArrayCommon< T >
using Storage = Any<blender::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 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 858 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 866 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 868 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 870 of file BLI_virtual_array.hh.

◆ VArray() [7/7]

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

Definition at line 875 of file BLI_virtual_array.hh.

Member Function Documentation

◆ from()

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

Construct a new virtual array for a custom #VArrayImpl.

Definition at line 883 of file BLI_virtual_array.hh.

Referenced by blender::bke::varray_for_deform_verts().

◆ from_container()

◆ from_derived_span()

template<typename T>
template<typename StructT, T(*)(const StructT &) GetFunc>
VArray blender::VArray< T >::from_derived_span ( 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 931 of file BLI_virtual_array.hh.

Referenced by blender::draw::bmesh_normals_domain().

◆ from_func()

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

Construct a new virtual that will invoke the provided function whenever an element is accessed.

Definition at line 912 of file BLI_virtual_array.hh.

Referenced by blender::nodes::node_geo_input_mesh_face_neighbors_cc::construct_vertex_count_varray().

◆ from_single()

◆ from_span()

template<typename T>
VArray blender::VArray< T >::from_span ( 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 903 of file BLI_virtual_array.hh.

Referenced by blender::nodes::node_geo_input_tangent_cc::construct_curve_tangent_gvarray(), ensure_weight_attribute_meta_data(), blender::geometry::preprocess_meshes(), and blender::ed::greasepencil::subdivide_last_segement().

◆ from_std_func()

template<typename T>
VArray blender::VArray< T >::from_std_func ( const int64_t size,
std::function< T(int64_t index)> get_func )
inlinestatic

Same as from_func, but uses a std::function instead of a template. This is slower, but requires less code generation. Therefore this should be used in non-performance critical code.

Definition at line 921 of file BLI_virtual_array.hh.

◆ operator=() [1/2]

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

Definition at line 949 of file BLI_virtual_array.hh.

◆ operator=() [2/2]

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

Definition at line 955 of file BLI_virtual_array.hh.


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