Program Listing for File audit_compare.hpp¶
↰ Return to documentation for file (include/uitsl/debug/audit_compare.hpp)
#pragma once
#ifndef UITSL_DEBUG_AUDIT_COMPARE_HPP_INCLUDE
#define UITSL_DEBUG_AUDIT_COMPARE_HPP_INCLUDE
#include <limits>
#include <type_traits>
#include "audit_cast.hpp"
namespace uitsl {
template <typename I, typename J>
inline bool audit_greater(const I x, const J y) {
if constexpr (
std::numeric_limits<I>::is_signed != std::numeric_limits<J>::is_signed
) {
return uitsl::audit_cast<typename std::make_signed<I>::type>( x )
> uitsl::audit_cast<typename std::make_signed<J>::type>( y )
;
} else return x > y;
}
template <typename I, typename J>
inline bool audit_less(const I x, const J y) {
if constexpr (
std::numeric_limits<I>::is_signed != std::numeric_limits<J>::is_signed
) {
return uitsl::audit_cast<typename std::make_signed<I>::type>( x )
< uitsl::audit_cast<typename std::make_signed<J>::type>( y )
;
} else return x < y;
}
template <typename I, typename J>
inline bool audit_leq(const I x, const J y) {
if constexpr (
std::numeric_limits<I>::is_signed != std::numeric_limits<J>::is_signed
) {
return uitsl::audit_cast<typename std::make_signed<I>::type>( x )
<= uitsl::audit_cast<typename std::make_signed<J>::type>( y )
;
} else return x <= y;
}
template <typename I, typename J>
inline bool audit_geq(const I x, const J y) {
if constexpr (
std::numeric_limits<I>::is_signed != std::numeric_limits<J>::is_signed
) {
return uitsl::audit_cast<typename std::make_signed<I>::type>( x )
>= uitsl::audit_cast<typename std::make_signed<J>::type>( y )
;
} else return x >= y;
}
template <typename I, typename J>
inline bool audit_equal(const I x, const J y) {
if constexpr (
std::numeric_limits<I>::is_signed != std::numeric_limits<J>::is_signed
) {
return uitsl::audit_cast<typename std::make_signed<I>::type>( x )
== uitsl::audit_cast<typename std::make_signed<J>::type>( y )
;
} else return x == y;
}
} // namespace uitsl
#endif // #ifndef UITSL_DEBUG_AUDIT_COMPARE_HPP_INCLUDE