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>
10 template <
typename Scenario_T>
11 StateModel& startState(
const IntervalModel& cst,
const Scenario_T& scenario)
13 return scenario.state(cst.startState());
16 template <
typename Scenario_T>
17 StateModel& endState(
const IntervalModel& cst,
const Scenario_T& scenario)
19 return scenario.state(cst.endState());
22 template <
typename Scenario_T>
23 EventModel& startEvent(
const IntervalModel& cst,
const Scenario_T& scenario)
25 return scenario.event(startState(cst, scenario).eventId());
28 template <
typename Scenario_T>
29 EventModel& endEvent(
const IntervalModel& cst,
const Scenario_T& scenario)
31 return scenario.event(endState(cst, scenario).eventId());
34 template <
typename Scenario_T>
35 TimeSyncModel& startTimeSync(
const IntervalModel& cst,
const Scenario_T& scenario)
37 return scenario.timeSync(startEvent(cst, scenario).timeSync());
40 template <
typename Scenario_T>
41 TimeSyncModel& endTimeSync(
const IntervalModel& cst,
const Scenario_T& scenario)
43 return scenario.timeSync(endEvent(cst, scenario).timeSync());
47 template <
typename Scenario_T>
48 const TimeSyncModel& parentTimeSync(
const EventModel& ev,
const Scenario_T& scenario)
50 return scenario.timeSync(ev.timeSync());
53 template <
typename Scenario_T>
54 const TimeSyncModel& parentTimeSync(
const Id<EventModel>& ev,
const Scenario_T& scenario)
56 return scenario.timeSync(scenario.event(ev).timeSync());
60 template <
typename Scenario_T>
61 const EventModel& parentEvent(
const Id<StateModel>& st,
const Scenario_T& scenario)
63 return scenario.event(scenario.state(st).eventId());
66 template <
typename Scenario_T>
67 const EventModel& parentEvent(
const StateModel& st,
const Scenario_T& scenario)
69 return scenario.event(st.eventId());
72 template <
typename Scenario_T>
73 const TimeSyncModel& parentTimeSync(
const StateModel& st,
const Scenario_T& scenario)
75 return parentTimeSync(parentEvent(st, scenario), scenario);
78 template <
typename Scenario_T>
79 const TimeSyncModel& parentTimeSync(
const Id<StateModel>& st,
const Scenario_T& scenario)
81 return parentTimeSync(parentEvent(st, scenario), scenario);
85 template <
typename Scenario_T>
86 const TimeSyncModel& parentTimeSync(
const TimeSyncModel& st,
const Scenario_T&)
91 template <
typename Scenario_T>
92 const IntervalModel& previousInterval(
const StateModel& st,
const Scenario_T& scenario)
94 SCORE_ASSERT(st.previousInterval());
95 return scenario.interval(*st.previousInterval());
98 template <
typename Scenario_T>
99 const IntervalModel& nextInterval(
const StateModel& st,
const Scenario_T& scenario)
101 SCORE_ASSERT(st.nextInterval());
102 return scenario.interval(*st.nextInterval());
105 template <
typename Scenario_T>
106 std::list<Id<IntervalModel>>
107 nextIntervals(
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);
119 template <
typename Scenario_T>
120 std::list<Id<IntervalModel>>
121 nextNonGraphIntervals(
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);
136 template <
typename Scenario_T>
137 std::list<Id<IntervalModel>>
138 previousIntervals(
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);
150 template <
typename Scenario_T>
151 std::list<Id<IntervalModel>>
152 previousNonGraphIntervals(
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);
167 template <
typename Scenario_T>
168 bool hasPreviousIntervals(
const EventModel& ev,
const Scenario_T& scenario)
172 const StateModel& st = scenario.state(state);
173 if(st.previousInterval())
179 template <
typename Scenario_T>
180 bool hasNextIntervals(
const EventModel& ev,
const Scenario_T& scenario)
184 const StateModel& st = scenario.state(state);
185 if(st.nextInterval())
191 template <
typename Scenario_T>
192 bool hasPreviousIntervals(
const IntervalModel& tn,
const Scenario_T& scenario)
194 const EventModel&
event = startEvent(tn, scenario);
195 return hasPreviousIntervals(event, scenario);
198 template <
typename Scenario_T>
199 bool hasNextIntervals(
const IntervalModel& tn,
const Scenario_T& scenario)
201 const EventModel&
event = endEvent(tn, scenario);
202 return hasNextIntervals(event, scenario);
205 template <
typename Scenario_T>
206 bool 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();
222 template <
typename Scenario_T>
223 std::list<Id<IntervalModel>>
224 nextIntervals(
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);
237 template <
typename Scenario_T>
238 std::list<Id<IntervalModel>>
239 nextNonGraphIntervals(
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);
252 template <
typename Scenario_T>
253 std::list<Id<IntervalModel>>
254 previousIntervals(
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);
267 template <
typename Scenario_T>
268 std::list<Id<IntervalModel>>
269 previousNonGraphIntervals(
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);
282 template <
typename Scenario_T>
283 bool hasPreviousIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
287 const EventModel&
event = scenario.event(event_id);
288 if(hasPreviousIntervals(event, scenario))
295 template <
typename Scenario_T>
296 bool hasNextIntervals(
const TimeSyncModel& tn,
const Scenario_T& scenario)
300 const EventModel&
event = scenario.event(event_id);
301 if(hasNextIntervals(event, scenario))
308 template <
typename Scenario_T>
309 std::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);
324 template <
typename Element_T,
typename Scenario_T>
325 const TimeVal& date(
const Element_T& e,
const Scenario_T& scenario)
327 return parentTimeSync(e, scenario).date();
329 template <
typename Scenario_T>
330 inline const TimeVal& date(
const IntervalModel& e,
const Scenario_T& scenario)
335 template <
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:14
Definition: TimeValue.hpp:21