00001 #ifndef PROTON_DURATION_HPP
00002 #define PROTON_DURATION_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "./internal/export.hpp"
00026 #include "./internal/comparable.hpp"
00027 #include "./types_fwd.hpp"
00028
00029 #include <iosfwd>
00030
00031 namespace proton {
00032
00034 class duration : private internal::comparable<duration> {
00035 public:
00037 typedef int64_t numeric_type;
00038
00040 explicit duration(numeric_type ms = 0) : ms_(ms) {}
00041
00043 duration& operator=(numeric_type ms) { ms_ = ms; return *this; }
00044
00046 numeric_type milliseconds() const { return ms_; }
00047
00048 PN_CPP_EXTERN static const duration FOREVER;
00049 PN_CPP_EXTERN static const duration IMMEDIATE;
00050 PN_CPP_EXTERN static const duration SECOND;
00051 PN_CPP_EXTERN static const duration MINUTE;
00052
00053 private:
00054 numeric_type ms_;
00055 };
00056
00058 PN_CPP_EXTERN std::ostream& operator<<(std::ostream&, duration);
00059
00062 inline bool operator<(duration x, duration y) { return x.milliseconds() < y.milliseconds(); }
00063 inline bool operator==(duration x, duration y) { return x.milliseconds() == y.milliseconds(); }
00064
00065 inline duration operator+(duration x, duration y) { return duration(x.milliseconds() + y.milliseconds()); }
00066 inline duration operator-(duration x, duration y) { return duration(x.milliseconds() - y.milliseconds()); }
00067 inline duration operator*(duration d, uint64_t n) { return duration(d.milliseconds()*n); }
00068 inline duration operator*(uint64_t n, duration d) { return d * n; }
00070
00071 }
00072
00073 #endif // PROTON_DURATION_HPP