Rename some variables and re-implement collect().
[dcpomatic.git] / src / lib / kdm_with_metadata.cc
index fe4f9ccdde7154e9e15fcab784253a191c073ccf..62d544e0b836ad8f898cbf7fc944a6b34cbd39c4 100644 (file)
@@ -41,7 +41,7 @@ using boost::function;
 
 int
 write_files (
-       list<KDMWithMetadataPtr> screen_kdms,
+       list<KDMWithMetadataPtr> kdms,
        boost::filesystem::path directory,
        dcp::NameFormat name_format,
        dcp::NameFormat::Map name_values,
@@ -52,7 +52,7 @@ write_files (
 
        if (directory == "-") {
                /* Write KDMs to the stdout */
-               BOOST_FOREACH (KDMWithMetadataPtr i, screen_kdms) {
+               BOOST_FOREACH (KDMWithMetadataPtr i, kdms) {
                        cout << i->kdm_as_xml ();
                        ++written;
                }
@@ -65,7 +65,7 @@ write_files (
        }
 
        /* Write KDMs to the specified directory */
-       BOOST_FOREACH (KDMWithMetadataPtr i, screen_kdms) {
+       BOOST_FOREACH (KDMWithMetadataPtr i, kdms) {
                name_values['i'] = i->kdm_id ();
                boost::filesystem::path out = directory / careful_string_filter(name_format.get(name_values, ".xml"));
                if (!boost::filesystem::exists (out) || confirm_overwrite (out)) {
@@ -105,41 +105,33 @@ make_zip_file (list<KDMWithMetadataPtr> kdms, boost::filesystem::path zip_file,
 }
 
 
-/** Collect a list of KDMWithMetadatas into a list of list<KDMWithMetadata> so that each
- *  CinemaKDM contains the KDMs for its cinema.
+/** Collect a list of KDMWithMetadatas into a list of lists so that
+ *  each list contains the KDMs for one cinema.
  */
 list<list<KDMWithMetadataPtr> >
-collect (list<KDMWithMetadataPtr> screen_kdms)
+collect (list<KDMWithMetadataPtr> kdms)
 {
-       list<list<KDMWithMetadataPtr> > cinema_kdms;
-
-       while (!screen_kdms.empty ()) {
-
-               /* Get all the screens from a single cinema */
+       list<list<KDMWithMetadataPtr> > grouped;
 
-               list<KDMWithMetadataPtr> ck;
+       BOOST_FOREACH (KDMWithMetadataPtr i, kdms) {
 
-               list<KDMWithMetadataPtr>::iterator i = screen_kdms.begin ();
-               ck.push_back (*i);
-               list<KDMWithMetadataPtr>::iterator j = i;
-               ++i;
-               screen_kdms.remove (*j);
+               list<list<KDMWithMetadataPtr> >::iterator j = grouped.begin ();
 
-               while (i != screen_kdms.end ()) {
-                       if ((*i)->cinema() == ck.front()->cinema()) {
-                               ck.push_back (*i);
-                               list<KDMWithMetadataPtr>::iterator j = i;
-                               ++i;
-                               screen_kdms.remove (*j);
-                       } else {
-                               ++i;
+               while (j != grouped.end()) {
+                       if (j->front()->cinema() == i->cinema()) {
+                               j->push_back (i);
+                               break;
                        }
+                       ++j;
                }
 
-               cinema_kdms.push_back (ck);
+               if (j == grouped.end()) {
+                       grouped.push_back (list<KDMWithMetadataPtr>());
+                       grouped.back().push_back (i);
+               }
        }
 
-       return cinema_kdms;
+       return grouped;
 }