using System; using System.Collections.Generic; using System.Linq; namespace WotBlitzStatisticsPro.Logic.Pipeline { public class Pipeline: IPipeline { private readonly IOperationFactory _operationFactory; private readonly List _operations = new List(); public Pipeline(IOperationFactory operationFactory) { _operationFactory = operationFactory; } public IOperation? Build() { var allOperationTypes = _operations.ToArray(); var lastOperationType = allOperationTypes.LastOrDefault(); if (lastOperationType == null) { return null; } var nextOperation = new OperationMediator(_operationFactory.Create(lastOperationType), null); for (int i = allOperationTypes.Length - 2; i >= 0; i--) { nextOperation = new OperationMediator(_operationFactory.Create(allOperationTypes[i]), nextOperation); } return nextOperation; } public IPipeline AddOperation() where TOperation : IOperation { _operations.Add(typeof(TOperation)); return this; } } }