/*
- Copyright (C) 2017 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2017-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+
#include "dcpomatic_time.h"
#include <iostream>
+
namespace dcpomatic {
+
/** @param periods Set of periods in ascending order of from time */
template <class T>
-std::list<TimePeriod<T> > coalesce (std::list<TimePeriod<T> > periods)
+std::list<TimePeriod<T>> coalesce (std::list<TimePeriod<T>> periods)
{
bool did_something;
- std::list<TimePeriod<T> > coalesced;
+ std::list<TimePeriod<T>> coalesced;
do {
coalesced.clear ();
did_something = false;
- for (typename std::list<TimePeriod<T> >::const_iterator i = periods.begin(); i != periods.end(); ++i) {
- typename std::list<TimePeriod<T> >::const_iterator j = i;
+ for (auto i = periods.begin(); i != periods.end(); ++i) {
+ auto j = i;
++j;
if (j != periods.end() && (i->overlap(*j) || i->to == j->from)) {
- coalesced.push_back (TimePeriod<T> (i->from, j->to));
+ coalesced.push_back(TimePeriod<T>(std::min(i->from, j->from), std::max(i->to, j->to)));
did_something = true;
++i;
} else {
return periods;
}
+
}