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) {