LibOverride: Minor improvement to recent liboverride API changes.

Avoid two GHash lookups when deleting an override property by its RNA
path.
This commit is contained in:
Bastien Montagne
2023-05-22 16:39:43 +02:00
parent 7d416ece82
commit c93bb9f323

View File

@@ -3530,18 +3530,6 @@ void lib_override_library_property_clear(IDOverrideLibraryProperty *op)
BLI_freelistN(&op->operations);
}
bool BKE_lib_override_library_property_search_and_delete(IDOverrideLibrary *override,
const char *rna_path)
{
IDOverrideLibraryProperty *override_property = BKE_lib_override_library_property_find(override,
rna_path);
if (override_property == nullptr) {
return false;
}
BKE_lib_override_library_property_delete(override, override_property);
return true;
}
bool BKE_lib_override_library_property_rna_path_change(IDOverrideLibrary *override,
const char *old_rna_path,
const char *new_rna_path)
@@ -3565,10 +3553,13 @@ bool BKE_lib_override_library_property_rna_path_change(IDOverrideLibrary *overri
return true;
}
void BKE_lib_override_library_property_delete(IDOverrideLibrary *override,
IDOverrideLibraryProperty *override_property)
static void lib_override_library_property_delete(IDOverrideLibrary *override,
IDOverrideLibraryProperty *override_property,
const bool do_runtime_updates)
{
if (!ELEM(nullptr, override->runtime, override->runtime->rna_path_to_override_properties)) {
if (do_runtime_updates &&
!ELEM(nullptr, override->runtime, override->runtime->rna_path_to_override_properties))
{
BLI_ghash_remove(override->runtime->rna_path_to_override_properties,
override_property->rna_path,
nullptr,
@@ -3578,6 +3569,29 @@ void BKE_lib_override_library_property_delete(IDOverrideLibrary *override,
BLI_freelinkN(&override->properties, override_property);
}
bool BKE_lib_override_library_property_search_and_delete(IDOverrideLibrary *override,
const char *rna_path)
{
/* Find the override property by its old RNA path. */
GHash *override_runtime = override_library_rna_path_mapping_ensure(override);
IDOverrideLibraryProperty *override_property = static_cast<IDOverrideLibraryProperty *>(
BLI_ghash_popkey(override_runtime, rna_path, nullptr));
if (override_property == nullptr) {
return false;
}
/* The key (rna_path) was already popped out of the runtime mapping above. */
lib_override_library_property_delete(override, override_property, false);
return true;
}
void BKE_lib_override_library_property_delete(IDOverrideLibrary *override,
IDOverrideLibraryProperty *override_property)
{
lib_override_library_property_delete(override, override_property, true);
}
IDOverrideLibraryPropertyOperation *BKE_lib_override_library_property_operation_find(
IDOverrideLibraryProperty *override_property,
const char *subitem_refname,