using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using Speckle.Core.Models; using Object = UnityEngine.Object; namespace Speckle.ConnectorUnity.NativeCache { #nullable enable /// /// In memory native object cache /// public sealed class MemoryNativeCache : AbstractNativeCache { public IDictionary> LoadedAssets { get; set; } = new Dictionary>(); public override bool TryGetObject( Base speckleObject, [NotNullWhen(true)] out T? nativeObject ) where T : class { if (TryGetObject(speckleObject, out List? e)) { nativeObject = (T?)e.FirstOrDefault(x => x is T); return nativeObject != null; } nativeObject = null; return false; } public bool TryGetObject( Base speckleObject, [NotNullWhen(true)] out List? nativeObject ) { return LoadedAssets.TryGetValue(speckleObject.id, out nativeObject); } public override bool TrySaveObject(Base speckleObject, Object nativeObject) { if (LoadedAssets.TryGetValue(speckleObject.id, out List? assets)) { assets.Add(nativeObject); return true; } LoadedAssets.Add(speckleObject.id, new List { nativeObject }); return true; } } }