Files
speckle-unity/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/MemoryNativeCache.cs
T
2023-08-31 12:08:35 +01:00

55 lines
1.6 KiB
C#

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
/// <summary>
/// In memory native object cache
/// </summary>
public sealed class MemoryNativeCache : AbstractNativeCache
{
public IDictionary<string, List<Object>> LoadedAssets { get; set; } =
new Dictionary<string, List<Object>>();
public override bool TryGetObject<T>(
Base speckleObject,
[NotNullWhen(true)] out T? nativeObject
)
where T : class
{
if (TryGetObject(speckleObject, out List<Object>? 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<Object>? nativeObject
)
{
return LoadedAssets.TryGetValue(speckleObject.id, out nativeObject);
}
public override bool TrySaveObject(Base speckleObject, Object nativeObject)
{
if (LoadedAssets.TryGetValue(speckleObject.id, out List<Object>? assets))
{
assets.Add(nativeObject);
return true;
}
LoadedAssets.Add(speckleObject.id, new List<Object> { nativeObject });
return true;
}
}
}