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.ContainsKey(speckleObject.id)) { LoadedAssets[speckleObject.id].Add(nativeObject); return true; } LoadedAssets.Add(speckleObject.id, new List{nativeObject}); return true; } } }