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 <proton/type_compat.h>
00030
00031 #include <iosfwd>
00032
00035
00036 namespace proton {
00037
00039 class duration : private internal::comparable<duration> {
00040 public:
00042 typedef int64_t numeric_type;
00043
00045 explicit duration(numeric_type ms = 0) : ms_(ms) {}
00046
00048 duration& operator=(numeric_type ms) { ms_ = ms; return *this; }
00049
00051 numeric_type milliseconds() const { return ms_; }
00052
00053 PN_CPP_EXTERN static const duration FOREVER;
00054 PN_CPP_EXTERN static const duration IMMEDIATE;
00055 PN_CPP_EXTERN static const duration SECOND;
00056 PN_CPP_EXTERN static const duration MINUTE;
00057
00058 private:
00059 numeric_type ms_;
00060 };
00061
00063 PN_CPP_EXTERN std::ostream& operator<<(std::ostream&, duration);
00064
00067 inline bool operator<(duration x, duration y) { return x.milliseconds() < y.milliseconds(); }
00068 inline bool operator==(duration x, duration y) { return x.milliseconds() == y.milliseconds(); }
00069
00070 inline duration operator+(duration x, duration y) { return duration(x.milliseconds() + y.milliseconds()); }
00071 inline duration operator-(duration x, duration y) { return duration(x.milliseconds() - y.milliseconds()); }
00072 inline duration operator*(duration d, uint64_t n) { return duration(d.milliseconds()*n); }
00073 inline duration operator*(uint64_t n, duration d) { return d * n; }
00075
00076 }
00077
00078 #endif // PROTON_DURATION_HPP