Cleanup: replace raw function pointer with FunctionRef

This commit is contained in:
Jacques Lucke
2024-01-11 14:17:03 +01:00
parent 69ac64df54
commit 6c9d77be3b
3 changed files with 26 additions and 47 deletions

View File

@@ -10,6 +10,7 @@
#pragma once
#include "BLI_function_ref.hh"
#include "BLI_iterator.h"
#include "BLI_utildefines.h"
@@ -251,10 +252,9 @@ void DEG_iterator_ids_end(BLI_Iterator *iter);
/** \name DEG traversal
* \{ */
using DEGForeachIDCallback = void (*)(ID *id, void *user_data);
using DEGForeachIDComponentCallback = void (*)(ID *id,
eDepsObjectComponentType component,
void *user_data);
using DEGForeachIDCallback = blender::FunctionRef<void(ID *id)>;
using DEGForeachIDComponentCallback =
blender::FunctionRef<void(ID *id, eDepsObjectComponentType component)>;
/**
* \note Modifies runtime flags in depsgraph nodes,
@@ -262,12 +262,10 @@ using DEGForeachIDComponentCallback = void (*)(ID *id,
*/
void DEG_foreach_ancestor_ID(const Depsgraph *depsgraph,
const ID *id,
DEGForeachIDCallback callback,
void *user_data);
DEGForeachIDCallback callback);
void DEG_foreach_dependent_ID(const Depsgraph *depsgraph,
const ID *id,
DEGForeachIDCallback callback,
void *user_data);
DEGForeachIDCallback callback);
/**
* Starts traversal from given component of the given ID, invokes callback for every other
@@ -288,9 +286,8 @@ void DEG_foreach_dependent_ID_component(const Depsgraph *depsgraph,
const ID *id,
eDepsObjectComponentType source_component_type,
int flags,
DEGForeachIDComponentCallback callback,
void *user_data);
DEGForeachIDComponentCallback callback);
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data);
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback);
/** \} */

View File

