summaryrefslogtreecommitdiffstats
path: root/raul/TimeStamp.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-01-14 02:18:25 +0000
committerDavid Robillard <d@drobilla.net>2013-01-14 02:18:25 +0000
commit742393126e581894f2eff9cb8afa25b63770ef14 (patch)
tree25a9220663732ec8c8a5cf4f1b3e9b75eaca3830 /raul/TimeStamp.hpp
parent4a05f65f51fca38b774f2bd5cda8e665c86f3917 (diff)
downloadraul-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
Diffstat (limited to 'raul/TimeStamp.hpp')
-rw-r--r--raul/TimeStamp.hpp12
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; }