From 742393126e581894f2eff9cb8afa25b63770ef14 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 14 Jan 2013 02:18:25 +0000 Subject: Safer construction of TimeStamp from double. git-svn-id: http://svn.drobilla.net/lad/trunk/raul@4976 a436a847-0d15-0410-975c-d299462d15a1 --- raul/TimeStamp.hpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'raul') 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(floor(dec))) - , _subticks((dec - floor(dec)) * unit.ppt()) - , _unit(unit) + : _unit(unit) { - assert(dec >= 0); - assert(dec <= std::numeric_limits::max()); + dec = std::max(0.0, dec); + dec = std::min(double(std::numeric_limits::max()), dec); + double integral; + const double fractional = modf(dec, &integral); + _ticks = integral; + _subticks = fractional * unit.ppt(); } inline TimeUnit unit() const { return _unit; } -- cgit v1.2.1