update boost
This commit is contained in:
@@ -21,8 +21,19 @@ namespace checked {
|
||||
////////////////////////////////////////////////////
|
||||
// layer 0 - implement safe operations for floating
|
||||
|
||||
template<typename R, typename T>
|
||||
struct heterogeneous_checked_operation<R, T, F,
|
||||
template<
|
||||
typename R,
|
||||
R Min,
|
||||
R Max,
|
||||
typename T,
|
||||
class F
|
||||
>
|
||||
struct heterogeneous_checked_operation<
|
||||
R,
|
||||
Min,
|
||||
Max,
|
||||
T,
|
||||
F,
|
||||
typename std::enable_if<
|
||||
std::is_floating_point<R>::value
|
||||
&& std::is_floating_point<T>::value
|
||||
@@ -34,20 +45,53 @@ struct heterogeneous_checked_operation<R, T, F,
|
||||
};
|
||||
}; // checked_unary_operation
|
||||
|
||||
template<
|
||||
typename R,
|
||||
R Min,
|
||||
R Max,
|
||||
typename T,
|
||||
class
|
||||
F
|
||||
>
|
||||
struct heterogeneous_checked_operation<
|
||||
R,
|
||||
Min,
|
||||
Max,
|
||||
T,
|
||||
F,
|
||||
typename std::enable_if<
|
||||
std::is_floating_point<R>::value
|
||||
&& std::is_integralt<T>::value
|
||||
>::type
|
||||
>{
|
||||
constexpr static checked_result<R>
|
||||
cast(const T & t) noexcept {
|
||||
return t;
|
||||
};
|
||||
}; // checked_unary_operation
|
||||
|
||||
template<typename R, typename T, typename U>
|
||||
struct checked_operation<R, T, U, F,
|
||||
typename std::enable_if<
|
||||
std::is_floating_point<R>::value
|
||||
>::type
|
||||
>{
|
||||
constexpr static checked_result<R> add(const T & t, const U & u) noexcept {
|
||||
constexpr static checked_result<R> cast(const T & t) {
|
||||
return
|
||||
cast_impl_detail::cast_impl(
|
||||
t,
|
||||
std::is_signed<R>(),
|
||||
std::is_signed<T>()
|
||||
);
|
||||
}
|
||||
constexpr static checked_result<R> add(const T & t, const U & u) {
|
||||
return t + u;
|
||||
}
|
||||
|
||||
constexpr static checked_result<R> subtract(
|
||||
const T & t,
|
||||
const U & u
|
||||
) noexcept {
|
||||
) {
|
||||
return t - u;
|
||||
}
|
||||
|
||||
@@ -85,6 +129,7 @@ struct checked_operation<R, T, U, F,
|
||||
}
|
||||
|
||||
}; // checked_binary_operation
|
||||
|
||||
template<class R, class T, class U>
|
||||
typename std::enable_if<
|
||||
std::is_floating_point<R>::value
|
||||
@@ -92,7 +137,7 @@ typename std::enable_if<
|
||||
&& std::is_floating_point<U>::value,
|
||||
checked_result<R>
|
||||
>::type
|
||||
constexpr bool less_than(const T & t, const U & u) noexcept {
|
||||
constexpr inline bool less_than(const T & t, const U & u) noexcept {
|
||||
return t < u;
|
||||
}
|
||||
|
||||
@@ -103,7 +148,7 @@ typename std::enable_if<
|
||||
&& std::is_floating_point<U>::value,
|
||||
checked_result<R>
|
||||
>::type
|
||||
constexpr bool equal(const T & t, const U & u) noexcept {
|
||||
constexpr inline bool equal(const T & t, const U & u) noexcept {
|
||||
return t < u;
|
||||
}
|
||||
|
||||
@@ -114,7 +159,7 @@ typename std::enable_if<
|
||||
&& std::is_floating_point<U>::value,
|
||||
checked_result<R>
|
||||
>::type
|
||||
constexpr checked_result<R> left_shift(const T & t, const U & u) noexcept {
|
||||
constexpr inline checked_result<R> left_shift(const T & t, const U & u) noexcept {
|
||||
return t << u;
|
||||
}
|
||||
|
||||
@@ -125,7 +170,7 @@ typename std::enable_if<
|
||||
&& std::is_floating_point<U>::value,
|
||||
checked_result<R>
|
||||
>::type
|
||||
constexpr checked_result<R> right_shift(const T & t, const U & u) noexcept {
|
||||
constexpr inline checked_result<R> right_shift(const T & t, const U & u) noexcept {
|
||||
return t >> u;
|
||||
}
|
||||
|
||||
@@ -136,7 +181,7 @@ typename std::enable_if<
|
||||
&& std::is_floating_point<U>::value,
|
||||
checked_result<R>
|
||||
>::type
|
||||
constexpr checked_result<R> bitwise_or(const T & t, const U & u) noexcept {
|
||||
constexpr inline checked_result<R> bitwise_or(const T & t, const U & u) noexcept {
|
||||
return t | u;
|
||||
}
|
||||
|
||||
@@ -147,7 +192,7 @@ typename std::enable_if<
|
||||
&& std::is_floating_point<U>::value,
|
||||
checked_result<R>
|
||||
>::type
|
||||
constexpr checked_result<R> bitwise_xor(const T & t, const U & u) noexcept {
|
||||
constexpr inline checked_result<R> bitwise_xor(const T & t, const U & u) noexcept {
|
||||
return t ^ u;
|
||||
}
|
||||
|
||||
@@ -158,7 +203,7 @@ typename std::enable_if<
|
||||
&& std::is_floating_point<U>::value,
|
||||
checked_result<R>
|
||||
>::type
|
||||
constexpr checked_result<R> bitwise_and(const T & t, const U & u) noexcept {
|
||||
constexpr inline checked_result<R> bitwise_and(const T & t, const U & u) noexcept {
|
||||
return t & u;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user