/* Copyright (C) 2015 Carl Hetherington This program 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, 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. */ #ifndef LIBSUB_SUB_TIME_H #define LIBSUB_SUB_TIME_H #include "frame_rate.h" #include struct time_construction_test; namespace sub { class Time { public: Time () : hours (0) , minutes (0) , seconds (0) {} int hours; int minutes; int seconds; boost::optional frames () const { return _frames; } /** @return the frames part of the time at a particular frame rate */ int frames (FrameRate r) const; /** @return the whole time in milliseconds */ int64_t as_milliseconds () const; static Time from_hmsf (int h, int m, int s, int f); static Time from_hmsf (int h, int m, int s, int f, FrameRate r); static Time from_hms (int h, int m, double s); static Time from_hmsm (int h, int m, int s, int ms); static Time from_frames (int64_t f, FrameRate r); static Time from_milliseconds (int64_t ms); bool operator== (Time const & other) const; bool operator!= (Time const & other) const; bool operator< (Time const & other) const; bool operator<= (Time const & other) const; bool operator> (Time const & other) const; bool operator>= (Time const & other) const; private: friend std::ostream & operator<< (std::ostream& s, Time const & t); friend Time operator+ (Time const & a, Time const & b); friend Time operator- (Time const & a, Time const & b); friend double operator/ (Time const & a, Time const & b); friend struct ::time_construction_test; Time (int h, int m, int s, boost::optional ms, boost::optional f, boost::optional r); boost::optional _milliseconds; boost::optional _frames; boost::optional _frame_rate; }; std::ostream& operator<< (std::ostream& s, Time const & t); Time operator+ (Time const & a, Time const & b); Time operator- (Time const & a, Time const & b); double operator/ (Time const & a, Time const & b); } #endif