using System; using System.Collections.Generic; namespace Svelto.ES { public sealed class EnginesRoot: INodeEnginesRoot { public EnginesRoot() { _nodeEngines = new Dictionary>(); } public void AddEngine(IEngine engine) { if (engine is INodeEngine) AddNodeEngine(engine as INodeEngine); } public void Add(INode node) { Type nodeType = node.GetType(); List value; if (_nodeEngines.TryGetValue(nodeType, out value)) for (int j = 0; j < value.Count; j++) value[j].Add(node); } public void Remove(INode node) { Type nodeType = node.GetType(); List value; if (_nodeEngines.TryGetValue(nodeType, out value)) for (int j = 0; j < value.Count; j++) value[j].Remove(node); } void AddNodeEngine(INodeEngine engine) { AddEngine(engine, engine.AcceptedNodes(), _nodeEngines); } void AddEngine(T engine, Type[] types, Dictionary> engines) { for (int i = 0; i < types.Length; i++) { List value; var type = types[i]; if (engines.TryGetValue(type, out value) == false) { List list = new List(); list.Add(engine); engines.Add(type, list); } else value.Add(engine); } } Dictionary> _nodeEngines; } }