From ead1b69856d9d204de1dbf85752c057db3e99152 Mon Sep 17 00:00:00 2001 From: raiti-chan Date: Sun, 18 Dec 2022 18:57:44 +0900 Subject: [PATCH] Eliminate caching of ImmutableArray and use ImmutableList --- .../Editor/MenuTree.cs | 35 ++++++------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/Packages/nadena.dev.modular-avatar/Editor/MenuTree.cs b/Packages/nadena.dev.modular-avatar/Editor/MenuTree.cs index 780ff696..1d243e14 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/MenuTree.cs +++ b/Packages/nadena.dev.modular-avatar/Editor/MenuTree.cs @@ -10,6 +10,7 @@ namespace nadena.dev.modular_avatar.core.editor { internal class MenuTree { + public struct ChildElement { public string menuName; @@ -18,23 +19,17 @@ namespace nadena.dev.modular_avatar.core.editor public ModularAvatarMenuInstaller installer; public bool isInstallerRoot; } - - private class ImmutableBuilder - { - public ImmutableArray immutableArray; - public ImmutableArray.Builder builder; - } - + private readonly HashSet _included; private readonly VRCExpressionsMenu _rootMenu; - private readonly Dictionary _menuChildrenMap; + private readonly Dictionary> _menuChildrenMap; public MenuTree(VRCAvatarDescriptor descriptor) { _rootMenu = descriptor.expressionsMenu; _included = new HashSet(); - _menuChildrenMap = new Dictionary(); + _menuChildrenMap = new Dictionary>(); if (_rootMenu == null) { @@ -57,17 +52,12 @@ namespace nadena.dev.modular_avatar.core.editor TraverseMenu(installer); } - public ImmutableArray GetChildren(VRCExpressionsMenu parent) + public ImmutableList GetChildren(VRCExpressionsMenu parent) { if (parent == null) parent = _rootMenu; - if (!_menuChildrenMap.TryGetValue(parent, out ImmutableBuilder immutableBuilder)) return ImmutableArray.Empty; - if (immutableBuilder.immutableArray == ImmutableArray.Empty) - { - immutableBuilder.immutableArray = immutableBuilder.builder.ToImmutable(); - } - return immutableBuilder.immutableArray; + return !_menuChildrenMap.TryGetValue(parent, out ImmutableList immutableList) ? ImmutableList.Empty : immutableList; } - + public IEnumerable GetChildInstallers(ModularAvatarMenuInstaller parentInstaller) { HashSet visitedMenus = new HashSet(); @@ -165,18 +155,13 @@ namespace nadena.dev.modular_avatar.core.editor { if (parent == null) parent = _rootMenu; childElement.parent = parent; - if (!_menuChildrenMap.TryGetValue(parent, out ImmutableBuilder children)) + if (!_menuChildrenMap.TryGetValue(parent, out ImmutableList children)) { - children = new ImmutableBuilder - { - builder = ImmutableArray.CreateBuilder(), - immutableArray = ImmutableArray.Empty - }; + children = ImmutableList.Empty; _menuChildrenMap[parent] = children; } - children.builder.Add(childElement); - children.immutableArray = ImmutableArray.Empty; + _menuChildrenMap[parent] = children.Add(childElement); if (childElement.menu == null) return; if (_included.Contains(childElement.menu)) return; _included.Add(childElement.menu);