namespace Svelto.ES { public interface IEngine {} public interface INodeEngine:IEngine where TNodeType:INode { void Add(TNodeType obj); void Remove(TNodeType obj); } public interface INodesEngine : INodeEngine { System.Type[] AcceptedNodes(); } public interface IQueryableNodeEngine:IEngine { IEngineNodeDB nodesDB { set; } } public abstract class SingleNodeEngine : INodeEngine where TNodeType:class, INode { void INodeEngine.Add(INode obj) { Add(obj as TNodeType); } void INodeEngine.Remove(INode obj) { Remove(obj as TNodeType); } protected abstract void Add(TNodeType node); protected abstract void Remove(TNodeType node); } }