From 8dd1eb4e8f701dc0c3ddcb68e6af31244c55ddea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 12 Dec 2024 12:43:14 +0100 Subject: [PATCH] =?UTF-8?q?Refactor:=20Core,=20give=20the=20`IDWALK=5F?= =?UTF-8?q?=E2=80=A6`=20enum=20an=20explicit=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Give the `IDWALK_…` enum an explicit name: `LibraryForeachIDFlag`. This way the flags are type-safe, and it's known where values come from. This is much preferred (at least by me) to just having `int flags`. Uses of `0` have been replaced with `IDWALK_NOP` as that has the same value and is of the right type. One invalid use of `IDWALK_CB_NOP` was detected by this change, and is replaced by `IDWALK_NOP`. This change might be incomplete; I gave the enum a name, and then fixed the compiler errors. No functional changes. Pull Request: https://projects.blender.org/blender/blender/pulls/131865 --- source/blender/blenkernel/BKE_lib_query.hh | 9 ++++---- source/blender/blenkernel/intern/action.cc | 2 +- source/blender/blenkernel/intern/blendfile.cc | 2 +- source/blender/blenkernel/intern/lib_query.cc | 12 +++++------ source/blender/blenkernel/intern/lib_remap.cc | 21 +++++++++---------- source/blender/blenkernel/intern/main.cc | 6 ++++-- source/blender/blenloader/intern/readfile.cc | 14 +++++++------ .../python/intern/bpy_rna_id_collection.cc | 2 +- 8 files changed, 36 insertions(+), 32 deletions(-) diff --git a/source/blender/blenkernel/BKE_lib_query.hh b/source/blender/blenkernel/BKE_lib_query.hh index 7cce905e5c7..6019178666e 100644 --- a/source/blender/blenkernel/BKE_lib_query.hh +++ b/source/blender/blenkernel/BKE_lib_query.hh @@ -157,7 +157,7 @@ struct LibraryIDLinkCallbackData { using LibraryIDLinkCallback = int(LibraryIDLinkCallbackData *cb_data); /* Flags for the foreach function itself. */ -enum { +enum LibraryForeachIDFlag { IDWALK_NOP = 0, /** * The callback will never modify the ID pointers it processes. @@ -229,6 +229,7 @@ enum { * proper lib_linking and expanding of older files). */ IDWALK_DO_DEPRECATED_POINTERS = (1 << 11), }; +ENUM_OPERATORS(LibraryForeachIDFlag, IDWALK_DO_DEPRECATED_POINTERS); /** * Check whether current iteration over ID usages should be stopped or not. @@ -236,7 +237,7 @@ enum { */ bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data); void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int cb_flag); -int BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data); +LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data); Main *BKE_lib_query_foreachid_process_main_get(const LibraryForeachIDData *data); int BKE_lib_query_foreachid_process_callback_flag_override(LibraryForeachIDData *data, int cb_flag, @@ -307,7 +308,7 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef callback, void *user_data, - int flag); + LibraryForeachIDFlag flag); /** * Apply `callback` to all ID usages of the data as defined by `subdata_foreach_id`. Useful to e.g. @@ -345,7 +346,7 @@ void BKE_library_foreach_subdata_id( blender::FunctionRef subdata_foreach_id, blender::FunctionRef callback, void *user_data, - const int flag); + const LibraryForeachIDFlag flag); /** * Re-usable function, use when replacing ID's. diff --git a/source/blender/blenkernel/intern/action.cc b/source/blender/blenkernel/intern/action.cc index aa340efc245..909f9b6f54a 100644 --- a/source/blender/blenkernel/intern/action.cc +++ b/source/blender/blenkernel/intern/action.cc @@ -256,7 +256,7 @@ static void action_foreach_id(ID *id, LibraryForeachIDData *data) * NOTE: early-returns by BKE_LIB_FOREACHID_PROCESS_... macros are forbidden in non-readonly * cases (see #IDWALK_RET_STOP_ITER documentation). */ - const int flag = BKE_lib_query_foreachid_process_flags_get(data); + const LibraryForeachIDFlag flag = BKE_lib_query_foreachid_process_flags_get(data); const bool is_readonly = flag & IDWALK_READONLY; constexpr int idwalk_flags = IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK; diff --git a/source/blender/blenkernel/intern/blendfile.cc b/source/blender/blenkernel/intern/blendfile.cc index 90806606c7b..f1ea1d2e582 100644 --- a/source/blender/blenkernel/intern/blendfile.cc +++ b/source/blender/blenkernel/intern/blendfile.cc @@ -779,7 +779,7 @@ static void reuse_bmain_data_invalid_local_usages_fix(ReuseOldBMainData *reuse_d nullptr; BKE_library_foreach_ID_link( - new_bmain, id_iter, reuse_bmain_data_invalid_local_usages_fix_cb, reuse_data, 0); + new_bmain, id_iter, reuse_bmain_data_invalid_local_usages_fix_cb, reuse_data, IDWALK_NOP); /* Liboverrides who lost their reference should not be liboverrides anymore, but regular IDs. */ diff --git a/source/blender/blenkernel/intern/lib_query.cc b/source/blender/blenkernel/intern/lib_query.cc index 773c5ff5caf..bb493594231 100644 --- a/source/blender/blenkernel/intern/lib_query.cc +++ b/source/blender/blenkernel/intern/lib_query.cc @@ -44,7 +44,7 @@ struct LibraryForeachIDData { ID *self_id; /** Flags controlling the behavior of the 'foreach id' looping code. */ - int flag; + LibraryForeachIDFlag flag; /** Generic flags to be passed to all callback calls for current processed data. */ int cb_flag; /** Callback flags that are forbidden for all callback calls for current processed data. */ @@ -117,7 +117,7 @@ void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int } } -int BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data) +LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data) { return data->flag; } @@ -146,7 +146,7 @@ static bool library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef callback, void *user_data, - int flag, + LibraryForeachIDFlag flag, LibraryForeachIDData *inherit_data); void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void *user_data) @@ -210,7 +210,7 @@ static bool library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef callback, void *user_data, - int flag, + LibraryForeachIDFlag flag, LibraryForeachIDData *inherit_data) { LibraryForeachIDData data{}; @@ -415,7 +415,7 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef callback, void *user_data, - int flag) + const LibraryForeachIDFlag flag) { library_foreach_ID_link(bmain, nullptr, id, callback, user_data, flag, nullptr); } @@ -438,7 +438,7 @@ void BKE_library_foreach_subdata_id( blender::FunctionRef subdata_foreach_id, blender::FunctionRef callback, void *user_data, - const int flag) + const LibraryForeachIDFlag flag) { BLI_assert((flag & (IDWALK_RECURSE | IDWALK_DO_INTERNAL_RUNTIME_POINTERS | IDWALK_DO_LIBRARY_POINTER | IDWALK_INCLUDE_UI)) == 0); diff --git a/source/blender/blenkernel/intern/lib_remap.cc b/source/blender/blenkernel/intern/lib_remap.cc index e1711335321..bdfcb551e86 100644 --- a/source/blender/blenkernel/intern/lib_remap.cc +++ b/source/blender/blenkernel/intern/lib_remap.cc @@ -496,17 +496,16 @@ static void libblock_remap_data( }; const bool include_ui = (remap_flags & ID_REMAP_FORCE_UI_POINTERS) != 0; - const int foreach_id_flags = (((remap_flags & ID_REMAP_FORCE_INTERNAL_RUNTIME_POINTERS) != 0 ? - IDWALK_DO_INTERNAL_RUNTIME_POINTERS : - IDWALK_NOP) | - (include_ui ? IDWALK_INCLUDE_UI : IDWALK_NOP) | + const LibraryForeachIDFlag foreach_id_flags = + (((remap_flags & ID_REMAP_FORCE_INTERNAL_RUNTIME_POINTERS) != 0 ? + IDWALK_DO_INTERNAL_RUNTIME_POINTERS : + IDWALK_NOP) | + (include_ui ? IDWALK_INCLUDE_UI : IDWALK_NOP) | - ((remap_flags & ID_REMAP_NO_ORIG_POINTERS_ACCESS) != 0 ? - IDWALK_NO_ORIG_POINTERS_ACCESS : - IDWALK_NOP) | - ((remap_flags & ID_REMAP_DO_LIBRARY_POINTERS) != 0 ? - IDWALK_DO_LIBRARY_POINTER : - IDWALK_NOP)); + ((remap_flags & ID_REMAP_NO_ORIG_POINTERS_ACCESS) != 0 ? IDWALK_NO_ORIG_POINTERS_ACCESS : + IDWALK_NOP) | + ((remap_flags & ID_REMAP_DO_LIBRARY_POINTERS) != 0 ? IDWALK_DO_LIBRARY_POINTER : + IDWALK_NOP)); id_remapper.iter(libblock_remap_reset_remapping_status_fn); @@ -915,7 +914,7 @@ static void libblock_relink_to_newid_prepare_data(Main *bmain, id->tag &= ~ID_TAG_NEW; relink_data->ids.append(id); - BKE_library_foreach_ID_link(bmain, id, id_relink_to_newid_looper, relink_data, 0); + BKE_library_foreach_ID_link(bmain, id, id_relink_to_newid_looper, relink_data, IDWALK_NOP); } void BKE_libblock_relink_to_newid(Main *bmain, ID *id, const int remap_flag) diff --git a/source/blender/blenkernel/intern/main.cc b/source/blender/blenkernel/intern/main.cc index b9ddfeec23f..074e1c522a1 100644 --- a/source/blender/blenkernel/intern/main.cc +++ b/source/blender/blenkernel/intern/main.cc @@ -558,8 +558,10 @@ void BKE_main_relations_create(Main *bmain, const short flag) ID *id; FOREACH_MAIN_ID_BEGIN (bmain, id) { - const int idwalk_flag = IDWALK_READONLY | - ((flag & MAINIDRELATIONS_INCLUDE_UI) != 0 ? IDWALK_INCLUDE_UI : 0); + const LibraryForeachIDFlag idwalk_flag = IDWALK_READONLY | + ((flag & MAINIDRELATIONS_INCLUDE_UI) != 0 ? + IDWALK_INCLUDE_UI : + IDWALK_NOP); /* Ensure all IDs do have an entry, even if they are not connected to any other. */ MainIDRelationsEntry **entry_p; diff --git a/source/blender/blenloader/intern/readfile.cc b/source/blender/blenloader/intern/readfile.cc index e401a856818..be47cc4c9eb 100644 --- a/source/blender/blenloader/intern/readfile.cc +++ b/source/blender/blenloader/intern/readfile.cc @@ -3334,8 +3334,10 @@ static void lib_link_all(FileData *fd, Main *bmain) if ((id->tag & ID_TAG_NEED_LINK) != 0) { /* Not all original pointer values can be considered as valid. * Handling of DNA deprecated data should never be needed in undo case. */ - const int flag = IDWALK_NO_ORIG_POINTERS_ACCESS | IDWALK_INCLUDE_UI | - ((fd->flags & FD_FLAGS_IS_MEMFILE) ? 0 : IDWALK_DO_DEPRECATED_POINTERS); + const LibraryForeachIDFlag flag = IDWALK_NO_ORIG_POINTERS_ACCESS | IDWALK_INCLUDE_UI | + ((fd->flags & FD_FLAGS_IS_MEMFILE) ? + IDWALK_NOP : + IDWALK_DO_DEPRECATED_POINTERS); BKE_library_foreach_ID_link(bmain, id, lib_link_cb, &reader, flag); after_liblink_id_process(&reader, id); @@ -4248,10 +4250,10 @@ void BLO_expand_main(void *fdhandle, Main *mainvar, BLOExpandDoitCallback callba * Expanding should _not_ require processing of UI ID pointers. * Expanding should never modify ID pointers themselves. * Handling of DNA deprecated data should never be needed in undo case. */ - const int flag = IDWALK_READONLY | IDWALK_NO_ORIG_POINTERS_ACCESS | - ((!fd || (fd->flags & FD_FLAGS_IS_MEMFILE)) ? - 0 : - IDWALK_DO_DEPRECATED_POINTERS); + const LibraryForeachIDFlag flag = IDWALK_READONLY | IDWALK_NO_ORIG_POINTERS_ACCESS | + ((!fd || (fd->flags & FD_FLAGS_IS_MEMFILE)) ? + IDWALK_NOP : + IDWALK_DO_DEPRECATED_POINTERS); BKE_library_foreach_ID_link(nullptr, id_iter, expand_cb, &expander, flag); do_it = true; diff --git a/source/blender/python/intern/bpy_rna_id_collection.cc b/source/blender/python/intern/bpy_rna_id_collection.cc index 82508bc25c0..c2750329cb9 100644 --- a/source/blender/python/intern/bpy_rna_id_collection.cc +++ b/source/blender/python/intern/bpy_rna_id_collection.cc @@ -247,7 +247,7 @@ static PyObject *bpy_user_map(PyObject * /*self*/, PyObject *args, PyObject *kwd data_cb.id_curr = id; BKE_library_foreach_ID_link( - nullptr, id, foreach_libblock_id_user_map_callback, &data_cb, IDWALK_CB_NOP); + nullptr, id, foreach_libblock_id_user_map_callback, &data_cb, IDWALK_NOP); if (data_cb.py_id_curr) { Py_DECREF(data_cb.py_id_curr);