From efd2e762f7b8a023ec339887b9ae3dcc164c0e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 12 Dec 2024 15:20:22 +0100 Subject: [PATCH] =?UTF-8?q?Refactor:=20Core,=20give=20the=20`IDWALK=5FCB?= =?UTF-8?q?=5F=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_CB_…` enum an explicit name: `LibraryForeachIDCallbackFlag`. 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_CB_NOP` as that has the same value and is of the right type. One invalid use of `IDWALK_NOP` was detected by this change, and is replaced by `IDWALK_CB_NOP`. This change might be incomplete; I gave the enum a name, fixed the compiler errors, and then also updated assignments like `int cb_flag = cb_data->cb_flag`. I might have missed some assignments to `int` though. No functional changes. Pull Request: https://projects.blender.org/blender/blender/pulls/131865 --- .../blenkernel/BKE_gpencil_modifier_legacy.h | 4 ++- source/blender/blenkernel/BKE_lib_query.hh | 11 +++--- source/blender/blenkernel/BKE_main.hh | 4 ++- source/blender/blenkernel/BKE_modifier.hh | 7 +++- source/blender/blenkernel/BKE_particle.h | 4 ++- source/blender/blenkernel/BKE_rigidbody.h | 4 ++- source/blender/blenkernel/BKE_shader_fx.h | 4 ++- source/blender/blenkernel/intern/action.cc | 2 +- .../blender/blenkernel/intern/collection.cc | 10 +++--- .../intern/gpencil_modifier_legacy.cc | 2 +- source/blender/blenkernel/intern/lib_id.cc | 8 ++--- source/blender/blenkernel/intern/lib_query.cc | 36 ++++++++++--------- source/blender/blenkernel/intern/lib_remap.cc | 4 +-- source/blender/blenkernel/intern/main.cc | 2 +- .../blender/blenkernel/intern/mesh_convert.cc | 2 +- source/blender/blenkernel/intern/modifier.cc | 4 +-- source/blender/blenkernel/intern/object.cc | 17 ++++----- .../blenkernel/intern/particle_system.cc | 2 +- source/blender/blenkernel/intern/scene.cc | 5 +-- source/blender/blenkernel/intern/shader_fx.cc | 4 +-- source/blender/blenloader/intern/writefile.cc | 2 +- .../intern/builder/deg_builder_nodes.cc | 2 +- .../intern/builder/deg_builder_nodes.h | 4 ++- .../intern/builder/deg_builder_relations.cc | 2 +- .../intern/builder/deg_builder_relations.h | 4 ++- .../blender/editors/animation/anim_filter.cc | 5 ++- .../blender/editors/render/render_opengl.cc | 2 +- .../editors/space_outliner/space_outliner.cc | 10 +++--- .../modifiers/intern/MOD_surfacedeform.cc | 2 +- .../python/intern/bpy_rna_id_collection.cc | 2 +- .../windowmanager/intern/wm_operators.cc | 2 +- 31 files changed, 102 insertions(+), 71 deletions(-) diff --git a/source/blender/blenkernel/BKE_gpencil_modifier_legacy.h b/source/blender/blenkernel/BKE_gpencil_modifier_legacy.h index 5421ab293e3..a93c967ba8b 100644 --- a/source/blender/blenkernel/BKE_gpencil_modifier_legacy.h +++ b/source/blender/blenkernel/BKE_gpencil_modifier_legacy.h @@ -9,6 +9,8 @@ #include "DNA_gpencil_modifier_types.h" /* Needed for all enum type definitions. */ +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */ + #ifdef __cplusplus extern "C" { #endif @@ -24,7 +26,7 @@ struct Object; typedef void (*GreasePencilIDWalkFunc)(void *user_data, struct Object *ob, struct ID **idpoin, - int cb_flag); + LibraryForeachIDCallbackFlag cb_flag); /** * Free grease pencil modifier data diff --git a/source/blender/blenkernel/BKE_lib_query.hh b/source/blender/blenkernel/BKE_lib_query.hh index 6019178666e..7888896b811 100644 --- a/source/blender/blenkernel/BKE_lib_query.hh +++ b/source/blender/blenkernel/BKE_lib_query.hh @@ -31,7 +31,7 @@ struct LibraryForeachIDData; struct Main; /* Tips for the callback for cases it's gonna to modify the pointer. */ -enum { +enum LibraryForeachIDCallbackFlag { IDWALK_CB_NOP = 0, IDWALK_CB_NEVER_NULL = (1 << 0), IDWALK_CB_NEVER_SELF = (1 << 1), @@ -114,6 +114,7 @@ enum { IDWALK_CB_OVERRIDE_LIBRARY_HIERARCHY_DEFAULT = (1 << 18), }; +ENUM_OPERATORS(LibraryForeachIDCallbackFlag, IDWALK_CB_OVERRIDE_LIBRARY_HIERARCHY_DEFAULT); enum { IDWALK_RET_NOP = 0, @@ -146,7 +147,7 @@ struct LibraryIDLinkCallbackData { */ ID *self_id; ID **id_pointer; - int cb_flag; + LibraryForeachIDCallbackFlag cb_flag; }; /** @@ -236,11 +237,13 @@ ENUM_OPERATORS(LibraryForeachIDFlag, IDWALK_DO_DEPRECATED_POINTERS); * \return true if the iteration should be stopped, false otherwise. */ bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data); -void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int cb_flag); +void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, + ID **id_pp, + LibraryForeachIDCallbackFlag cb_flag); 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, + LibraryForeachIDCallbackFlag cb_flag, bool do_replace); /** Should typically only be used when processing deprecated ID types (like IPO ones). */ diff --git a/source/blender/blenkernel/BKE_main.hh b/source/blender/blenkernel/BKE_main.hh index dafa5e9748d..97ca06f97f2 100644 --- a/source/blender/blenkernel/BKE_main.hh +++ b/source/blender/blenkernel/BKE_main.hh @@ -25,6 +25,8 @@ #include "BLI_compiler_attrs.h" #include "BLI_sys_types.h" +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */ + struct BLI_mempool; struct BlendThumbnail; struct GHash; @@ -59,7 +61,7 @@ struct MainIDRelationsEntryItem { /* Session uid of the `id_pointer`. */ uint session_uid; - int usage_flag; /* Using IDWALK_ enums, defined in BKE_lib_query.hh */ + LibraryForeachIDCallbackFlag usage_flag; /* Using IDWALK_ enums, defined in BKE_lib_query.hh */ }; struct MainIDRelationsEntry { diff --git a/source/blender/blenkernel/BKE_modifier.hh b/source/blender/blenkernel/BKE_modifier.hh index cec93fd0ab0..b9acd19e771 100644 --- a/source/blender/blenkernel/BKE_modifier.hh +++ b/source/blender/blenkernel/BKE_modifier.hh @@ -11,6 +11,8 @@ #include "BLI_math_matrix_types.hh" #include "BLI_span.hh" +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */ + #include "DNA_modifier_types.h" /* Needed for all enum type definitions. */ #include "DNA_customdata_types.h" @@ -128,7 +130,10 @@ enum ModifierTypeFlag { }; ENUM_OPERATORS(ModifierTypeFlag, eModifierTypeFlag_AcceptsGreasePencil) -using IDWalkFunc = void (*)(void *user_data, Object *ob, ID **idpoin, int cb_flag); +using IDWalkFunc = void (*)(void *user_data, + Object *ob, + ID **idpoin, + LibraryForeachIDCallbackFlag cb_flag); using TexWalkFunc = void (*)(void *user_data, Object *ob, ModifierData *md, diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index eb6f228a2af..235530bd380 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -17,6 +17,8 @@ #include "BLI_ordered_edge.hh" #include "BLI_utildefines.h" +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */ + #include "DNA_particle_types.h" #ifdef __cplusplus @@ -533,7 +535,7 @@ void particle_system_update(struct Depsgraph *depsgraph, typedef void (*ParticleSystemIDFunc)(struct ParticleSystem *psys, struct ID **idpoin, void *userdata, - int cb_flag); + LibraryForeachIDCallbackFlag cb_flag); void BKE_particlesystem_id_loop(struct ParticleSystem *psys, ParticleSystemIDFunc func, diff --git a/source/blender/blenkernel/BKE_rigidbody.h b/source/blender/blenkernel/BKE_rigidbody.h index f4ddb3adeb0..e6a60a5a125 100644 --- a/source/blender/blenkernel/BKE_rigidbody.h +++ b/source/blender/blenkernel/BKE_rigidbody.h @@ -9,6 +9,8 @@ #pragma once +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */ + #ifdef __cplusplus extern "C" { #endif @@ -59,7 +61,7 @@ void BKE_rigidbody_object_copy(struct Main *bmain, typedef void (*RigidbodyWorldIDFunc)(struct RigidBodyWorld *rbw, struct ID **idpoin, void *userdata, - int cb_flag); + LibraryForeachIDCallbackFlag cb_flag); void BKE_rigidbody_world_id_loop(struct RigidBodyWorld *rbw, RigidbodyWorldIDFunc func, diff --git a/source/blender/blenkernel/BKE_shader_fx.h b/source/blender/blenkernel/BKE_shader_fx.h index b639e911df8..3b0a3664d5c 100644 --- a/source/blender/blenkernel/BKE_shader_fx.h +++ b/source/blender/blenkernel/BKE_shader_fx.h @@ -10,6 +10,8 @@ #include "BLI_compiler_attrs.h" #include "DNA_shader_fx_types.h" /* Needed for all enum type definitions. */ +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */ + #ifdef __cplusplus extern "C" { #endif @@ -54,7 +56,7 @@ typedef enum { typedef void (*ShaderFxIDWalkFunc)(void *user_data, struct Object *ob, struct ID **idpoin, - int cb_flag); + LibraryForeachIDCallbackFlag cb_flag); typedef void (*ShaderFxTexWalkFunc)(void *user_data, struct Object *ob, struct ShaderFxData *fx, diff --git a/source/blender/blenkernel/intern/action.cc b/source/blender/blenkernel/intern/action.cc index 909f9b6f54a..7359f84258e 100644 --- a/source/blender/blenkernel/intern/action.cc +++ b/source/blender/blenkernel/intern/action.cc @@ -259,7 +259,7 @@ static void action_foreach_id(ID *id, LibraryForeachIDData *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; + constexpr LibraryForeachIDCallbackFlag idwalk_flags = IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK; Main *bmain = BKE_lib_query_foreachid_process_main_get(data); diff --git a/source/blender/blenkernel/intern/collection.cc b/source/blender/blenkernel/intern/collection.cc index 1cb2131b5e5..4204bf5ed8b 100644 --- a/source/blender/blenkernel/intern/collection.cc +++ b/source/blender/blenkernel/intern/collection.cc @@ -239,11 +239,11 @@ static void collection_foreach_id(ID *id, LibraryForeachIDData *data) LISTBASE_FOREACH (CollectionParent *, parent, &collection->runtime.parents) { /* XXX This is very weak. The whole idea of keeping pointers to private IDs is very bad * anyway... */ - const int cb_flag = ((parent->collection != nullptr && - (data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 && - (parent->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0) ? - IDWALK_CB_EMBEDDED_NOT_OWNING : - IDWALK_CB_NOP); + const LibraryForeachIDCallbackFlag cb_flag = + ((parent->collection != nullptr && (data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 && + (parent->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0) ? + IDWALK_CB_EMBEDDED_NOT_OWNING : + IDWALK_CB_NOP); BKE_LIB_FOREACHID_PROCESS_IDSUPER( data, parent->collection, IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK | cb_flag); } diff --git a/source/blender/blenkernel/intern/gpencil_modifier_legacy.cc b/source/blender/blenkernel/intern/gpencil_modifier_legacy.cc index 3f54d060281..52ef8ede6d5 100644 --- a/source/blender/blenkernel/intern/gpencil_modifier_legacy.cc +++ b/source/blender/blenkernel/intern/gpencil_modifier_legacy.cc @@ -356,7 +356,7 @@ static void gpencil_modifier_foreach_ID_link(GpencilModifierData *md, static void modifier_free_data_id_us_cb(void * /*user_data*/, Object * /*ob*/, ID **idpoin, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { ID *id = *idpoin; if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) { diff --git a/source/blender/blenkernel/intern/lib_id.cc b/source/blender/blenkernel/intern/lib_id.cc index 99a9260d142..ca84e6a54bf 100644 --- a/source/blender/blenkernel/intern/lib_id.cc +++ b/source/blender/blenkernel/intern/lib_id.cc @@ -621,7 +621,7 @@ static int id_copy_libmanagement_cb(LibraryIDLinkCallbackData *cb_data) { ID **id_pointer = cb_data->id_pointer; ID *id = *id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; IDCopyLibManagementData *data = static_cast(cb_data->user_data); /* Remap self-references to new copied ID. */ @@ -1063,7 +1063,7 @@ bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop) static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data) { ID **id_pointer = cb_data->id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (cb_flag & IDWALK_CB_USER) { id_us_plus(*id_pointer); } @@ -1077,7 +1077,7 @@ static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data) static int libblock_management_us_min(LibraryIDLinkCallbackData *cb_data) { ID **id_pointer = cb_data->id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (cb_flag & IDWALK_CB_USER) { id_us_min(*id_pointer); } @@ -1950,7 +1950,7 @@ void BKE_main_id_newptr_and_tag_clear(Main *bmain) static int id_refcount_recompute_callback(LibraryIDLinkCallbackData *cb_data) { ID **id_pointer = cb_data->id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; const bool do_linked_only = bool(POINTER_AS_INT(cb_data->user_data)); if (*id_pointer == nullptr) { diff --git a/source/blender/blenkernel/intern/lib_query.cc b/source/blender/blenkernel/intern/lib_query.cc index bb493594231..c055daf1a08 100644 --- a/source/blender/blenkernel/intern/lib_query.cc +++ b/source/blender/blenkernel/intern/lib_query.cc @@ -46,9 +46,9 @@ struct LibraryForeachIDData { /** Flags controlling the behavior of the 'foreach id' looping code. */ LibraryForeachIDFlag flag; /** Generic flags to be passed to all callback calls for current processed data. */ - int cb_flag; + LibraryForeachIDCallbackFlag cb_flag; /** Callback flags that are forbidden for all callback calls for current processed data. */ - int cb_flag_clear; + LibraryForeachIDCallbackFlag cb_flag_clear; /* Function to call for every ID pointers of current processed data, and its opaque user data * pointer. */ @@ -68,18 +68,20 @@ bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data) return (data->status & IDWALK_STOP) != 0; } -void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int cb_flag) +void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, + ID **id_pp, + LibraryForeachIDCallbackFlag cb_flag) { if (BKE_lib_query_foreachid_iter_stop(data)) { return; } - const int flag = data->flag; + const LibraryForeachIDFlag flag = data->flag; ID *old_id = *id_pp; /* Update the callback flags with the ones defined (or forbidden) in `data` by the generic * caller code. */ - cb_flag = ((cb_flag | data->cb_flag) & ~data->cb_flag_clear); + cb_flag = LibraryForeachIDCallbackFlag((cb_flag | data->cb_flag) & ~data->cb_flag_clear); /* Update the callback flags with some extra information regarding overrides: all 'loopback', * 'internal', 'embedded' etc. ID pointers are never overridable. */ @@ -127,11 +129,10 @@ Main *BKE_lib_query_foreachid_process_main_get(const LibraryForeachIDData *data) return data->bmain; } -int BKE_lib_query_foreachid_process_callback_flag_override(LibraryForeachIDData *data, - const int cb_flag, - const bool do_replace) +int BKE_lib_query_foreachid_process_callback_flag_override( + LibraryForeachIDData *data, const LibraryForeachIDCallbackFlag cb_flag, const bool do_replace) { - const int cb_flag_backup = data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag_backup = data->cb_flag; if (do_replace) { data->cb_flag = cb_flag; } @@ -154,9 +155,10 @@ void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void BLI_assert(id_prop->type == IDP_ID); LibraryForeachIDData *data = (LibraryForeachIDData *)user_data; - const int cb_flag = IDWALK_CB_USER | ((id_prop->flag & IDP_FLAG_OVERRIDABLE_LIBRARY) ? - 0 : - IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE); + const LibraryForeachIDCallbackFlag cb_flag = IDWALK_CB_USER | + ((id_prop->flag & IDP_FLAG_OVERRIDABLE_LIBRARY) ? + IDWALK_CB_NOP : + IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE); BKE_LIB_FOREACHID_PROCESS_ID(data, id_prop->data.pointer, cb_flag); } @@ -164,7 +166,7 @@ void BKE_library_foreach_ID_embedded(LibraryForeachIDData *data, ID **id_pp) { /* Needed e.g. for callbacks handling relationships. This call should be absolutely read-only. */ ID *id = *id_pp; - const int flag = data->flag; + const LibraryForeachIDFlag flag = data->flag; BKE_lib_query_foreachid_process(data, id_pp, IDWALK_CB_EMBEDDED); if (BKE_lib_query_foreachid_iter_stop(data)) { @@ -304,11 +306,11 @@ static bool library_foreach_ID_link(Main *bmain, * In that case, we do not want to generate those 'generic flags' from our current sub-data ID * (the node tree), but re-use those generated for the 'owner' ID (the material). */ if (inherit_data == nullptr) { - data.cb_flag = ID_IS_LINKED(id) ? IDWALK_CB_INDIRECT_USAGE : 0; + data.cb_flag = ID_IS_LINKED(id) ? IDWALK_CB_INDIRECT_USAGE : IDWALK_CB_NOP; /* When an ID is defined as not reference-counting its ID usages, it should never do it. */ data.cb_flag_clear = (id->tag & ID_TAG_NO_USER_REFCOUNT) ? IDWALK_CB_USER | IDWALK_CB_USER_ONE : - 0; + IDWALK_CB_NOP; } else { data.cb_flag = inherit_data->cb_flag; @@ -519,7 +521,7 @@ struct IDUsersIter { static int foreach_libblock_id_users_callback(LibraryIDLinkCallbackData *cb_data) { ID **id_p = cb_data->id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; IDUsersIter *iter = static_cast(cb_data->user_data); if (*id_p) { @@ -980,7 +982,7 @@ static int foreach_libblock_used_linked_data_tag_clear_cb(LibraryIDLinkCallbackD { ID *self_id = cb_data->self_id; ID **id_p = cb_data->id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; bool *is_changed = static_cast(cb_data->user_data); if (*id_p) { diff --git a/source/blender/blenkernel/intern/lib_remap.cc b/source/blender/blenkernel/intern/lib_remap.cc index bdfcb551e86..51c53ff2c32 100644 --- a/source/blender/blenkernel/intern/lib_remap.cc +++ b/source/blender/blenkernel/intern/lib_remap.cc @@ -173,7 +173,7 @@ static void foreach_libblock_remap_callback_apply(ID *id_owner, static int foreach_libblock_remap_callback(LibraryIDLinkCallbackData *cb_data) { - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; /* NOTE: Support remapping of `IDWALK_CB_EMBEDDED_NON_OWNING` pointers, this is necessary in some * complex low-level ID manipulation cases (e.g. in ID swapping, see #BKE_lib_id_swap & co). @@ -880,7 +880,7 @@ static void libblock_relink_to_newid_prepare_data(Main *bmain, RelinkToNewIDData *relink_data); static int id_relink_to_newid_looper(LibraryIDLinkCallbackData *cb_data) { - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; /* NOTE: For now, support remapping `IDWALK_CB_EMBEDDED_NON_OWNING` pointers. */ if (cb_flag & (IDWALK_CB_EMBEDDED | IDWALK_CB_OVERRIDE_LIBRARY_REFERENCE)) { return IDWALK_RET_NOP; diff --git a/source/blender/blenkernel/intern/main.cc b/source/blender/blenkernel/intern/main.cc index 074e1c522a1..e68a458938f 100644 --- a/source/blender/blenkernel/intern/main.cc +++ b/source/blender/blenkernel/intern/main.cc @@ -491,7 +491,7 @@ static int main_relations_create_idlink_cb(LibraryIDLinkCallbackData *cb_data) MainIDRelations *bmain_relations = static_cast(cb_data->user_data); ID *self_id = cb_data->self_id; ID **id_pointer = cb_data->id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (*id_pointer) { MainIDRelationsEntry **entry_p; diff --git a/source/blender/blenkernel/intern/mesh_convert.cc b/source/blender/blenkernel/intern/mesh_convert.cc index 967640cd775..022507acf6f 100644 --- a/source/blender/blenkernel/intern/mesh_convert.cc +++ b/source/blender/blenkernel/intern/mesh_convert.cc @@ -905,7 +905,7 @@ static int foreach_libblock_make_usercounts_callback(LibraryIDLinkCallbackData * return IDWALK_RET_NOP; } - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (cb_flag & IDWALK_CB_USER) { id_us_plus(*id_p); } diff --git a/source/blender/blenkernel/intern/modifier.cc b/source/blender/blenkernel/intern/modifier.cc index 883ea48410e..179a49758b1 100644 --- a/source/blender/blenkernel/intern/modifier.cc +++ b/source/blender/blenkernel/intern/modifier.cc @@ -167,7 +167,7 @@ ModifierData *BKE_modifier_new(int type) static void modifier_free_data_id_us_cb(void * /*user_data*/, Object * /*ob*/, ID **idpoin, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { ID *id = *idpoin; if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) { @@ -335,7 +335,7 @@ void BKE_modifier_copydata_generic(const ModifierData *md_src, static void modifier_copy_data_id_us_cb(void * /*user_data*/, Object * /*ob*/, ID **idpoin, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { ID *id = *idpoin; if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) { diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc index 9bbddca7c4b..f6760234307 100644 --- a/source/blender/blenkernel/intern/object.cc +++ b/source/blender/blenkernel/intern/object.cc @@ -350,17 +350,18 @@ static void object_free_data(ID *id) static void library_foreach_modifiersForeachIDLink(void *user_data, Object * /*object*/, ID **id_pointer, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { LibraryForeachIDData *data = (LibraryForeachIDData *)user_data; BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL( data, BKE_lib_query_foreachid_process(data, id_pointer, cb_flag)); } -static void library_foreach_gpencil_modifiersForeachIDLink(void *user_data, - Object * /*object*/, - ID **id_pointer, - int cb_flag) +static void library_foreach_gpencil_modifiersForeachIDLink( + void *user_data, + Object * /*object*/, + ID **id_pointer, + const LibraryForeachIDCallbackFlag cb_flag) { LibraryForeachIDData *data = (LibraryForeachIDData *)user_data; BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL( @@ -370,7 +371,7 @@ static void library_foreach_gpencil_modifiersForeachIDLink(void *user_data, static void library_foreach_shaderfxForeachIDLink(void *user_data, Object * /*object*/, ID **id_pointer, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { LibraryForeachIDData *data = (LibraryForeachIDData *)user_data; BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL( @@ -383,7 +384,7 @@ static void library_foreach_constraintObjectLooper(bConstraint * /*con*/, void *user_data) { LibraryForeachIDData *data = (LibraryForeachIDData *)user_data; - const int cb_flag = is_reference ? IDWALK_CB_USER : IDWALK_CB_NOP; + const LibraryForeachIDCallbackFlag cb_flag = is_reference ? IDWALK_CB_USER : IDWALK_CB_NOP; BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL( data, BKE_lib_query_foreachid_process(data, id_pointer, cb_flag)); } @@ -391,7 +392,7 @@ static void library_foreach_constraintObjectLooper(bConstraint * /*con*/, static void library_foreach_particlesystemsObjectLooper(ParticleSystem * /*psys*/, ID **id_pointer, void *user_data, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { LibraryForeachIDData *data = (LibraryForeachIDData *)user_data; BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL( diff --git a/source/blender/blenkernel/intern/particle_system.cc b/source/blender/blenkernel/intern/particle_system.cc index ce3e10aa146..3cd3add47be 100644 --- a/source/blender/blenkernel/intern/particle_system.cc +++ b/source/blender/blenkernel/intern/particle_system.cc @@ -5020,7 +5020,7 @@ struct ParticleSystemIDLoopForModifier { static void particlesystem_modifiersForeachIDLink(void *user_data, Object * /*object*/, ID **id_pointer, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { ParticleSystemIDLoopForModifier *data = (ParticleSystemIDLoopForModifier *)user_data; data->func(data->psys, id_pointer, data->userdata, cb_flag); diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc index 2279b0ec032..c9da33a59f4 100644 --- a/source/blender/blenkernel/intern/scene.cc +++ b/source/blender/blenkernel/intern/scene.cc @@ -468,7 +468,7 @@ static void scene_free_data(ID *id) static void scene_foreach_rigidbodyworldSceneLooper(RigidBodyWorld * /*rbw*/, ID **id_pointer, void *user_data, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { LibraryForeachIDData *data = (LibraryForeachIDData *)user_data; BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL( @@ -787,7 +787,8 @@ static void scene_foreach_layer_collection(LibraryForeachIDData *data, if ((data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 && lc->collection != nullptr) { BLI_assert(is_master == ((lc->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0)); } - const int cb_flag = is_master ? IDWALK_CB_EMBEDDED_NOT_OWNING : IDWALK_CB_NOP; + const LibraryForeachIDCallbackFlag cb_flag = is_master ? IDWALK_CB_EMBEDDED_NOT_OWNING : + IDWALK_CB_NOP; BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, lc->collection, cb_flag | IDWALK_CB_DIRECT_WEAK_LINK); scene_foreach_layer_collection(data, &lc->layer_collections, false); } diff --git a/source/blender/blenkernel/intern/shader_fx.cc b/source/blender/blenkernel/intern/shader_fx.cc index ceab162309b..2bf26e733e6 100644 --- a/source/blender/blenkernel/intern/shader_fx.cc +++ b/source/blender/blenkernel/intern/shader_fx.cc @@ -79,7 +79,7 @@ ShaderFxData *BKE_shaderfx_new(int type) static void shaderfx_free_data_id_us_cb(void * /*user_data*/, Object * /*ob*/, ID **idpoin, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { ID *id = *idpoin; if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) { @@ -175,7 +175,7 @@ void BKE_shaderfx_copydata_generic(const ShaderFxData *fx_src, ShaderFxData *fx_ static void shaderfx_copy_data_id_us_cb(void * /*user_data*/, Object * /*ob*/, ID **idpoin, - int cb_flag) + const LibraryForeachIDCallbackFlag cb_flag) { ID *id = *idpoin; if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) { diff --git a/source/blender/blenloader/intern/writefile.cc b/source/blender/blenloader/intern/writefile.cc index f045e73f112..16df09398a2 100644 --- a/source/blender/blenloader/intern/writefile.cc +++ b/source/blender/blenloader/intern/writefile.cc @@ -1244,7 +1244,7 @@ static int write_id_direct_linked_data_process_cb(LibraryIDLinkCallbackData *cb_ { ID *self_id = cb_data->self_id; ID *id = *cb_data->id_pointer; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (id == nullptr || !ID_IS_LINKED(id)) { return IDWALK_RET_NOP; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index ed3425b7019..2b61cf8f929 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -2316,7 +2316,7 @@ void DepsgraphNodeBuilder::build_scene_speakers(Scene *scene, ViewLayer *view_la void DepsgraphNodeBuilder::modifier_walk(void *user_data, Object * /*object*/, ID **idpoin, - int /*cb_flag*/) + LibraryForeachIDCallbackFlag /*cb_flag*/) { BuilderWalkUserData *data = (BuilderWalkUserData *)user_data; ID *id = *idpoin; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index 7009ec26f71..08462b14796 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -10,6 +10,8 @@ #include "BLI_span.hh" +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */ + #include "intern/builder/deg_builder.h" #include "intern/builder/deg_builder_key.h" #include "intern/builder/deg_builder_map.h" @@ -311,7 +313,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder { static void modifier_walk(void *user_data, struct Object *object, struct ID **idpoin, - int cb_flag); + LibraryForeachIDCallbackFlag cb_flag); static void constraint_walk(bConstraint *constraint, ID **idpoin, bool is_reference, diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 385c22f06ad..afee041d416 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -3633,7 +3633,7 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDNode *id_node) void DepsgraphRelationBuilder::modifier_walk(void *user_data, Object * /*object*/, ID **idpoin, - int /*cb_flag*/) + LibraryForeachIDCallbackFlag /*cb_flag*/) { BuilderWalkUserData *data = (BuilderWalkUserData *)user_data; ID *id = *idpoin; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h index 7f226a2fa51..be789218469 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -21,6 +21,8 @@ #include "BLI_string.h" #include "BLI_utildefines.h" +#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */ + #include "intern/builder/deg_builder.h" #include "intern/builder/deg_builder_key.h" #include "intern/builder/deg_builder_map.h" @@ -336,7 +338,7 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder { static void modifier_walk(void *user_data, struct Object *object, struct ID **idpoin, - int cb_flag); + LibraryForeachIDCallbackFlag cb_flag); static void constraint_walk(bConstraint *con, ID **idpoin, bool is_reference, void *user_data); diff --git a/source/blender/editors/animation/anim_filter.cc b/source/blender/editors/animation/anim_filter.cc index 91cceb073e1..3f9deaa9106 100644 --- a/source/blender/editors/animation/anim_filter.cc +++ b/source/blender/editors/animation/anim_filter.cc @@ -2770,7 +2770,10 @@ struct tAnimFilterModifiersContext { }; /* dependency walker callback for modifier dependencies */ -static void animfilter_modifier_idpoin_cb(void *afm_ptr, Object *ob, ID **idpoin, int /*cb_flag*/) +static void animfilter_modifier_idpoin_cb(void *afm_ptr, + Object *ob, + ID **idpoin, + LibraryForeachIDCallbackFlag /*cb_flag*/) { tAnimFilterModifiersContext *afm = (tAnimFilterModifiersContext *)afm_ptr; ID *owner_id = &ob->id; diff --git a/source/blender/editors/render/render_opengl.cc b/source/blender/editors/render/render_opengl.cc index 96dd9071d7d..b56bf2d2ebe 100644 --- a/source/blender/editors/render/render_opengl.cc +++ b/source/blender/editors/render/render_opengl.cc @@ -579,7 +579,7 @@ static int gather_frames_to_render_for_id(LibraryIDLinkCallbackData *cb_data) ID *id = *id_p; ID *self_id = cb_data->self_id; - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (cb_flag == IDWALK_CB_LOOPBACK || id == self_id) { /* IDs may end up referencing themselves one way or the other, and those * (the self_id ones) have always already been processed. */ diff --git a/source/blender/editors/space_outliner/space_outliner.cc b/source/blender/editors/space_outliner/space_outliner.cc index 750b3958194..590503f5887 100644 --- a/source/blender/editors/space_outliner/space_outliner.cc +++ b/source/blender/editors/space_outliner/space_outliner.cc @@ -503,10 +503,12 @@ static void outliner_foreach_id(SpaceLink *space_link, LibraryForeachIDData *dat if (TSE_IS_REAL_ID(tselem)) { /* NOTE: Outliner ID pointers are never `IDWALK_CB_DIRECT_WEAK_LINK`, they should never * enforce keeping a reference to some linked data. */ - const int cb_flag = (tselem->id != nullptr && allow_pointer_access && - (tselem->id->flag & ID_FLAG_EMBEDDED_DATA) != 0) ? - IDWALK_CB_EMBEDDED_NOT_OWNING : - IDWALK_CB_NOP; + const LibraryForeachIDCallbackFlag cb_flag = (tselem->id != nullptr && + allow_pointer_access && + (tselem->id->flag & ID_FLAG_EMBEDDED_DATA) != + 0) ? + IDWALK_CB_EMBEDDED_NOT_OWNING : + IDWALK_CB_NOP; BKE_LIB_FOREACHID_PROCESS_ID(data, tselem->id, cb_flag); } else if (!is_readonly) { diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.cc b/source/blender/modifiers/intern/MOD_surfacedeform.cc index 8244dec0996..d093f30ebee 100644 --- a/source/blender/modifiers/intern/MOD_surfacedeform.cc +++ b/source/blender/modifiers/intern/MOD_surfacedeform.cc @@ -261,7 +261,7 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void { SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md; - walk(user_data, ob, (ID **)&smd->target, IDWALK_NOP); + walk(user_data, ob, (ID **)&smd->target, IDWALK_CB_NOP); } static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) diff --git a/source/blender/python/intern/bpy_rna_id_collection.cc b/source/blender/python/intern/bpy_rna_id_collection.cc index c2750329cb9..e04fabc35b2 100644 --- a/source/blender/python/intern/bpy_rna_id_collection.cc +++ b/source/blender/python/intern/bpy_rna_id_collection.cc @@ -68,7 +68,7 @@ static int foreach_libblock_id_user_map_callback(LibraryIDLinkCallbackData *cb_d if (*id_p) { IDUserMapData *data = static_cast(cb_data->user_data); - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (data->types_bitmap) { if (!id_check_type(*id_p, data->types_bitmap)) { diff --git a/source/blender/windowmanager/intern/wm_operators.cc b/source/blender/windowmanager/intern/wm_operators.cc index 2b6fa0d5f6e..0228c8a2b3a 100644 --- a/source/blender/windowmanager/intern/wm_operators.cc +++ b/source/blender/windowmanager/intern/wm_operators.cc @@ -3794,7 +3794,7 @@ static void previews_id_ensure(bContext *C, Scene *scene, ID *id) static int previews_id_ensure_callback(LibraryIDLinkCallbackData *cb_data) { - const int cb_flag = cb_data->cb_flag; + const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag; if (cb_flag & (IDWALK_CB_EMBEDDED | IDWALK_CB_EMBEDDED_NOT_OWNING)) { return IDWALK_RET_NOP;