[Bf-blender-cvs] [288b13b2523] master: BKE lib remapper: Add new util to overwrite an existing mapping.

Bastien Montagne noreply at git.blender.org
Mon Feb 6 19:29:27 CET 2023


Commit: 288b13b2523c8aa00e93a1e4a3227db87b7dd35f
Author: Bastien Montagne
Date:   Mon Feb 6 19:00:07 2023 +0100
Branches: master
https://developer.blender.org/rB288b13b2523c8aa00e93a1e4a3227db87b7dd35f

BKE lib remapper: Add new util to overwrite an existing mapping.

Current `BKE_id_remapper_add` would not replace an already existing
mapping rule, now `BKE_id_remapper_add_overwrite` allows that behavior
if necessary.

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

M	source/blender/blenkernel/BKE_lib_remap.h
M	source/blender/blenkernel/intern/lib_id_remapper.cc

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

diff --git a/source/blender/blenkernel/BKE_lib_remap.h b/source/blender/blenkernel/BKE_lib_remap.h
index a17ef8c7c5d..dc3335aa231 100644
--- a/source/blender/blenkernel/BKE_lib_remap.h
+++ b/source/blender/blenkernel/BKE_lib_remap.h
@@ -222,8 +222,12 @@ void BKE_id_remapper_clear(struct IDRemapper *id_remapper);
 bool BKE_id_remapper_is_empty(const struct IDRemapper *id_remapper);
 /** Free the given ID Remapper. */
 void BKE_id_remapper_free(struct IDRemapper *id_remapper);
-/** Add a new remapping. */
+/** Add a new remapping. Does not replace an existing mapping for `old_id`, if any. */
 void BKE_id_remapper_add(struct IDRemapper *id_remapper, struct ID *old_id, struct ID *new_id);
+/** Add a new remapping, replacing a potential already existing mapping of `old_id`. */
+void BKE_id_remapper_add_overwrite(struct IDRemapper *id_remapper,
+                                   struct ID *old_id,
+                                   struct ID *new_id);
 
 /**
  * Apply a remapping.
diff --git a/source/blender/blenkernel/intern/lib_id_remapper.cc b/source/blender/blenkernel/intern/lib_id_remapper.cc
index cedbab5aa18..1b8105ab766 100644
--- a/source/blender/blenkernel/intern/lib_id_remapper.cc
+++ b/source/blender/blenkernel/intern/lib_id_remapper.cc
@@ -40,6 +40,15 @@ struct IDRemapper {
     source_types |= BKE_idtype_idcode_to_idfilter(GS(old_id->name));
   }
 
+  void add_overwrite(ID *old_id, ID *new_id)
+  {
+    BLI_assert(old_id != nullptr);
+    BLI_assert(new_id == nullptr || (GS(old_id->name) == GS(new_id->name)));
+    mappings.add_overwrite(old_id, new_id);
+    BLI_assert(BKE_idtype_idcode_to_idfilter(GS(old_id->name)) != 0);
+    source_types |= BKE_idtype_idcode_to_idfilter(GS(old_id->name));
+  }
+
   bool contains_mappings_for_any(IDTypeFilter filter) const
   {
     return (source_types & filter) != 0;
@@ -159,6 +168,12 @@ void BKE_id_remapper_add(IDRemapper *id_remapper, ID *old_id, ID *new_id)
   remapper->add(old_id, new_id);
 }
 
+void BKE_id_remapper_add_overwrite(IDRemapper *id_remapper, ID *old_id, ID *new_id)
+{
+  blender::bke::id::remapper::IDRemapper *remapper = unwrap(id_remapper);
+  remapper->add_overwrite(old_id, new_id);
+}
+
 bool BKE_id_remapper_has_mapping_for(const struct IDRemapper *id_remapper, uint64_t type_filter)
 {
   const blender::bke::id::remapper::IDRemapper *remapper = unwrap(id_remapper);



More information about the Bf-blender-cvs mailing list