SkTypes: use constexpr when appropriate
authorhalcanary <halcanary@google.com>
Mon, 23 May 2016 16:11:58 +0000 (09:11 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 23 May 2016 16:11:59 +0000 (09:11 -0700)
motivation: https://codereview.chromium.org/2000853003

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2004073002

Review-Url: https://codereview.chromium.org/2004073002

include/core/SkTypes.h
tests/CPlusPlusEleven.cpp

index 6793e4c0fbba82d02855fa0bcdfebcead3b836d0..13b662abf66cd05e815e58f4563815c19b8d559b 100644 (file)
@@ -369,7 +369,7 @@ typedef uint32_t SkMSec;
 
 /** Faster than SkToBool for integral conditions. Returns 0 or 1
 */
-static inline int Sk32ToBool(uint32_t n) {
+static constexpr int Sk32ToBool(uint32_t n) {
     return (n | (0-n)) >> 31;
 }
 
@@ -408,11 +408,11 @@ static inline int32_t SkMin32(int32_t a, int32_t b) {
     return a;
 }
 
-template <typename T> const T& SkTMin(const T& a, const T& b) {
+template <typename T> constexpr const T& SkTMin(const T& a, const T& b) {
     return (a < b) ? a : b;
 }
 
-template <typename T> const T& SkTMax(const T& a, const T& b) {
+template <typename T> constexpr const T& SkTMax(const T& a, const T& b) {
     return (b < a) ? a : b;
 }
 
@@ -428,7 +428,7 @@ static inline int32_t SkFastMin32(int32_t value, int32_t max) {
 }
 
 /** Returns value pinned between min and max, inclusively. */
-template <typename T> static inline const T& SkTPin(const T& value, const T& min, const T& max) {
+template <typename T> static constexpr const T& SkTPin(const T& value, const T& min, const T& max) {
     return SkTMax(SkTMin(value, max), min);
 }
 
index 5fbd46429d1373ca09281644e8dc9ee4c665ce9a..b5a34b2264914e9c3b57d6115aa6068f45beab78 100644 (file)
@@ -28,3 +28,10 @@ DEF_TEST(CPlusPlusEleven_RvalueAndMove, r) {
     Moveable src1; Moveable dst1(std::move(src1));
     Moveable src2, dst2; dst2 = std::move(src2);
 }
+
+DEF_TEST(CPlusPlusEleven_constexpr, r) {
+    static constexpr int x = Sk32ToBool(50);
+    REPORTER_ASSERT(r, x == 1);
+    static constexpr int y = SkTPin<int>(100, 0, 10);
+    REPORTER_ASSERT(r, y == 10);
+}