From 3c19160bab42c426503bd538b6a988b036c41179 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Thu, 3 Feb 2022 18:14:18 +0100 Subject: [PATCH] Add fuzzy compare and is_in_predi --- src/cpputils.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/cpputils.h b/src/cpputils.h index c606a67..cbcfa90 100644 --- a/src/cpputils.h +++ b/src/cpputils.h @@ -120,6 +120,27 @@ bool is_in(First &&first, T && ... t) return ((first == t) || ...); } +template +bool is_in_predi(BinaryPredicate p, First &&first, T && ... t) +{ + return (p(first, t) || ...); +} + +template +[[nodiscard]] __attribute__ ((warn_unused_result)) constexpr inline __attribute__((__unused__)) bool fuzzyCompare(T p1, T p2); + +template<> +[[nodiscard]] __attribute__ ((warn_unused_result)) constexpr inline __attribute__((__unused__)) bool fuzzyCompare(double p1, double p2) +{ + return (std::abs(p1 - p2) * 1000000000000. <= std::min(std::abs(p1), std::abs(p2))); +} + +template<> +[[nodiscard]] __attribute__ ((warn_unused_result)) constexpr inline __attribute__((__unused__)) bool fuzzyCompare(float p1, float p2) +{ + return (std::abs(p1 - p2) * 100000.f <= std::min(std::abs(p1), std::abs(p2))); +} + template void parallelForeach(T1 &container0, T2 &container1, Tcb &&callback) {