2#include <Scenario/Document/Event/EventModel.hpp>
3#include <Scenario/Document/Interval/IntervalModel.hpp>
4#include <Scenario/Document/State/StateModel.hpp>
5#include <Scenario/Document/TimeSync/TimeSyncModel.hpp>
6#include <Scenario/Process/ScenarioModel.hpp>
10template <
typename Scenario_T>
11StateModel& startState(
const IntervalModel& cst,
const Scenario_T& scenario)
13 return scenario.state(cst.startState());
16template <
typename Scenario_T>
17StateModel& endState(
const IntervalModel& cst,
const Scenario_T& scenario)
19 return scenario.state(cst.endState());
22template <
typename Scenario_T>
23EventModel& startEvent(
const IntervalModel& cst,
const Scenario_T& scenario)
25 return scenario.event(startState(cst, scenario).eventId());
28template <
typename Scenario_T>
29EventModel& endEvent(
const IntervalModel& cst,
const Scenario_T& scenario)
31 return scenario.event(endState(cst, scenario).eventId());
34template <
typename Scenario_T>
35TimeSyncModel& startTimeSync(
const IntervalModel& cst,
const Scenario_T& scenario)
37 return scenario.timeSync(startEvent(cst, scenario).timeSync());
40template <
typename Scenario_T>
41TimeSyncModel& endTimeSync(
const IntervalModel& cst,
const Scenario_T& scenario)
43 return scenario.timeSync(endEvent(cst, scenario).timeSync());
47template <
typename Scenario_T>
48const TimeSyncModel& parentTimeSync(
const EventModel& ev,
const Scenario_T& scenario)
50 return scenario.timeSync(ev.timeSync());
53template <
typename Scenario_T>
54const TimeSyncModel& parentTimeSync(
const Id<EventModel>& ev,
const Scenario_T& scenario)
56 return scenario.timeSync(scenario.event(ev).timeSync());
60template <
typename Scenario_T>
61const EventModel& parentEvent(
const Id<StateModel>& st,
const Scenario_T& scenario)
63 return scenario.event(scenario.state(st).eventId());
66template <
typename Scenario_T>
67const EventModel& parentEvent(
const StateModel& st,
const Scenario_T& scenario)
69 return scenario.event(st.eventId());
72template <
typename Scenario_T>
73const TimeSyncModel& parentTimeSync(
const StateModel& st,
const Scenario_T& scenario)
75 return parentTimeSync(parentEvent(st, scenario), scenario);
78template <
typename Scenario_T>
79const TimeSyncModel& parentTimeSync(
const Id<StateModel>& st,
const Scenario_T& scenario)
81 return parentTimeSync(parentEvent(st, scenario), scenario);
85template <
typename Scenario_T>
86const TimeSyncModel& parentTimeSync(
const TimeSyncModel& st,
const Scenario_T&)
91template <
typename Scenario_T>
92const IntervalModel& previousInterval(
const StateModel& st,
const Scenario_T& scenario)
94 SCORE_ASSERT(st.previousInterval());
95 return scenario.interval(*st.previousInterval());
98template <
typename Scenario_T>
99const IntervalModel& nextInterval(
const StateModel& st,
const Scenario_T& scenario)
101 SCORE_ASSERT(st.nextInterval());
102 return scenario.interval(*st.nextInterval());
105template <
typename Scenario_T>
106std::list<Id<IntervalModel>>
107nextIntervals(
const EventModel& ev,
const Scenario_T& scenario)
109 std::list<Id<IntervalModel>> intervals;
112 const StateModel& st = scenario.state(state);
113 if(
const auto& cst_id = st.nextInterval())
114 intervals.push_back(*cst_id);
119template <
typename Scenario_T>
120std::list<Id<IntervalModel>>
121nextNonGraphIntervals(
const EventModel& ev,
const Scenario_T& scenario)
123 std::list<Id<IntervalModel>> intervals;
126 const StateModel& st = scenario.state(state);
127 if(
const auto& cst_id = st.nextInterval())
129 if(!scenario.interval(*cst_id).graphal())
130 intervals.push_back(*cst_id);
136template <
typename Scenario_T>
137std::list<Id<IntervalModel>>
138previousIntervals(
const EventModel& ev,
const Scenario_T& scenario)
140 std::list<Id<IntervalModel>> intervals;
143 const StateModel& st = scenario.state(state);
144 if(
const auto& cst_id = st.previousInterval())
145 intervals.push_back(*cst_id);
150template <
typename Scenario_T>
151std::list<Id<IntervalModel>>
152previousNonGraphIntervals(
const EventModel& ev,
const Scenario_T& scenario)
154 std::list<Id<IntervalModel>> intervals;
157 const StateModel& st = scenario.state(state);
158 if(
const auto& cst_id = st.previousInterval())
160 if(!scenario.interval(*cst_id).graphal())
161 intervals.push_back(*cst_id);
167template <
typename Scenario_T>
168bool hasPreviousIntervals(
const EventModel& ev,
const Scenario_T& scenario)
172 const StateModel& st = scenario.state(state);
173 if(st.previousInterval())
179template <
typename Scenario_T>
180bool hasNextIntervals(
const EventModel& ev,
const Scenario_T& scenario)
184 const StateModel& st = scenario.state(state);
185 if(st.nextInterval())
191template <
typename Scenario_T>
192bool hasPreviousIntervals(
const IntervalModel& tn,
const Scenario_T& scenario)
194 const EventModel&
event = startEvent(tn, scenario);
195 return hasPreviousIntervals(event, scenario);
198template <
typename Scenario_T>
199bool hasNextIntervals(
const IntervalModel& tn,
const Scenario_T& scenario)
201 const EventModel&
event = endEvent(tn, scenario);
202 return hasNextIntervals(event, scenario);
205template <
typename Scenario_T>
206bool isSingular(
const IntervalModel& itv,
const Scenario_T& scenario)
208 bool singular = itv.processes.empty();
210 singular &= !hasNextIntervals(itv, scenario);
211 singular &= !hasPreviousIntervals(itv, scenario);
213 auto& start_state = startState(itv, scenario);
214 singular &= start_state.empty();
216 auto& end_state = startState(itv, scenario);
217 singular &= end_state.empty();
222template <
typename Scenario_T>
223std::list<Id<IntervalModel>>
224nextIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
226 std::list<Id<IntervalModel>> intervals;
229 const EventModel&
event = scenario.event(event_id);
230 auto next = nextIntervals(event, scenario);
231 intervals.splice(intervals.end(), next);
237template <
typename Scenario_T>
238std::list<Id<IntervalModel>>
239nextNonGraphIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
241 std::list<Id<IntervalModel>> intervals;
244 const EventModel&
event = scenario.event(event_id);
245 auto next = nextNonGraphIntervals(event, scenario);
246 intervals.splice(intervals.end(), next);
252template <
typename Scenario_T>
253std::list<Id<IntervalModel>>
254previousIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
256 std::list<Id<IntervalModel>> intervals;
259 const EventModel&
event = scenario.event(event_id);
260 auto prev = previousIntervals(event, scenario);
261 intervals.splice(intervals.end(), prev);
267template <
typename Scenario_T>
268std::list<Id<IntervalModel>>
269previousNonGraphIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
271 std::list<Id<IntervalModel>> intervals;
274 const EventModel&
event = scenario.event(event_id);
275 auto prev = previousNonGraphIntervals(event, scenario);
276 intervals.splice(intervals.end(), prev);
282template <
typename Scenario_T>
283bool hasPreviousIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
287 const EventModel&
event = scenario.event(event_id);
288 if(hasPreviousIntervals(event, scenario))
295template <
typename Scenario_T>
296bool hasNextIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
300 const EventModel&
event = scenario.event(event_id);
301 if(hasNextIntervals(event, scenario))
308template <
typename Scenario_T>
309std::list<Id<StateModel>> states(
const TimeSyncModel& tn,
const Scenario_T& scenario)
311 std::list<Id<StateModel>> stateList;
314 const EventModel&
event = scenario.event(event_id);
315 std::list<Id<StateModel>> st{
event.states().begin(),
event.states().end()};
317 stateList.splice(stateList.end(), st);
324template <
typename Element_T,
typename Scenario_T>
325const TimeVal& date(
const Element_T& e,
const Scenario_T& scenario)
327 return parentTimeSync(e, scenario).date();
329template <
typename Scenario_T>
330inline const TimeVal& date(
const IntervalModel& e,
const Scenario_T& scenario)
335template <
typename Element_T>
339 auto s = qobject_cast<Scenario::ProcessModel*>(p);
Definition ScenarioInterface.hpp:20
The id_base_t class.
Definition Identifier.hpp:57
Main plug-in of score.
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:13
Definition TimeValue.hpp:21