Code/k/ECS/Core/ComponentStorage.cs
using System.Collections.Generic;
using Sandbox.k.ECS.Core.Common;
using Sandbox.k.ECS.Core.Interfaces;

namespace Sandbox.k.ECS.Core;

public class ComponentStorage<T> : IComponentStorage where T : struct
{
	private readonly SparseSet<T> _components = new();
    
	public void Add(int entity, T component) => _components.Add(entity, component);
	public void Remove(int entity) => _components.Remove(entity);
	public bool Has(int entity) => _components.Contains(entity);
	public T Get(int entity) => _components[entity];
	public ref T GetRef(int entity) => ref _components.GetRef(entity);
	
	public IEnumerable<KeyValuePair<int, T>> GetAllComponents() => _components.GetAll();
	public IEnumerable<int> GetAllEntities() => _components;
}