@@ -115,7 +115,6 @@ void deg_foreach_dependent_operation(const Depsgraph * /*graph*/,
struct ForeachIDComponentData {
DEGForeachIDComponentCallback callback;
void *user_data;
IDNode *target_id_node;
Set<ComponentNode *> visited;
};
@@ -126,8 +125,7 @@ void deg_foreach_dependent_component_callback(OperationNode *op_node, void *user
ComponentNode *comp_node = op_node->owner;
IDNode *id_node = comp_node->owner;
if (id_node != user_data->target_id_node && !user_data->visited.contains(comp_node)) {
user_data->callback(
id_node->id_orig, nodeTypeToObjectComponent(comp_node->type), user_data->user_data);
user_data->callback(id_node->id_orig, nodeTypeToObjectComponent(comp_node->type));
user_data->visited.add_new(comp_node);
}
}
@@ -136,12 +134,10 @@ void deg_foreach_dependent_ID_component(const Depsgraph *graph,
const ID *id,
eDepsObjectComponentType source_component_type,
int flags,
DEGForeachIDComponentCallback callback,
void *user_data)
DEGForeachIDComponentCallback callback)
{
ForeachIDComponentData data;
data.callback = callback;
data.user_data = user_data;
data.target_id_node = graph->find_id_node(id);
deg_foreach_dependent_operation(graph,
data.target_id_node,
@@ -153,7 +149,6 @@ void deg_foreach_dependent_ID_component(const Depsgraph *graph,
struct ForeachIDData {
DEGForeachIDCallback callback;
void *user_data;
IDNode *target_id_node;
Set<IDNode *> visited;
};
@@ -164,28 +159,21 @@ void deg_foreach_dependent_ID_callback(OperationNode *op_node, void *user_data_v
ComponentNode *comp_node = op_node->owner;
IDNode *id_node = comp_node->owner;
if (id_node != user_data->target_id_node && !user_data->visited.contains(id_node)) {
user_data->callback(id_node->id_orig, user_data->user_data);
user_data->callback(id_node->id_orig);
user_data->visited.add_new(id_node);
}
}
void deg_foreach_dependent_ID(const Depsgraph *graph,
const ID *id,
DEGForeachIDCallback callback,
void *user_data)
void deg_foreach_dependent_ID(const Depsgraph *graph, const ID *id, DEGForeachIDCallback callback)
{
ForeachIDData data;
data.callback = callback;
data.user_data = user_data;
data.target_id_node = graph->find_id_node(id);
deg_foreach_dependent_operation(
graph, data.target_id_node, DEG_OB_COMP_ANY, 0, deg_foreach_dependent_ID_callback, &data);
}
void deg_foreach_ancestor_ID(const Depsgraph *graph,
const ID *id,
DEGForeachIDCallback callback,
void *user_data)
void deg_foreach_ancestor_ID(const Depsgraph *graph, const ID *id, DEGForeachIDCallback callback)
{
/* Start with getting ID node from the graph. */
IDNode *target_id_node = graph->find_id_node(id);
@@ -216,7 +204,7 @@ void deg_foreach_ancestor_ID(const Depsgraph *graph,
IDNode *id_node = comp_node->owner;
if (!visited.contains(id_node)) {
/* TODO(sergey): Is it orig or CoW? */
callback(id_node->id_orig, user_data);
callback(id_node->id_orig);
visited.add_new(id_node);
}
/* Schedule incoming operation nodes. */
@@ -248,10 +236,10 @@ void deg_foreach_ancestor_ID(const Depsgraph *graph,
}
}
void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data)
void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback)
{
for (const IDNode *id_node : depsgraph->id_nodes) {
callback(id_node->id_orig, user_data);
callback(id_node->id_orig);
}
}
@@ -260,32 +248,29 @@ void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback, v
void DEG_foreach_dependent_ID(const Depsgraph *depsgraph,
const ID *id,
DEGForeachIDCallback callback,
void *user_data)
DEGForeachIDCallback callback)
{
deg::deg_foreach_dependent_ID((const deg::Depsgraph *)depsgraph, id, callback, user_data);
deg::deg_foreach_dependent_ID((const deg::Depsgraph *)depsgraph, id, callback);
}
void DEG_foreach_dependent_ID_component(const Depsgraph *depsgraph,
const ID *id,
eDepsObjectComponentType source_component_type,
int flags,
DEGForeachIDComponentCallback callback,
void *user_data)
DEGForeachIDComponentCallback callback)
{
deg::deg_foreach_dependent_ID_component(
(const deg::Depsgraph *)depsgraph, id, source_component_type, flags, callback, user_data);
(const deg::Depsgraph *)depsgraph, id, source_component_type, flags, callback);
}
void DEG_foreach_ancestor_ID(const Depsgraph *depsgraph,
const ID *id,
DEGForeachIDCallback callback,
void *user_data)
DEGForeachIDCallback callback)
{
deg::deg_foreach_ancestor_ID((const deg::Depsgraph *)depsgraph, id, callback, user_data);
deg::deg_foreach_ancestor_ID((const deg::Depsgraph *)depsgraph, id, callback);
}
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data)
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback)
{
deg::deg_foreach_id((const deg::Depsgraph *)depsgraph, callback, user_data);
deg::deg_foreach_id((const deg::Depsgraph *)depsgraph, callback);
}

View File

@@ -303,9 +303,7 @@ static void trans_object_base_deps_flag_prepare(const Scene *scene, ViewLayer *v
}
}
static void set_trans_object_base_deps_flag_cb(ID *id,
eDepsObjectComponentType component,
void * /*user_data*/)
static void set_trans_object_base_deps_flag_cb(ID *id, eDepsObjectComponentType component)
{
/* Here we only handle object IDs. */
if (GS(id->name) != ID_OB) {
@@ -324,8 +322,7 @@ static void flush_trans_object_base_deps_flag(Depsgraph *depsgraph, Object *obje
&object->id,
DEG_OB_COMP_TRANSFORM,
DEG_FOREACH_COMPONENT_IGNORE_TRANSFORM_SOLVERS,
set_trans_object_base_deps_flag_cb,
nullptr);
set_trans_object_base_deps_flag_cb);
}
static void trans_object_base_deps_flag_finish(const TransInfo *t,