55 lines
1.6 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|