コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }