*/
+#ifndef LIBSUB_COLLECT_H
+#define LIBSUB_COLLECT_H
+
#include "subtitle.h"
#include "raw_subtitle.h"
namespace sub {
-
+
+/** Collect sub::RawSubtitle objects into sub::Subtitles.
+ * This method is templated so that any container type can be used for the result.
+ */
template <class T>
T
-collect (std::list<RawSubtitle> raw)
+collect (std::vector<RawSubtitle> raw)
{
- raw.sort ();
+ std::stable_sort (raw.begin(), raw.end());
T out;
boost::optional<Subtitle> current;
- for (std::list<RawSubtitle>::const_iterator i = raw.begin (); i != raw.end(); ++i) {
- if (current && current->same_metadata (*i)) {
+ for (auto const& i: raw) {
+ if (current && current->same_metadata(i)) {
/* This RawSubtitle can be added to current... */
- if (!current->lines.empty() && current->lines.back().same_metadata (*i)) {
+ if (!current->lines.empty() && current->lines.back().same_metadata(i)) {
/* ... and indeed to its last line */
- current->lines.back().blocks.push_back (Block (*i));
+ current->lines.back().blocks.push_back(Block(i));
} else {
/* ... as a new line */
- current->lines.push_back (Line (*i));
+ current->lines.push_back(Line(i));
}
} else {
/* We must start a new Subtitle */
if (current) {
out.push_back (current.get ());
}
- current = Subtitle (*i);
+ current = Subtitle (i);
}
}
}
}
+
+#endif