/** 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;
}
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;
}
}
/** 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);
}
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);
+}