[Bf-blender-cvs] [2ce6ac462b0] master: Cleanup: Const correctness for node find functions

Hans Goudey noreply at git.blender.org
Mon Dec 5 18:40:12 CET 2022


Commit: 2ce6ac462b028aca48e40cd807e9a126f8814442
Author: Hans Goudey
Date:   Mon Dec 5 11:37:55 2022 -0600
Branches: master
https://developer.blender.org/rB2ce6ac462b028aca48e40cd807e9a126f8814442

Cleanup: Const correctness for node find functions

You shouldn't be able to retrieve a mutable node from a const node tree
or a mutable socket from a const node. Use const_cast in one place in
order to correct this without duplicating the function, which is still
awkward in the C-API.

===================================================================

M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/node.cc
M	source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 3680d8ac8cd..e50d895d203 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -507,7 +507,7 @@ struct bNodeTree *ntreeFromID(struct ID *id);
 
 void ntreeFreeLocalNode(struct bNodeTree *ntree, struct bNode *node);
 void ntreeFreeLocalTree(struct bNodeTree *ntree);
-struct bNode *ntreeFindType(const struct bNodeTree *ntree, int type);
+struct bNode *ntreeFindType(struct bNodeTree *ntree, int type);
 bool ntreeHasTree(const struct bNodeTree *ntree, const struct bNodeTree *lookup);
 void ntreeUpdateAllNew(struct Main *main);
 void ntreeUpdateAllUsers(struct Main *main, struct ID *id);
@@ -629,7 +629,7 @@ const char *nodeStaticSocketLabel(int type, int subtype);
   } \
   ((void)0)
 
-struct bNodeSocket *nodeFindSocket(const struct bNode *node,
+struct bNodeSocket *nodeFindSocket(struct bNode *node,
                                    eNodeSocketInOut in_out,
                                    const char *identifier);
 struct bNodeSocket *nodeAddSocket(struct bNodeTree *ntree,
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 8bff3a8f997..da215c9003a 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -1455,7 +1455,7 @@ const char *nodeSocketTypeLabel(const bNodeSocketType *stype)
   return stype->label[0] != '\0' ? stype->label : RNA_struct_ui_name(stype->ext_socket.srna);
 }
 
-bNodeSocket *nodeFindSocket(const bNode *node, eNodeSocketInOut in_out, const char *identifier)
+bNodeSocket *nodeFindSocket(bNode *node, eNodeSocketInOut in_out, const char *identifier)
 {
   const ListBase *sockets = (in_out == SOCK_IN) ? &node->inputs : &node->outputs;
   LISTBASE_FOREACH (bNodeSocket *, sock, sockets) {
@@ -3437,7 +3437,7 @@ void ntreeRemoveSocketInterface(bNodeTree *ntree, bNodeSocket *sock)
 
 /* ************ find stuff *************** */
 
-bNode *ntreeFindType(const bNodeTree *ntree, int type)
+bNode *ntreeFindType(bNodeTree *ntree, int type)
 {
   if (ntree) {
     LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc
index 0231bc79b89..ffbaca9b3b3 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc
@@ -47,7 +47,7 @@ static void copy_property_from_node(const eNodeSocketDatatype property_type,
   if (!node) {
     return;
   }
-  bNodeSocket *socket{nodeFindSocket(node, SOCK_IN, identifier)};
+  const bNodeSocket *socket = nodeFindSocket(const_cast<bNode *>(node), SOCK_IN, identifier);
   BLI_assert(socket && socket->type == property_type);
   if (!socket) {
     return;
@@ -55,21 +55,21 @@ static void copy_property_from_node(const eNodeSocketDatatype property_type,
   switch (property_type) {
     case SOCK_FLOAT: {
       BLI_assert(r_property.size() == 1);
-      bNodeSocketValueFloat *socket_def_value = static_cast<bNodeSocketValueFloat *>(
+      const bNodeSocketValueFloat *socket_def_value = static_cast<const bNodeSocketValueFloat *>(
           socket->default_value);
       r_property[0] = socket_def_value->value;
       break;
     }
     case SOCK_RGBA: {
       BLI_assert(r_property.size() == 3);
-      bNodeSocketValueRGBA *socket_def_value = static_cast<bNodeSocketValueRGBA *>(
+      const bNodeSocketValueRGBA *socket_def_value = static_cast<const bNodeSocketValueRGBA *>(
           socket->default_value);
       copy_v3_v3(r_property.data(), socket_def_value->value);
       break;
     }
     case SOCK_VECTOR: {
       BLI_assert(r_property.size() == 3);
-      bNodeSocketValueVector *socket_def_value = static_cast<bNodeSocketValueVector *>(
+      const bNodeSocketValueVector *socket_def_value = static_cast<const bNodeSocketValueVector *>(
           socket->default_value);
       copy_v3_v3(r_property.data(), socket_def_value->value);
       break;



More information about the Bf-blender-cvs mailing list