コード例 #1
0
        public virtual void Execute()
        {
            PipelineJob[] jobs = RunSteps.Where(SupportsType).ToArray();

            for (JobIndex = 0; JobIndex < jobs.Length; JobIndex++)
            {
                if (JobIsManifestProcessor())
                {
                    ExecuteManifestLoop();
                }
                else
                {
                    ExecuteJob();
                }
            }

            JobIndex = -1;

            PipelineJob Job() => jobs[JobIndex];

            void ExecuteJob() => Job().Execute(this);

            bool JobIsManifestProcessor() => Job().GetType().GetCustomAttributes <ManifestProcessorAttribute>().Any();

            bool CanProcessManifest(RequiresManifestDatumTypeAttribute attribute) => attribute.CanProcessManifest(Manifest);

            bool JobCanProcessManifest() => Job().GetType().GetCustomAttributes <RequiresManifestDatumTypeAttribute>().All(CanProcessManifest);

            void ExecuteManifestLoop()
            {
                for (ManifestIndex = 0; ManifestIndex < manifests.Length; ManifestIndex++)
                {
                    if (Manifest && JobCanProcessManifest())
                    {
                        ExecuteJob();
                    }
                }

                ManifestIndex = -1;
            }
        }
コード例 #2
0
        /// <summary>Gets the include functions.</summary>
        /// <param name="run">The run.</param>
        /// <param name="campaign">The campaign.</param>
        /// <returns></returns>
        private static RunSteps GetIncludeFunctions(Run run, Campaign campaign)
        {
            RunSteps incFunctions = RunSteps.None;

            if (run.Smooth)
            {
                incFunctions |= RunSteps.CXgSmooth;
            }

            if (run.ISR && IsIsrApplicableForCampaign(run, campaign))
            {
                incFunctions |= RunSteps.CXgIsr;
            }

            if (run.Optimisation && campaign.IncludeOptimisation)
            {
                incFunctions |= RunSteps.CXgOptimiser;
            }

            if (run.RightSizer && IsRightSizerApplicableForCampaign(run, campaign))
            {
                incFunctions |= RunSteps.CXgRightSizer;
                var resolvedRightSizerLevel = ResolveRightSizerLevelForCampaign(run, campaign);
                switch (resolvedRightSizerLevel)
                {
                case RightSizerLevel.CampaignLevel:
                    incFunctions |= RunSteps.CXgRightSizerCamp;
                    break;

                case RightSizerLevel.DetailLevel:
                    incFunctions |= RunSteps.CXgRightSizerDetail;
                    break;
                }
            }

            return(incFunctions);
        }