private static void PerformOperation <T>(INetworkCoverage coverage, double referenceValue, Func <double, double, T> operation, INetworkCoverage outputCoverage = null) { var allLocations = coverage.Locations.Values.Distinct().OrderBy(loc => loc).ToList(); if (coverage.IsTimeDependent) { foreach (var time in coverage.Time.Values) { if (outputCoverage != null) { OperateOneTimeStep(coverage.AddTimeFilter(time), referenceValue, allLocations, operation, outputCoverage.AddTimeFilter(time)); } else { OperateOneTimeStep(coverage.AddTimeFilter(time), referenceValue, allLocations, operation); } } } else { OperateOneTimeStep(coverage, referenceValue, allLocations, operation, outputCoverage); } }
private static void PerformOperation <T>(INetworkCoverage coverage, IEnumerable <INetworkCoverage> otherCoverages, Func <IEnumerable <double>, T> operation, INetworkCoverage outputCoverage = null) { var allLocations = GetAllLocations(coverage, otherCoverages); if (coverage.IsTimeDependent) { ThrowIfCoverageTimeValuesNotEqual(coverage, otherCoverages); foreach (var time in coverage.Time.Values) { foreach (var networkCoverage in otherCoverages) { networkCoverage.AddTimeFilter(time); } if (outputCoverage != null) { OperateOneTimestep(coverage.AddTimeFilter(time), otherCoverages, allLocations, operation, outputCoverage.AddTimeFilter(time)); } else { OperateOneTimestep(coverage.AddTimeFilter(time), otherCoverages, allLocations, operation); } } } else { OperateOneTimestep(coverage, otherCoverages, allLocations, operation, outputCoverage); } }
public static void Operate(this INetworkCoverage coverageA, INetworkCoverage coverageB, Func <double, double, double> operation) { var allLocations = GetAllLocations(coverageA, coverageB); if (coverageA.IsTimeDependent && coverageB.IsTimeDependent) { ThrowIfCoverageTimeValuesNotEqual(coverageA, coverageB); foreach (var time in coverageA.Time.Values) { OperateOneTimestep(coverageA.AddTimeFilter(time), coverageB.AddTimeFilter(time), allLocations, operation); } return; } if (coverageA.IsTimeDependent) { foreach (var time in coverageA.Time.Values) { OperateOneTimestep(coverageA.AddTimeFilter(time), coverageB, allLocations, operation); } return; } if (coverageB.IsTimeDependent) { foreach (var time in coverageB.Time.Values) { OperateOneTimestep(coverageA, coverageB.AddTimeFilter(time), allLocations, operation); } return; } OperateOneTimestep(coverageA, coverageB, allLocations, operation); }