Blender V4.3
blender::linear_allocator::ChunkedList< T, SegmentCapacity > Class Template Reference

#include <BLI_linear_allocator_chunked_list.hh>

Inherits blender::NonCopyable.

Classes

class  ConstIterator
 
class  MutableIterator
 

Public Member Functions

 ChunkedList ()=default
 
 ChunkedList (ChunkedList &&other)
 
 ~ChunkedList ()
 
ChunkedListoperator= (ChunkedList &&other)
 
void append (LinearAllocator<> &allocator, const T &value)
 
void append (LinearAllocator<> &allocator, T &&value)
 
template<typename... Args>
void append_as (LinearAllocator<> &allocator, Args &&...args)
 
ConstIterator begin () const
 
ConstIterator end () const
 
MutableIterator begin ()
 
MutableIterator end ()
 

Detailed Description

template<typename T, int64_t SegmentCapacity = 4>
class blender::linear_allocator::ChunkedList< T, SegmentCapacity >

This is a special purpose container data structure that can be used to efficiently gather many elements into many (small) lists for later retrieval. Insertion order is not maintained.

To use this data structure, one has to have a separate #LinearAllocator which is passed to the append function. This allows the same allocator to be used by many lists. Passing it into the append function also removes the need to store the allocator pointer in every list.

It is an improvement over #Vector because it does not require any reallocations. #VectorList could also be used to overcome the reallocation issue.

This data structure is also an improvement over #VectorList because:

  • It has a much lower memory footprint when empty.
  • Allows using a #LinearAllocator for all allocations, without storing the pointer to it in every vector.
  • It wastes less memory due to over-allocations.

Definition at line 51 of file BLI_linear_allocator_chunked_list.hh.

Constructor & Destructor Documentation

◆ ChunkedList() [1/2]

template<typename T , int64_t SegmentCapacity = 4>
blender::linear_allocator::ChunkedList< T, SegmentCapacity >::ChunkedList ( )
default

◆ ChunkedList() [2/2]

template<typename T , int64_t SegmentCapacity = 4>
blender::linear_allocator::ChunkedList< T, SegmentCapacity >::ChunkedList ( ChunkedList< T, SegmentCapacity > && other)
inline

Definition at line 59 of file BLI_linear_allocator_chunked_list.hh.

◆ ~ChunkedList()

template<typename T , int64_t SegmentCapacity = 4>
blender::linear_allocator::ChunkedList< T, SegmentCapacity >::~ChunkedList ( )
inline

Member Function Documentation

◆ append() [1/2]

template<typename T , int64_t SegmentCapacity = 4>
void blender::linear_allocator::ChunkedList< T, SegmentCapacity >::append ( LinearAllocator<> & allocator,
const T & value )
inline

Add an element to the list. The insertion order is not maintained. The given allocator is used to allocate any extra memory that may be needed.

Definition at line 94 of file BLI_linear_allocator_chunked_list.hh.

References blender::linear_allocator::ChunkedList< T, SegmentCapacity >::append_as().

Referenced by blender::linear_allocator::tests::TEST(), blender::linear_allocator::tests::TEST(), and blender::linear_allocator::tests::TEST().

◆ append() [2/2]

template<typename T , int64_t SegmentCapacity = 4>
void blender::linear_allocator::ChunkedList< T, SegmentCapacity >::append ( LinearAllocator<> & allocator,
T && value )
inline

◆ append_as()

◆ begin() [1/2]

template<typename T , int64_t SegmentCapacity = 4>
MutableIterator blender::linear_allocator::ChunkedList< T, SegmentCapacity >::begin ( )
inline

Definition at line 179 of file BLI_linear_allocator_chunked_list.hh.

◆ begin() [2/2]

template<typename T , int64_t SegmentCapacity = 4>
ConstIterator blender::linear_allocator::ChunkedList< T, SegmentCapacity >::begin ( ) const
inline

Definition at line 169 of file BLI_linear_allocator_chunked_list.hh.

◆ end() [1/2]

template<typename T , int64_t SegmentCapacity = 4>
MutableIterator blender::linear_allocator::ChunkedList< T, SegmentCapacity >::end ( )
inline

Definition at line 184 of file BLI_linear_allocator_chunked_list.hh.

◆ end() [2/2]

template<typename T , int64_t SegmentCapacity = 4>
ConstIterator blender::linear_allocator::ChunkedList< T, SegmentCapacity >::end ( ) const
inline

Definition at line 174 of file BLI_linear_allocator_chunked_list.hh.

◆ operator=()

template<typename T , int64_t SegmentCapacity = 4>
ChunkedList & blender::linear_allocator::ChunkedList< T, SegmentCapacity >::operator= ( ChunkedList< T, SegmentCapacity > && other)
inline

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