From 25be40bb4a3fefc29806095cfc992289a4245d81 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Mon, 11 Feb 2013 03:23:10 +0100 Subject: [PATCH] change PlanningStepGenerator end-of-sequence logic basically I've changed my mind to prefer an infinite JobPlanningSequence, which is just evaluated partially. This removes the need to embody the logic of planning chunk generation, which really is a different concern. --- src/proc/engine/dispatcher.hpp | 1 - src/proc/engine/frame-coord.hpp | 1 + src/proc/engine/job-planning.hpp | 19 ++++++++++++------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/proc/engine/dispatcher.hpp b/src/proc/engine/dispatcher.hpp index d24df3a12..856252a56 100644 --- a/src/proc/engine/dispatcher.hpp +++ b/src/proc/engine/dispatcher.hpp @@ -94,7 +94,6 @@ namespace engine { return JobPlanningSequence( relativeFrameLocation(refPoint_), - nextPlanningAnchor.getStartFrame(), dispatcher_); } diff --git a/src/proc/engine/frame-coord.hpp b/src/proc/engine/frame-coord.hpp index 86999285f..8b8c45643 100644 --- a/src/proc/engine/frame-coord.hpp +++ b/src/proc/engine/frame-coord.hpp @@ -36,6 +36,7 @@ namespace engine { using mobject::ModelPort; using lib::time::TimeVar; + using lib::time::Time; /** diff --git a/src/proc/engine/job-planning.hpp b/src/proc/engine/job-planning.hpp index dbd037931..f82c9c9b9 100644 --- a/src/proc/engine/job-planning.hpp +++ b/src/proc/engine/job-planning.hpp @@ -304,16 +304,15 @@ namespace engine { //////////////////////////////////////////TODO duplicated storage of a FrameCoord record //////////////////////////////////////////TODO nextEvaluation_ is only needed to initialise the "current" sequence //////////////////////////////////////////TODO within the RecursiveSelfIntegration strategy. Maybe this storage could be collapsed? - mutable JobPlanning nextEvaluation_; + JobPlanning nextEvaluation_; - JobPlanning& + void use_current_location_as_starting_point_for_planning() { JobTicket& processingPlan = locationGenerator_->getJobTicketFor (currentLocation_); nextEvaluation_ = JobPlanning(processingPlan.startExploration() ,currentLocation_); - return nextEvaluation_; } @@ -327,7 +326,10 @@ namespace engine { PlanningStepGenerator(FrameCoord startPoint, FrameLocator& locator) : locationGenerator_(&locator) , currentLocation_(startPoint) - { } + { + REQUIRE (startPoint.isDefined()); + use_current_location_as_starting_point_for_planning(); + } // default copyable @@ -343,13 +345,16 @@ namespace engine { friend JobPlanning& yield (PlanningStepGenerator const& gen) { - return unConst(gen).use_current_location_as_starting_point_for_planning(); + ENSURE (checkPoint (gen)); + return unConst(gen).nextEvaluation_; } friend void iterNext (PlanningStepGenerator & gen) { gen.currentLocation_ = gen.locationGenerator_->getNextFrame (gen.currentLocation_); + if (checkPoint (gen)) + gen.use_current_location_as_starting_point_for_planning(); } }; @@ -398,10 +403,10 @@ namespace engine { { public: - JobPlanningSequence(engine::FrameCoord startPoint, int64_t stopPoint, FrameLocator& locator) + JobPlanningSequence(engine::FrameCoord startPoint, FrameLocator& locator) : ExpandedPlanningSequence( JobPlanningChunkStartPoint( - PlanningStepGenerator(startPoint,stopPoint,locator)) + PlanningStepGenerator(startPoint,locator)) >>= expandPrerequisites) // "flat map" (monad operation) { }