SkTypes: use constexpr when appropriate

motivation: https://codereview.chromium.org/2000853003

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

Review-Url: https://codereview.chromium.org/2004073002
This commit is contained in:
halcanary 2016-05-23 09:11:58 -07:00 committed by Commit bot
parent f0270c32c1
commit a0af771612
2 changed files with 11 additions and 4 deletions

View 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);
}

View 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);
}