[Bf-blender-cvs] [f28bb6992fa] master: Refactor libquery ID looper callback to take a single parameter.
Bastien Montagne
noreply at git.blender.org
Thu Feb 13 16:23:49 CET 2020
Commit: f28bb6992fa9773fb1e7918d569f4c88427f4c96
Author: Bastien Montagne
Date: Thu Feb 13 12:56:10 2020 +0100
Branches: master
https://developer.blender.org/rBf28bb6992fa9773fb1e7918d569f4c88427f4c96
Refactor libquery ID looper callback to take a single parameter.
Using a struct here allows to change given parameters to the callbacks
without having to edit all callbacks functions, which is always noisy
and time consuming.
===================================================================
M source/blender/blenkernel/BKE_lib_query.h
M source/blender/blenkernel/intern/lib_id.c
M source/blender/blenkernel/intern/lib_query.c
M source/blender/blenkernel/intern/lib_remap.c
M source/blender/blenkernel/intern/main.c
M source/blender/blenkernel/intern/mesh_convert.c
M source/blender/blenloader/intern/readfile.c
M source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M source/blender/editors/object/object_relations.c
M source/blender/editors/render/render_opengl.c
M source/blender/python/intern/bpy_rna_id_collection.c
M source/blender/windowmanager/intern/wm_operators.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_lib_query.h b/source/blender/blenkernel/BKE_lib_query.h
index 36aa69bf795..4d1b924b0d3 100644
--- a/source/blender/blenkernel/BKE_lib_query.h
+++ b/source/blender/blenkernel/BKE_lib_query.h
@@ -83,15 +83,19 @@ enum {
IDWALK_RET_STOP_RECURSION = 1 << 1,
};
+typedef struct LibraryIDLinkCallbackData {
+ void *user_data;
+ struct ID *id_self;
+ struct ID **id_pointer;
+ int cb_flag;
+} LibraryIDLinkCallbackData;
+
/**
* Call a callback for each ID link which the given ID uses.
*
* \return a set of flags to control further iteration (0 to keep going).
*/
-typedef int (*LibraryIDLinkCallback)(void *user_data,
- struct ID *id_self,
- struct ID **id_pointer,
- int cb_flag);
+typedef int (*LibraryIDLinkCallback)(LibraryIDLinkCallbackData *cb_data);
/* Flags for the foreach function itself. */
enum {
diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c
index 18faf00d60f..1cb5905cc94 100644
--- a/source/blender/blenkernel/intern/lib_id.c
+++ b/source/blender/blenkernel/intern/lib_id.c
@@ -294,11 +294,11 @@ void BKE_id_clear_newpoin(ID *id)
id->newid = NULL;
}
-static int id_expand_local_callback(void *UNUSED(user_data),
- struct ID *id_self,
- struct ID **id_pointer,
- int cb_flag)
+static int id_expand_local_callback(LibraryIDLinkCallbackData *cb_data)
{
+ ID *id_self = cb_data->id_self;
+ ID **id_pointer = cb_data->id_pointer;
+ int const cb_flag = cb_data->cb_flag;
if (cb_flag & IDWALK_CB_PRIVATE) {
return IDWALK_RET_NOP;
}
@@ -581,13 +581,12 @@ struct IDCopyLibManagementData {
};
/* Increases usercount as required, and remap self ID pointers. */
-static int id_copy_libmanagement_cb(void *user_data,
- ID *UNUSED(id_self),
- ID **id_pointer,
- int cb_flag)
+static int id_copy_libmanagement_cb(LibraryIDLinkCallbackData *cb_data)
{
- struct IDCopyLibManagementData *data = user_data;
+ ID **id_pointer = cb_data->id_pointer;
ID *id = *id_pointer;
+ const int cb_flag = cb_data->cb_flag;
+ struct IDCopyLibManagementData *data = cb_data->user_data;
/* Remap self-references to new copied ID. */
if (id == data->id_src) {
@@ -900,11 +899,10 @@ bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop)
return false;
}
-static int libblock_management_us_plus(void *UNUSED(user_data),
- ID *UNUSED(id_self),
- ID **id_pointer,
- int cb_flag)
+static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data)
{
+ ID **id_pointer = cb_data->id_pointer;
+ const int cb_flag = cb_data->cb_flag;
if (cb_flag & IDWALK_CB_USER) {
id_us_plus(*id_pointer);
}
@@ -915,11 +913,10 @@ static int libblock_management_us_plus(void *UNUSED(user_data),
return IDWALK_RET_NOP;
}
-static int libblock_management_us_min(void *UNUSED(user_data),
- ID *UNUSED(id_self),
- ID **id_pointer,
- int cb_flag)
+static int libblock_management_us_min(LibraryIDLinkCallbackData *cb_data)
{
+ ID **id_pointer = cb_data->id_pointer;
+ const int cb_flag = cb_data->cb_flag;
if (cb_flag & IDWALK_CB_USER) {
id_us_min(*id_pointer);
}
@@ -1978,12 +1975,11 @@ void BKE_main_id_clear_newpoins(Main *bmain)
FOREACH_MAIN_ID_END;
}
-static int id_refcount_recompute_callback(void *user_data,
- struct ID *UNUSED(id_self),
- struct ID **id_pointer,
- int cb_flag)
+static int id_refcount_recompute_callback(LibraryIDLinkCallbackData *cb_data)
{
- const bool do_linked_only = (bool)POINTER_AS_INT(user_data);
+ ID **id_pointer = cb_data->id_pointer;
+ const int cb_flag = cb_data->cb_flag;
+ const bool do_linked_only = (bool)POINTER_AS_INT(cb_data->user_data);
if (*id_pointer == NULL) {
return IDWALK_RET_NOP;
diff --git a/source/blender/blenkernel/intern/lib_query.c b/source/blender/blenkernel/intern/lib_query.c
index cf4c96a70e9..44a8647fceb 100644
--- a/source/blender/blenkernel/intern/lib_query.c
+++ b/source/blender/blenkernel/intern/lib_query.c
@@ -88,11 +88,11 @@
if (!((_data)->status & IDWALK_STOP)) { \
const int _flag = (_data)->flag; \
ID *old_id = *(id_pp); \
- const int callback_return = (_data)->callback((_data)->user_data, \
- (_data)->self_id, \
- id_pp, \
- (_cb_flag | (_data)->cb_flag) & \
- ~(_data)->cb_flag_clear); \
+ const int callback_return = (_data)->callback(&(struct LibraryIDLinkCallbackData){ \
+ .user_data = (_data)->user_data, \
+ .id_self = (_data)->self_id, \
+ .id_pointer = id_pp, \
+ .cb_flag = ((_cb_flag | (_data)->cb_flag) & ~(_data)->cb_flag_clear)}); \
if (_flag & IDWALK_READONLY) { \
BLI_assert(*(id_pp) == old_id); \
} \
@@ -1226,12 +1226,11 @@ typedef struct IDUsersIter {
int count_direct, count_indirect; /* Set by callback. */
} IDUsersIter;
-static int foreach_libblock_id_users_callback(void *user_data,
- ID *UNUSED(self_id),
- ID **id_p,
- int cb_flag)
+static int foreach_libblock_id_users_callback(LibraryIDLinkCallbackData *cb_data)
{
- IDUsersIter *iter = user_data;
+ ID **id_p = cb_data->id_pointer;
+ const int cb_flag = cb_data->cb_flag;
+ IDUsersIter *iter = cb_data->user_data;
if (*id_p) {
/* 'Loopback' ID pointers (the ugly 'from' ones, Object->proxy_from and Key->from).
@@ -1379,12 +1378,12 @@ void BKE_library_ID_test_usages(Main *bmain, void *idv, bool *is_used_local, boo
}
/* ***** IDs usages.checking/tagging. ***** */
-static int foreach_libblock_used_linked_data_tag_clear_cb(void *user_data,
- ID *self_id,
- ID **id_p,
- int cb_flag)
+static int foreach_libblock_used_linked_data_tag_clear_cb(LibraryIDLinkCallbackData *cb_data)
{
- bool *is_changed = user_data;
+ ID *self_id = cb_data->id_self;
+ ID **id_p = cb_data->id_pointer;
+ const int cb_flag = cb_data->cb_flag;
+ bool *is_changed = cb_data->user_data;
if (*id_p) {
/* The infamous 'from' pointers (Key.from, Object.proxy_from, ...).
diff --git a/source/blender/blenkernel/intern/lib_remap.c b/source/blender/blenkernel/intern/lib_remap.c
index 9b6d62a87aa..d8b32b6e04c 100644
--- a/source/blender/blenkernel/intern/lib_remap.c
+++ b/source/blender/blenkernel/intern/lib_remap.c
@@ -97,13 +97,17 @@ enum {
ID_REMAP_IS_USER_ONE_SKIPPED = 1 << 1, /* There was some skipped 'user_one' usages of old_id. */
};
-static int foreach_libblock_remap_callback(void *user_data, ID *id_self, ID **id_p, int cb_flag)
+static int foreach_libblock_remap_callback(LibraryIDLinkCallbackData *cb_data)
{
+ const int cb_flag = cb_data->cb_flag;
+
if (cb_flag & IDWALK_CB_PRIVATE) {
return IDWALK_RET_NOP;
}
- IDRemap *id_remap_data = user_data;
+ ID *id_self = cb_data->id_self;
+ ID **id_p = cb_data->id_pointer;
+ IDRemap *id_remap_data = cb_data->user_data;
ID *old_id = id_remap_data->old_id;
ID *new_id = id_remap_data->new_id;
ID *id = id_remap_data->id;
@@ -642,15 +646,14 @@ void BKE_libblock_relink_ex(
DEG_relations_tag_update(bmain);
}
-static int id_relink_to_newid_looper(void *UNUSED(user_data),
- ID *UNUSED(self_id),
- ID **id_pointer,
- const int cb_flag)
+static int id_relink_to_newid_looper(LibraryIDLinkCallbackData *cb_data)
{
+ const int cb_flag = cb_data->cb_flag;
if (cb_flag & IDWALK_CB_PRIVATE) {
return IDWALK_RET_NOP;
}
+ ID **id_pointer = cb_data->id_pointer;
ID *id = *id_pointer;
if (id) {
/* See: NEW_ID macro */
diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c
index 0c17a2c0856..75bf74f63bf 100644
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@ -209,12 +209,12 @@ void BKE_main_unlock(struct Main *bmain)
BLI_spin_unlock((SpinLock *)bmain->lock);
}
-static int main_relations_create_idlink_cb(void *user_data,
- ID *id_self,
- ID **id_pointer,
- int cb_flag)
+static int main_relations_create_idlink_cb(LibraryIDLinkCallbackData *cb_data)
{
- MainIDRelations *rel = user_data;
+ MainIDRelations *rel = cb_data->user_data;
+ ID *id_self = cb_data->id_self;
+ ID **id_pointer = cb_data->id_pointer;
+ const int cb_flag = cb_data->cb_flag;
if (*id_pointer) {
MainIDRelationsEntry *entry, **entry_p;
diff --git a/source/blender/blenkernel/intern/mesh_convert.c b/source/blender/blenkernel/intern/mesh_convert.c
index 68d535e6405..014ccdb913e 100644
--- a/source/blender/blenkernel/intern/mesh_convert.c
+++ b/source/blender/blenkernel/intern/mesh_convert.c
@@ -1167,11 +1167,9 @@ Mesh *BKE_mesh_new_from_object(Depsgraph *depsgraph, Object *object, bool preser
return new_mesh;
}
-static int foreach_libblock_make_original_callback(void *UNUSED(user_data_v),
- ID *UNUSED(id_self),
- ID **id_p,
- int UNUSED(cb_flag)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list