diff options
author | David Robillard <d@drobilla.net> | 2013-01-14 02:18:25 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2013-01-14 02:18:25 +0000 |
commit | 742393126e581894f2eff9cb8afa25b63770ef14 (patch) | |
tree | 25a9220663732ec8c8a5cf4f1b3e9b75eaca3830 | |
parent | 4a05f65f51fca38b774f2bd5cda8e665c86f3917 (diff) | |
download | raul-742393126e581894f2eff9cb8afa25b63770ef14.tar.gz raul-742393126e581894f2eff9cb8afa25b63770ef14.tar.bz2 raul-742393126e581894f2eff9cb8afa25b63770ef14.zip |
Safer construction of TimeStamp from double.
git-svn-id: http://svn.drobilla.net/lad/trunk/raul@4976 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r-- | raul/TimeStamp.hpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/raul/TimeStamp.hpp b/raul/TimeStamp.hpp index 9c510f5..ea8b04c 100644 --- a/raul/TimeStamp.hpp +++ b/raul/TimeStamp.hpp @@ -84,12 +84,14 @@ public: {} inline TimeStamp(TimeUnit unit, double dec) - : _ticks(static_cast<uint32_t>(floor(dec))) - , _subticks((dec - floor(dec)) * unit.ppt()) - , _unit(unit) + : _unit(unit) { - assert(dec >= 0); - assert(dec <= std::numeric_limits<uint32_t>::max()); + dec = std::max(0.0, dec); + dec = std::min(double(std::numeric_limits<uint32_t>::max()), dec); + double integral; + const double fractional = modf(dec, &integral); + _ticks = integral; + _subticks = fractional * unit.ppt(); } inline TimeUnit unit() const { return _unit; } |