Bump libdcp.
[libsub.git] / src / collect.h
index ff43ce044bade20c7610322a23d2cc32b7d8eb92..5fcf6948c7aacec47ccf371754343725bbe30ab9 100644 (file)
 
 */
 
+#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);
                }
        }
 
@@ -58,3 +64,5 @@ collect (std::list<RawSubtitle> raw)
 }
 
 }
+
+#endif