17 std::vector<SchedulePeriod>
processRawSchedule(std::vector<SchedulePeriod> periods,
const std::string& ownerName,
18 const bool isPulsed,
const RealType pri)
25 std::vector<SchedulePeriod> valid_periods;
26 valid_periods.reserve(periods.size());
32 for (
const auto& p : periods)
37 "Object '{}' has a schedule period with start ({}) >= end ({}). Ignoring period.", ownerName,
42 if (p.end <= sim_start || p.start >= sim_end)
45 "Object '{}' has a schedule period [{}, {}] completely outside simulation time. Ignoring.",
46 ownerName, p.start, p.end);
49 valid_periods.push_back(p);
52 if (valid_periods.empty())
58 std::sort(valid_periods.begin(), valid_periods.end(),
59 [](
const auto& a,
const auto& b) { return a.start < b.start; });
62 std::vector<SchedulePeriod> merged;
63 merged.reserve(valid_periods.size());
64 merged.push_back(valid_periods.front());
66 for (
size_t i = 1; i < valid_periods.size(); ++i)
68 if (valid_periods[i].start <= merged.back().end)
71 merged.back().end = std::max(merged.back().end, valid_periods[i].end);
75 merged.push_back(valid_periods[i]);
82 for (
const auto& period : merged)
84 if (period.end - period.start < pri)
87 ownerName, period.start, period.end, pri);
std::vector< SchedulePeriod > processRawSchedule(std::vector< SchedulePeriod > periods, const std::string &ownerName, const bool isPulsed, const RealType pri)
Processes a raw list of schedule periods.