summaryrefslogtreecommitdiffstats
path: root/Source/JavaScriptCore/wtf/MathExtras.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/wtf/MathExtras.h')
-rw-r--r--Source/JavaScriptCore/wtf/MathExtras.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/wtf/MathExtras.h b/Source/JavaScriptCore/wtf/MathExtras.h
index 095549e..ec27f5f 100644
--- a/Source/JavaScriptCore/wtf/MathExtras.h
+++ b/Source/JavaScriptCore/wtf/MathExtras.h
@@ -26,8 +26,10 @@
#ifndef WTF_MathExtras_h
#define WTF_MathExtras_h
+#include <algorithm>
#include <cmath>
#include <float.h>
+#include <limits>
#include <stdlib.h>
#if OS(SOLARIS)
@@ -205,6 +207,32 @@ inline float deg2turn(float d) { return d / 360.0f; }
inline float rad2grad(float r) { return r * 200.0f / piFloat; }
inline float grad2rad(float g) { return g * piFloat / 200.0f; }
+inline int clampToInteger(double d)
+{
+ const double minIntAsDouble = std::numeric_limits<int>::min();
+ const double maxIntAsDouble = std::numeric_limits<int>::max();
+ return static_cast<int>(std::max(std::min(d, maxIntAsDouble), minIntAsDouble));
+}
+
+inline int clampToPositiveInteger(double d)
+{
+ const double maxIntAsDouble = std::numeric_limits<int>::max();
+ return static_cast<int>(std::max<double>(std::min(d, maxIntAsDouble), 0));
+}
+
+inline int clampToInteger(float d)
+{
+ const float minIntAsFloat = static_cast<float>(std::numeric_limits<int>::min());
+ const float maxIntAsFloat = static_cast<float>(std::numeric_limits<int>::max());
+ return static_cast<int>(std::max(std::min(d, maxIntAsFloat), minIntAsFloat));
+}
+
+inline int clampToPositiveInteger(float d)
+{
+ const float maxIntAsFloat = static_cast<float>(std::numeric_limits<int>::max());
+ return static_cast<int>(std::max<float>(std::min(d, maxIntAsFloat), 0));
+}
+
#if !COMPILER(MSVC) && !COMPILER(WINSCW) && !(COMPILER(RVCT) && (OS(SYMBIAN) || PLATFORM(BREWMP)))
using std::isfinite;
using std::isinf;