Some include tidying.
[dcpomatic.git] / src / lib / dcpomatic_time.h
index 4afc9ab40623e09a226965ce8cdfb7e7a77d7784..2408bff812991dd8da237499eeb6509c9ba76fa2 100644 (file)
 #ifndef DCPOMATIC_TIME_H
 #define DCPOMATIC_TIME_H
 
+#include "frame_rate_change.h"
+#include "safe_stringstream.h"
+#include <stdint.h>
 #include <cmath>
 #include <ostream>
 #include <sstream>
 #include <iomanip>
-#include <stdint.h>
-#include "frame_rate_change.h"
 
 class dcpomatic_round_up_test;
 
@@ -39,13 +40,15 @@ public:
                : _t (0)
        {}
 
-       explicit Time (int64_t t)
+       typedef int64_t Type;
+
+       explicit Time (Type t)
                : _t (t)
        {}
 
        virtual ~Time () {}
 
-       int64_t get () const {
+       Type get () const {
                return _t;
        }
 
@@ -58,6 +61,7 @@ public:
                return rint (_t * r / HZ);
        }
 
+       /** @param r Frames per second */
        template <typename T>
        void split (T r, int& h, int& m, int& s, int& f) const
        {
@@ -84,7 +88,7 @@ public:
                int f;
                split (r, h, m, s, f);
 
-               std::ostringstream o;
+               SafeStringStream o;
                o.width (2);
                o.fill ('0');
                o << std::setw(2) << std::setfill('0') << h << ":"
@@ -95,9 +99,9 @@ public:
        }
 
 protected:
-       friend class dcptime_round_up_test;
+       friend struct dcptime_round_up_test;
        
-       int64_t _t;
+       Type _t;
        static const int HZ = 96000;
 };
 
@@ -107,8 +111,8 @@ class ContentTime : public Time
 {
 public:
        ContentTime () : Time () {}
-       explicit ContentTime (int64_t t) : Time (t) {}
-       ContentTime (int64_t n, int64_t d) : Time (n * HZ / d) {}
+       explicit ContentTime (Type t) : Time (t) {}
+       ContentTime (Type n, Type d) : Time (n * HZ / d) {}
        ContentTime (DCPTime d, FrameRateChange f);
 
        bool operator< (ContentTime const & o) const {
@@ -162,8 +166,8 @@ public:
         *  @param r Sampling rate.
         */
        ContentTime round_up (float r) {
-               int64_t const n = rint (HZ / r);
-               int64_t const a = _t + n - 1;
+               Type const n = rint (HZ / r);
+               Type const a = _t + n - 1;
                return ContentTime (a - (a % n));
        }
 
@@ -201,13 +205,14 @@ public:
        }
 
        bool overlaps (ContentTimePeriod const & o) const;
+       bool contains (ContentTime const & o) const;
 };
 
 class DCPTime : public Time
 {
 public:
        DCPTime () : Time () {}
-       explicit DCPTime (int64_t t) : Time (t) {}
+       explicit DCPTime (Type t) : Time (t) {}
        DCPTime (ContentTime t, FrameRateChange c) : Time (rint (t.get() / c.speed_up)) {}
 
        bool operator< (DCPTime const & o) const {
@@ -261,8 +266,8 @@ public:
         *  @param r Sampling rate.
         */
        DCPTime round_up (float r) {
-               int64_t const n = rint (HZ / r);
-               int64_t const a = _t + n - 1;
+               Type const n = rint (HZ / r);
+               Type const a = _t + n - 1;
                return DCPTime (a - (a % n));
        }