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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user