diff options
author | Jacques Lucke <jacques@blender.org> | 2021-12-17 17:38:15 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-12-17 17:42:28 +0300 |
commit | a3ad5abf2fe85d623f9e78fefc34e27bdc14632e (patch) | |
tree | 6d03a62169251af084ff2e02bd0f567d92f3b826 /source/blender/editors | |
parent | c0d96ca9a5dbf168348b6a6bdee2f635c0c1685c (diff) |
Allocator: simplify using guarded allocator in C++ code
Using the `MEM_*` API from C++ code was a bit annoying:
* When converting C to C++ code, one often has to add a type cast on
returned `void *`. That leads to having the same type name three times
in the same line. This patch reduces the amount to two and removes the
`sizeof(...)` from the line.
* The existing alternative of using `OBJECT_GUARDED_NEW` looks a out
of place compared to other allocation methods. Sometimes
`MEM_CXX_CLASS_ALLOC_FUNCS` can be used when structs are defined
in C++ code. It doesn't look great but it's definitely better. The downside
is that it makes the name of the allocation less useful. That's because
the same name is used for all allocations of a type, independend of
where it is allocated.
This patch introduces three new functions: `MEM_new`, `MEM_cnew` and
`MEM_delete`. These cover the majority of use cases (array allocation is
not covered).
The `OBJECT_GUARDED_*` macros are removed because they are not
needed anymore.
Differential Revision: https://developer.blender.org/D13502
Diffstat (limited to 'source/blender/editors')
5 files changed, 13 insertions, 12 deletions
diff --git a/source/blender/editors/asset/intern/asset_indexer.cc b/source/blender/editors/asset/intern/asset_indexer.cc index 4107d28b5e3..fa55560d3c8 100644 --- a/source/blender/editors/asset/intern/asset_indexer.cc +++ b/source/blender/editors/asset/intern/asset_indexer.cc @@ -742,16 +742,15 @@ static void update_index(const char *filename, FileIndexerEntries *entries, void static void *init_user_data(const char *root_directory, size_t root_directory_maxlen) { - AssetLibraryIndex *library_index = OBJECT_GUARDED_NEW( - AssetLibraryIndex, - StringRef(root_directory, BLI_strnlen(root_directory, root_directory_maxlen))); + AssetLibraryIndex *library_index = MEM_new<AssetLibraryIndex>( + __func__, StringRef(root_directory, BLI_strnlen(root_directory, root_directory_maxlen))); library_index->init_unused_index_files(); return library_index; } static void free_user_data(void *user_data) { - OBJECT_GUARDED_DELETE(user_data, AssetLibraryIndex); + MEM_delete((AssetLibraryIndex *)user_data); } static void filelist_finished(void *user_data) diff --git a/source/blender/editors/asset/intern/asset_temp_id_consumer.cc b/source/blender/editors/asset/intern/asset_temp_id_consumer.cc index f136c08f129..8790c907f05 100644 --- a/source/blender/editors/asset/intern/asset_temp_id_consumer.cc +++ b/source/blender/editors/asset/intern/asset_temp_id_consumer.cc @@ -88,12 +88,13 @@ AssetTempIDConsumer *ED_asset_temp_id_consumer_create(const AssetHandle *handle) } BLI_assert(handle->file_data->asset_data != nullptr); return reinterpret_cast<AssetTempIDConsumer *>( - OBJECT_GUARDED_NEW(AssetTemporaryIDConsumer, *handle)); + MEM_new<AssetTemporaryIDConsumer>(__func__, *handle)); } void ED_asset_temp_id_consumer_free(AssetTempIDConsumer **consumer) { - OBJECT_GUARDED_SAFE_DELETE(*consumer, AssetTemporaryIDConsumer); + MEM_delete(reinterpret_cast<AssetTemporaryIDConsumer *>(*consumer)); + *consumer = nullptr; } ID *ED_asset_temp_id_consumer_ensure_local_id(AssetTempIDConsumer *consumer_, diff --git a/source/blender/editors/interface/interface_view.cc b/source/blender/editors/interface/interface_view.cc index 500834f4434..81b24c75020 100644 --- a/source/blender/editors/interface/interface_view.cc +++ b/source/blender/editors/interface/interface_view.cc @@ -60,7 +60,7 @@ AbstractTreeView *UI_block_add_view(uiBlock &block, StringRef idname, std::unique_ptr<AbstractTreeView> tree_view) { - ViewLink *view_link = OBJECT_GUARDED_NEW(ViewLink); + ViewLink *view_link = MEM_new<ViewLink>(__func__); BLI_addtail(&block.views, view_link); view_link->view = std::move(tree_view); @@ -72,7 +72,7 @@ AbstractTreeView *UI_block_add_view(uiBlock &block, void ui_block_free_views(uiBlock *block) { LISTBASE_FOREACH_MUTABLE (ViewLink *, link, &block->views) { - OBJECT_GUARDED_DELETE(link, ViewLink); + MEM_delete(link); } } diff --git a/source/blender/editors/space_file/asset_catalog_tree_view.cc b/source/blender/editors/space_file/asset_catalog_tree_view.cc index 86c4b78dea4..f6c449a0584 100644 --- a/source/blender/editors/space_file/asset_catalog_tree_view.cc +++ b/source/blender/editors/space_file/asset_catalog_tree_view.cc @@ -679,7 +679,7 @@ using namespace blender::ed::asset_browser; FileAssetCatalogFilterSettingsHandle *file_create_asset_catalog_filter_settings() { - AssetCatalogFilterSettings *filter_settings = OBJECT_GUARDED_NEW(AssetCatalogFilterSettings); + AssetCatalogFilterSettings *filter_settings = MEM_new<AssetCatalogFilterSettings>(__func__); return reinterpret_cast<FileAssetCatalogFilterSettingsHandle *>(filter_settings); } @@ -688,7 +688,8 @@ void file_delete_asset_catalog_filter_settings( { AssetCatalogFilterSettings **filter_settings = reinterpret_cast<AssetCatalogFilterSettings **>( filter_settings_handle); - OBJECT_GUARDED_SAFE_DELETE(*filter_settings, AssetCatalogFilterSettings); + MEM_delete(*filter_settings); + *filter_settings = nullptr; } bool file_set_asset_catalog_filter_settings( diff --git a/source/blender/editors/space_node/node_geometry_attribute_search.cc b/source/blender/editors/space_node/node_geometry_attribute_search.cc index 4890c3e39cf..6f96e08d749 100644 --- a/source/blender/editors/space_node/node_geometry_attribute_search.cc +++ b/source/blender/editors/space_node/node_geometry_attribute_search.cc @@ -125,8 +125,8 @@ void node_geometry_add_attribute_search_button(const bContext &UNUSED(C), 0.0f, ""); - AttributeSearchData *data = OBJECT_GUARDED_NEW( - AttributeSearchData, {&node_tree, &node, (bNodeSocket *)socket_ptr.data}); + AttributeSearchData *data = MEM_new<AttributeSearchData>( + __func__, AttributeSearchData{&node_tree, &node, (bNodeSocket *)socket_ptr.data}); UI_but_func_search_set_results_are_suggestions(but, true); UI_but_func_search_set_sep_string(but, UI_MENU_ARROW_SEP); |