|
Blender V4.3
|
#include <BLI_linear_allocator.hh>
Inherits blender::NonCopyable, and blender::NonMovable.
Inherited by blender::index_mask::IndexMaskMemory.
Public Member Functions | |
| LinearAllocator () | |
| ~LinearAllocator () | |
| void * | allocate (const int64_t size, const int64_t alignment) |
| template<typename T > | |
| T * | allocate () |
| template<typename T > | |
| MutableSpan< T > | allocate_array (int64_t size) |
| template<typename T , typename... Args> | |
| destruct_ptr< T > | construct (Args &&...args) |
| template<typename T , typename... Args> | |
| MutableSpan< T > | construct_array (int64_t size, Args &&...args) |
| template<typename T > | |
| MutableSpan< T > | construct_array_copy (Span< T > src) |
| StringRefNull | copy_string (StringRef str) |
| MutableSpan< void * > | allocate_elements_and_pointer_array (int64_t element_amount, int64_t element_size, int64_t element_alignment) |
| template<typename T , typename... Args> | |
| Span< T * > | construct_elements_and_pointer_array (int64_t n, Args &&...args) |
| void | provide_buffer (void *buffer, const int64_t size) |
| template<size_t Size, size_t Alignment> | |
| void | provide_buffer (AlignedBuffer< Size, Alignment > &aligned_buffer) |
| void | free_end_of_previous_allocation (const int64_t original_allocation_size, const void *free_after) |
| void | transfer_ownership_from (LinearAllocator<> &other) |
If enabled, LinearAllocator keeps track of how much memory it owns and how much it has allocated.
Definition at line 27 of file BLI_linear_allocator.hh.
|
inline |
Definition at line 45 of file BLI_linear_allocator.hh.
|
inline |
Definition at line 51 of file BLI_linear_allocator.hh.
References ptr.
|
inline |
Allocate a memory buffer that can hold an instance of T.
This method only allocates memory and does not construct the instance.
Definition at line 97 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate().
Referenced by blender::LinearAllocator< Allocator >::allocate(), blender::LinearAllocator< Allocator >::allocate(), blender::LinearAllocator< Allocator >::allocate_array(), blender::LinearAllocator< Allocator >::allocate_elements_and_pointer_array(), blender::LinearAllocator< Allocator >::construct(), and blender::LinearAllocator< Allocator >::copy_string().
|
inline |
Get a pointer to a memory buffer with the given size an alignment. The memory buffer will be freed when this LinearAllocator is destructed.
The alignment has to be a power of 2.
Definition at line 64 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate(), BLI_assert, and size().
Referenced by blender::ResourceScope::add_destruct_call(), blender::GValueMap< Key >::add_new_by_copy(), blender::GValueMap< Key >::add_new_by_move(), blender::fn::evaluate_fields(), blender::fn::lazy_function::Executor::execute(), blender::nodes::execute_geometry_nodes_on_geometry(), blender::nodes::get_socket_default_value(), blender::nodes::geo_eval_log::GeoTreeLogger::log_value(), blender::fn::multi_function::ValueAllocator::obtain_OneSingle(), blender::fn::multi_function::ValueAllocator::obtain_Span(), blender::nodes::node_geo_bake_cc::LazyFunctionForBakeNode::output_mixed_cached_state(), blender::nodes::node_geo_simulation_cc::sim_output_node::LazyFunctionForSimulationOutputNode::output_mixed_cached_state(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), and blender::tests::TEST().
|
inline |
Allocate a memory buffer that can hold T array with the given size.
This method only allocates memory and does not construct the instance.
Definition at line 107 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate().
Referenced by blender::LinearAllocator< Allocator >::construct_array(), blender::LinearAllocator< Allocator >::construct_array_copy(), blender::index_mask::evaluate_exact_with_indices(), blender::index_mask::IndexMask::from_repeating(), blender::index_mask::IndexMask::from_segments(), blender::index_mask::get_every_nth_index(), blender::fn::multi_function::Procedure::new_call_instruction(), blender::index_mask::segments_from_batch_predicate(), blender::index_mask::segments_from_indices(), blender::index_mask::IndexMask::shift(), blender::tests::TEST(), and blender::tests::TEST().
|
inline |
Definition at line 168 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate(), and POINTER_OFFSET.
Referenced by blender::LinearAllocator< Allocator >::construct_elements_and_pointer_array().
|
inline |
Construct an instance of T in memory provided by this allocator.
Arguments passed to this method will be forwarded to the constructor of T.
You must not call delete on the returned value. Instead, only the destructor has to be called.
Definition at line 121 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate(), and T.
Referenced by blender::fn::lazy_function::Graph::add_function(), blender::fn::lazy_function::Graph::add_input(), blender::fn::lazy_function::Graph::add_output(), blender::linear_allocator::ChunkedList< T, SegmentCapacity >::append_as(), blender::ResourceScope::construct(), blender::fn::multi_function::Procedure::construct_function(), blender::nodes::GeoNodesLFUserData::get_local(), blender::nodes::geo_eval_log::GeoModifierLog::get_local_tree_logger(), blender::fn::lazy_function::Graph::Graph(), blender::fn::lazy_function::GraphExecutor::init_storage(), blender::nodes::LazyFunctionForForeachGeometryElementZone::init_storage(), blender::nodes::LazyFunctionForGroupNode::init_storage(), blender::nodes::LazyFunctionForRepeatZone::init_storage(), blender::nodes::geo_eval_log::GeoTreeLogger::log_value(), blender::nodes::geo_eval_log::GeoTreeLogger::log_viewer_node(), blender::fn::multi_function::Procedure::new_branch_instruction(), blender::fn::multi_function::Procedure::new_call_instruction(), blender::fn::multi_function::Procedure::new_destruct_instruction(), blender::fn::multi_function::Procedure::new_dummy_instruction(), blender::fn::multi_function::Procedure::new_return_instruction(), blender::fn::multi_function::Procedure::new_variable(), blender::ComputeContextBuilder::push(), and blender::tests::TEST().
|
inline |
Construct multiple instances of a type in an array. The constructor of is called with the given arguments. The caller is responsible for calling the destructor (and not delete) on the constructed elements.
Definition at line 134 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate_array(), and T.
Referenced by blender::tests::TEST().
|
inline |
Copy the given array into a memory buffer provided by this allocator.
Definition at line 146 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate_array(), blender::MutableSpan< T >::data(), blender::Span< T >::data(), blender::Span< T >::is_empty(), blender::Span< T >::size(), and blender::uninitialized_copy_n().
Referenced by blender::string_search::StringSearchBase::add_impl(), blender::index_mask::bits_to_indices(), blender::index_mask::detail::segments_from_predicate_filter(), and blender::tests::TEST().
|
inline |
Definition at line 186 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate_elements_and_pointer_array(), blender::MutableSpan< T >::cast(), and T.
Referenced by blender::fn::lazy_function::Graph::add_function(), and blender::tests::TEST().
|
inline |
Copy the given string into a memory buffer provided by this allocator. The returned string is always null terminated.
Definition at line 160 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::allocate(), blender::StringRefBase::size(), and str.
Referenced by blender::string_search::extract_normalized_words(), blender::fn::lazy_function::Graph::Graph(), rna_def_node_item_array_common_functions(), rna_def_node_item_array_new_with_socket_and_name(), rna_def_node_item_array_socket_item_common(), and blender::tests::TEST().
|
inline |
Some algorithms can be implemented more efficiently by over-allocating the destination memory a bit. This allows the algorithm not to worry about having enough memory. Generally, this can be a useful strategy if the actual required memory is not known in advance, but an upper bound can be found. Ideally, one can free the over-allocated memory in the end again to reduce memory consumption.
A linear allocator generally does allow freeing any memory. However, there is one exception. One can free the end of the last allocation (but not any previous allocation). While uses of this approach are quite limited, it's still the best option in some situations.
Definition at line 227 of file BLI_linear_allocator.hh.
References BLI_assert.
Referenced by blender::index_mask::evaluate_exact_with_indices().
|
inline |
Definition at line 211 of file BLI_linear_allocator.hh.
References blender::LinearAllocator< Allocator >::provide_buffer(), and blender::AlignedBuffer< Size, Alignment >::ptr().
|
inline |
Tell the allocator to use up the given memory buffer, before allocating new memory from the system.
Definition at line 203 of file BLI_linear_allocator.hh.
References BLI_assert, blender::Vector< T, InlineBufferCapacity, Allocator >::is_empty(), and size().
Referenced by blender::fn::multi_function::ProcedureExecutor::call(), blender::index_mask::IndexMaskMemory::IndexMaskMemory(), blender::LinearAllocator< Allocator >::provide_buffer(), blender::tests::TEST(), and blender::tests::TEST().
|
inline |
This allocator takes ownership of the buffers owned by other. Therefor, when other is destructed, memory allocated using it is not freed.
Note that the caller is responsible for making sure that buffers passed into provide_buffer of other live at least as long as this allocator.
Definition at line 255 of file BLI_linear_allocator.hh.
References blender::Vector< T, InlineBufferCapacity, Allocator >::extend().
Referenced by blender::index_mask::evaluate_short_unknown_segments_exactly(), blender::index_mask::ParallelSegmentsCollector::reduce(), and blender::tests::TEST().