using System.Collections.Generic; using Svelto.DataStructures; using Svelto.ECS.Internal; namespace Svelto.ECS { public class StructNodes: IStructNodes where T:struct, IStructNodeWithID { public FasterList list { get { return _internalList; } } public StructNodes() { _internalList = new FasterList(); } public void Add(T node) { T convert = (T)node; _internalList.Add(convert); } readonly FasterList _internalList; } public class StructGroupNodes: IStructGroupNodes where T : struct, IGroupedStructNodeWithID { public void Add(int groupID, T node) { T convert = (T)node; var fasterList = GetList(groupID); _indices[node.ID] = fasterList.Count; fasterList.Add(convert); } public void Remove(int groupID, T node) { var fasterList = GetList(groupID); var index = _indices[node.ID]; _indices.Remove(node.ID); if (fasterList.UnorderedRemoveAt(index)) _indices[fasterList[index].ID] = index; } public FasterList GetList(int groupID) { return _nodes[groupID]; } readonly Dictionary _indices = new Dictionary(); Dictionary> _nodes = new Dictionary>(); } } namespace Svelto.ECS.Internal { public interface IStructGroupNodes { } public interface IStructNodes { } }