Make terminate_threads() less likely to leave _threads containing invalid pointers.
[dcpomatic.git] / src / lib / overlaps.h
index 6018af15f56ff7dec1b3b37bea5af8e38f4403c3..be3edf9d42559bae365c3e6f364a8572dd4705cf 100644 (file)
@@ -1,39 +1,33 @@
 /*
-    Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net>
 
-    This program is free software; you can redistribute it and/or modify
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
-    This program is distributed in the hope that it will be useful,
+    DCP-o-matic is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
-/** @return Pieces of content type C that overlap a specified time range in the given ContentList */
-template<class C>
-std::list<boost::shared_ptr<C> >
-overlaps (ContentList cl, DCPTime from, DCPTime to)
-{
-       std::list<boost::shared_ptr<C> > overlaps;
-       DCPTimePeriod period (from, to);
-       for (typename ContentList::const_iterator i = cl.begin(); i != cl.end(); ++i) {
-               boost::shared_ptr<C> c = boost::dynamic_pointer_cast<C> (*i);
-               if (!c) {
-                       continue;
-               }
-
-               if (DCPTimePeriod(c->position(), c->end()).overlaps (period)) {
-                       overlaps.push_back (c);
-               }
-       }
-
-       return overlaps;
-}
+#include "types.h"
+#include "dcpomatic_time.h"
+
+class ContentPart;
+class Film;
+
+/** @return Pieces of content with a given part (video, audio,
+ *  subtitle) that overlap a specified time range in the given
+ *  ContentList
+ */
+ContentList overlaps (
+       boost::shared_ptr<const Film> film, ContentList cl, boost::function<bool (boost::shared_ptr<const Content>)> part, DCPTime from, DCPTime to
+       );