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.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user