diff --git a/src/steam/fixture/segment.hpp b/src/steam/fixture/segment.hpp index ac58c00d5..09d9fb70b 100644 --- a/src/steam/fixture/segment.hpp +++ b/src/steam/fixture/segment.hpp @@ -75,9 +75,15 @@ namespace fixture { // TODO: ownership?? ///////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #725 : placeholder code public: - Segment (TimeSpan covered =TimeSpan::ALL) + Segment (TimeSpan covered =TimeSpan::ALL + ,const engine::JobTicket* ticket =nullptr) : span_{covered} - , jobTicket_{&engine::JobTicket::NOP} + , jobTicket_{ticket? ticket : &engine::JobTicket::NOP} + { } + + Segment (Segment const& original, TimeSpan changed) + : span_{changed} + , jobTicket_{original.jobTicket_} { } // default copy acceptable diff --git a/src/steam/fixture/segmentation.cpp b/src/steam/fixture/segmentation.cpp index 6a853d558..472073daf 100644 --- a/src/steam/fixture/segmentation.cpp +++ b/src/steam/fixture/segmentation.cpp @@ -33,6 +33,9 @@ #include "lib/time/timevalue.hpp" #include "lib/split-splice.hpp" +using lib::time::Time; +using lib::time::TimeSpan; + namespace steam { namespace fixture { @@ -73,14 +76,15 @@ namespace fixture { Segment const& Segmentation::splitSplice (OptTime start, OptTime after, const engine::JobTicket* jobTicket) { + ASSERT (!start or !after or start != after); using Iter = typename list::iterator; - auto getStart = [](Iter elm) -> Time { return elm->start(); }; - auto getAfter = [](Iter elm) -> Time { return elm->after(); }; - auto createSeg= [](Iter pos, Time start, Time after) -> Iter { UNIMPLEMENTED ("create new Segment"); }; - auto emptySeg = [](Iter pos, Time start, Time after) -> Iter { UNIMPLEMENTED ("create empty Segment");}; - auto cloneSeg = [](Iter pos, Time start, Time after, Iter src) -> Iter { UNIMPLEMENTED ("clone Segment and modify time"); }; - auto discard = [](Iter pos, Iter after) -> Iter { UNIMPLEMENTED ("discard Segments"); }; + auto getStart = [](Iter elm) -> Time { return elm->start(); }; + auto getAfter = [](Iter elm) -> Time { return elm->after(); }; + auto createSeg= [&](Iter pos, Time start, Time after) -> Iter { return segments_.emplace (pos, TimeSpan{start, after}, jobTicket); }; + auto emptySeg = [&](Iter pos, Time start, Time after) -> Iter { return segments_.emplace (pos, TimeSpan{start, after}); }; + auto cloneSeg = [&](Iter pos, Time start, Time after, Iter src) -> Iter { return segments_.emplace (pos, *src, TimeSpan{start, after}); }; + auto discard = [&](Iter pos, Iter after) -> Iter { return segments_.erase (pos,after); }; lib::splitsplice::Algo splicer{ getStart diff --git a/tests/core/steam/engine/mock-dispatcher.hpp b/tests/core/steam/engine/mock-dispatcher.hpp index 411866d4a..bdb68cf5d 100644 --- a/tests/core/steam/engine/mock-dispatcher.hpp +++ b/tests/core/steam/engine/mock-dispatcher.hpp @@ -208,8 +208,8 @@ namespace test { for (auto& spec : specs) { JobTicket* newTicket = nullptr; - auto seed = spec.retrieveAttribute ("mark"); - tickets_.emplace_back (seed? *seed : HashVal(rand() % 1000)); + auto seed = spec.retrieveAttribute ("mark"); + tickets_.emplace_back (seed? HashVal(*seed) : HashVal(rand() % 1000)); newTicket = & tickets_.back(); auto start = spec.retrieveAttribute