k/ECS/Core/ComponentStorageContainer.cs
using System;
using System.Collections.Generic;
using Sandbox.k.ECS.Core.Interfaces;

namespace Sandbox.k.ECS.Core;

public class ComponentStorageContainer
{
	private Dictionary<Type, IComponentStorage> _storages;
	
	public ComponentStorageContainer()
	{
		_storages = new Dictionary<Type, IComponentStorage>();
	}
	
	public void AddStorage<T>(ComponentStorage<T> storage)
	{
		_storages.Add( typeof(T), storage );
	}
	
	public void SetStorage<T>(ComponentStorage<T> storage)
	{
		_storages[typeof(T)] = storage;
	}
	
	public ComponentStorage<T> GetStorage<T>()
	{
		return (ComponentStorage<T>)_storages[typeof(T)];
	}
	
	public bool HasStorage<T>()
	{
		return _storages.ContainsKey( typeof(T) );
	}
	
	public IEnumerable<KeyValuePair<Type, IComponentStorage>> Values => _storages;

	public bool TryGetValue( Type type, out IComponentStorage storage )
	{
		return _storages.TryGetValue( type, out storage );
	}
}