Tidy operator<= for libdcp::Time somewhat. Change subtitles_at to subtitles_during...
authorCarl Hetherington <cth@carlh.net>
Sun, 2 Nov 2014 01:26:13 +0000 (01:26 +0000)
committerCarl Hetherington <cth@carlh.net>
Sun, 2 Nov 2014 01:26:13 +0000 (01:26 +0000)
src/dcp_time.cc
src/dcp_time.h
src/subtitle_asset.cc
src/subtitle_asset.h
test/subtitle_tests.cc

index 9b93391b1e4d96497635a6000eed3ce425b2e9c7..428215cb04a0f8419678d30ed7e56e179601be50 100644 (file)
@@ -99,23 +99,7 @@ libdcp::operator!= (Time const & a, Time const & b)
 bool
 libdcp::operator<= (Time const & a, Time const & b)
 {
-       if (a.h != b.h) {
-               return a.h <= b.h;
-       }
-
-       if (a.m != b.m) {
-               return a.m <= b.m;
-       }
-
-       if (a.s != b.s) {
-               return a.s <= b.s;
-       }
-
-       if (a.t != b.t) {
-               return a.t <= b.t;
-       }
-
-       return true;
+       return a < b || a == b;
 }
 
 bool
@@ -162,6 +146,12 @@ libdcp::operator> (Time const & a, Time const & b)
        return true;
 }
 
+bool
+libdcp::operator>= (Time const & a, Time const & b)
+{
+       return a == b || a > b;
+}
+
 ostream &
 libdcp::operator<< (ostream& s, Time const & t)
 {
index 92cee9a0749a67d760a955f7a8ba5d1cff88a982..a8e7c90c3c5403e163ca9ef0fe3947be7a53071d 100644 (file)
@@ -78,6 +78,7 @@ extern bool operator!= (Time const & a, Time const & b);
 extern bool operator<= (Time const & a, Time const & b);
 extern bool operator< (Time const & a, Time const & b);
 extern bool operator> (Time const & a, Time const & b);
+extern bool operator>= (Time const & a, Time const & b);
 extern std::ostream & operator<< (std::ostream & s, Time const & t);
 extern Time operator+ (Time a, Time const & b);        
 extern Time operator- (Time a, Time const & b);
index 89269fb039afeac18e973c81a6c23b2f643f0491..acd40e9ba2c26252eebd2c34a293b96671d514d8 100644 (file)
@@ -216,11 +216,11 @@ SubtitleAsset::maybe_add_subtitle (string text, ParseState const & parse_state)
 }
 
 list<shared_ptr<Subtitle> >
-SubtitleAsset::subtitles_at (Time t) const
+SubtitleAsset::subtitles_during (Time from, Time to) const
 {
        list<shared_ptr<Subtitle> > s;
        for (list<shared_ptr<Subtitle> >::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
-               if ((*i)->in() <= t && t <= (*i)->out ()) {
+               if ((*i)->out() >= from && (*i)->in() <= to) {
                        s.push_back (*i);
                }
        }
index 3dfbe7e2a388cefe31ee5803c7f56e0ad93027e0..1571e5694fb2005c6a4d5e5f33b3c77592e787a9 100644 (file)
@@ -154,7 +154,7 @@ public:
                return _language;
        }
 
-       std::list<boost::shared_ptr<Subtitle> > subtitles_at (Time t) const;
+       std::list<boost::shared_ptr<Subtitle> > subtitles_during (Time from, Time to) const;
        std::list<boost::shared_ptr<Subtitle> > const & subtitles () const {
                return _subtitles;
        }
index a8fa78b7f5d050b253688d115861332bd95ef523..0994f329028e2570fb51f54402e2d8d732ea2514 100644 (file)
@@ -30,7 +30,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
 
        BOOST_CHECK_EQUAL (subs.language(), "French");
 
-       list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_at (libdcp::Time (0, 0, 6, 1));
+       list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_during (libdcp::Time (0, 0, 6, 1), libdcp::Time (0, 0, 6, 2));
        BOOST_CHECK_EQUAL (s.size(), 1);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -48,7 +48,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
                                   libdcp::Time (0, 0, 0, 1)
                                   ));
                                                         
-       s = subs.subtitles_at (libdcp::Time (0, 0, 7, 190));
+       s = subs.subtitles_during (libdcp::Time (0, 0, 7, 190), libdcp::Time (0, 0, 7, 191));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -81,7 +81,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
                                   libdcp::Time (0, 0, 0, 1)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 0, 11, 95));
+       s = subs.subtitles_during (libdcp::Time (0, 0, 11, 95), libdcp::Time (0, 0, 11, 96));
        BOOST_CHECK_EQUAL (s.size(), 1);
        BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
                                   "Arial",
@@ -99,7 +99,7 @@ BOOST_AUTO_TEST_CASE (subtitles1)
                                   libdcp::Time (0, 0, 0, 1)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 0, 14, 42));
+       s = subs.subtitles_during (libdcp::Time (0, 0, 14, 42), libdcp::Time (0, 0, 14, 43));
        BOOST_CHECK_EQUAL (s.size(), 1);
        BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
                                   "Arial",
@@ -123,7 +123,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
 {
        libdcp::SubtitleAsset subs ("test/data", "subs2.xml");
 
-       list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_at (libdcp::Time (0, 0, 42, 100));
+       list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_during (libdcp::Time (0, 0, 42, 100), libdcp::Time (0, 0, 42, 101));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -156,7 +156,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 0, 50, 50));
+       s = subs.subtitles_during (libdcp::Time (0, 0, 50, 50), libdcp::Time (0, 0, 50, 51));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -189,7 +189,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 1, 2, 300));
+       s = subs.subtitles_during (libdcp::Time (0, 1, 2, 300), libdcp::Time (0, 1, 2, 301));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -222,7 +222,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 1, 15, 50));
+       s = subs.subtitles_during (libdcp::Time (0, 1, 15, 50), libdcp::Time (0, 1, 15, 51));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -255,7 +255,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 1, 27, 200));
+       s = subs.subtitles_during (libdcp::Time (0, 1, 27, 200), libdcp::Time (0, 1, 27, 201));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -288,7 +288,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 1, 42, 300));
+       s = subs.subtitles_during (libdcp::Time (0, 1, 42, 300), libdcp::Time (0, 1, 42, 301));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -321,7 +321,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 1, 45, 200));
+       s = subs.subtitles_during (libdcp::Time (0, 1, 45, 200), libdcp::Time (0, 1, 45, 201));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -354,7 +354,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 1, 47, 249));
+       s = subs.subtitles_during (libdcp::Time (0, 1, 47, 249), libdcp::Time (0, 1, 47, 250));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -387,7 +387,7 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
 
-       s = subs.subtitles_at (libdcp::Time (0, 2, 6, 210));
+       s = subs.subtitles_during (libdcp::Time (0, 2, 6, 210), libdcp::Time (0, 2, 6, 211));
        BOOST_CHECK_EQUAL (s.size(), 2);
        BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
                                   "Arial",
@@ -419,7 +419,4 @@ BOOST_AUTO_TEST_CASE (subtitles2)
                                   libdcp::Time (0, 0, 0, 0),
                                   libdcp::Time (0, 0, 0, 0)
                                   ));
-
-       
-       
 }