X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcpomatic_time_coalesce.h;h=015326bdd7b73d4f9a5550a8606a1f8439b5167f;hb=62f9b78a2eb5f0fc6b9028264bac6ad501d83309;hp=e6e16641ef7e65091993dbe1d4e1b892fac0eeae;hpb=c4403784febdbdd42e9c32e67fadb147f11fe566;p=dcpomatic.git diff --git a/src/lib/dcpomatic_time_coalesce.h b/src/lib/dcpomatic_time_coalesce.h index e6e16641e..015326bdd 100644 --- a/src/lib/dcpomatic_time_coalesce.h +++ b/src/lib/dcpomatic_time_coalesce.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2017 Carl Hetherington + Copyright (C) 2017-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,25 +18,28 @@ */ + #include "dcpomatic_time.h" #include + namespace dcpomatic { + /** @param periods Set of periods in ascending order of from time */ template -std::list > coalesce (std::list > periods) +std::list> coalesce (std::list> periods) { bool did_something; - std::list > coalesced; + std::list> coalesced; do { coalesced.clear (); did_something = false; - for (typename std::list >::const_iterator i = periods.begin(); i != periods.end(); ++i) { - typename std::list >::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 (i->from, j->to)); + coalesced.push_back(TimePeriod(std::min(i->from, j->from), std::max(i->to, j->to))); did_something = true; ++i; } else { @@ -49,4 +52,5 @@ std::list > coalesce (std::list > periods) return periods; } + }