summaryrefslogtreecommitdiff
path: root/indra/newview/llinventorymodel.cpp
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2025-02-06 18:02:34 +0200
committerAndrey Kleshchev <117672381+akleshchev@users.noreply.github.com>2025-02-07 18:34:04 +0200
commitdf0634f0c4980fa663f9635c931fd4ba44f864ea (patch)
treef75cf55578bcc22256e4e0a62481a0cca0a429ba /indra/newview/llinventorymodel.cpp
parent93a88e602545828c0298b20ff0375f191d1f6d9a (diff)
#3505 Make checkFolderForContentsOfType cheaper
Diffstat (limited to 'indra/newview/llinventorymodel.cpp')
-rw-r--r--indra/newview/llinventorymodel.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index d57cb13362..9fffe6378e 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1305,6 +1305,47 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
}
}
+bool LLInventoryModel::hasMatchingDescendents(const LLUUID& id,
+ bool include_trash,
+ LLInventoryCollectFunctor& matches)
+{
+ if (!include_trash)
+ {
+ const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ if (trash_id.notNull() && (trash_id == id))
+ return false;
+ }
+ cat_array_t* cat_array = get_ptr_in_map(mParentChildCategoryTree, id);
+ if (cat_array)
+ {
+ for (auto& cat : *cat_array)
+ {
+ if (matches(cat, NULL))
+ {
+ return true;
+ }
+ if (hasMatchingDescendents(cat->getUUID(), include_trash, matches))
+ {
+ return true;
+ }
+ }
+ }
+
+ item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, id);
+
+ if (item_array)
+ {
+ for (auto& item : *item_array)
+ {
+ if (matches(NULL, item))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
void LLInventoryModel::addChangedMaskForLinks(const LLUUID& object_id, U32 mask)
{
const LLInventoryObject *obj = getObject(object_id);