OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "ui/gfx/safe_integer_conversions.h" | |
6 | |
7 #include <cmath> | |
8 #include <limits> | |
9 | |
10 namespace gfx { | |
11 | |
12 int ClampToInt(float value) { | |
13 if (value != value) | |
14 return 0; // no int NaN. | |
15 if (value >= std::numeric_limits<int>::max()) | |
16 return std::numeric_limits<int>::max(); | |
17 if (value <= std::numeric_limits<int>::min()) | |
18 return std::numeric_limits<int>::min(); | |
19 return static_cast<int>(value); | |
20 } | |
21 | |
22 int ToFlooredInt(float value) { | |
23 return ClampToInt(std::floor(value)); | |
24 } | |
25 | |
26 int ToCeiledInt(float value) { | |
27 return ClampToInt(std::ceil(value)); | |
28 } | |
29 | |
30 int ToRoundedInt(float value) { | |
31 float rounded; | |
32 if (value >= 0.0f) | |
33 rounded = std::floor(value + 0.5f); | |
34 else | |
35 rounded = std::ceil(value - 0.5f); | |
36 return ClampToInt(rounded); | |
37 } | |
38 | |
39 bool IsExpressibleAsInt(float value) { | |
40 if (value != value) | |
41 return false; // no int NaN. | |
42 if (value > std::numeric_limits<int>::max()) | |
43 return false; | |
44 if (value < std::numeric_limits<int>::min()) | |
45 return false; | |
46 return true; | |
47 } | |
48 | |
49 } // namespace gfx | |
OLD | NEW |