8 #ifndef V8_BASE_SAFE_CONVERSIONS_H_ 9 #define V8_BASE_SAFE_CONVERSIONS_H_ 13 #include "src/base/safe_conversions_impl.h" 20 template <
typename Dst,
typename Src>
21 inline bool IsValueInRangeForNumericType(Src value) {
22 return internal::DstRangeRelationToSrcRange<Dst>(value) ==
23 internal::RANGE_VALID;
29 template <
typename Dst,
typename Src>
30 inline Dst checked_cast(Src value) {
31 CHECK(IsValueInRangeForNumericType<Dst>(value));
32 return static_cast<Dst
>(value);
38 template <
typename Dst,
typename Src>
39 inline Dst saturated_cast(Src value) {
41 if (std::numeric_limits<Dst>::is_iec559)
42 return static_cast<Dst
>(value);
44 switch (internal::DstRangeRelationToSrcRange<Dst>(value)) {
45 case internal::RANGE_VALID:
46 return static_cast<Dst
>(value);
48 case internal::RANGE_UNDERFLOW:
49 return std::numeric_limits<Dst>::min();
51 case internal::RANGE_OVERFLOW:
52 return std::numeric_limits<Dst>::max();
55 case internal::RANGE_INVALID:
65 #endif // V8_BASE_SAFE_CONVERSIONS_H_