[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