Wayverb
nan_checking.h
1 #pragma once
2 
3 #include "core/cl/traits.h"
4 #include "core/exceptions.h"
5 
6 namespace wayverb {
7 namespace core {
8 
9 template <typename T, std::enable_if_t<::detail::is_vector_type_v<T>, int> = 0>
10 constexpr bool is_any_nan(const T& t) {
11  return any(isnan(t));
12 }
13 
14 template <typename T, std::enable_if_t<!::detail::is_vector_type_v<T>, int> = 0>
15 constexpr bool is_any_nan(T t) {
16  return std::isnan(t);
17 }
18 
20 
21 template <typename T, std::enable_if_t<::detail::is_vector_type_v<T>, int> = 0>
22 constexpr bool is_any_inf(const T& t) {
23  return any(isinf(t));
24 }
25 
26 template <typename T, std::enable_if_t<!::detail::is_vector_type_v<T>, int> = 0>
27 constexpr bool is_any_inf(T t) {
28  return std::isinf(t);
29 }
30 
32 
33 template <typename T>
34 void throw_if_suspicious(const T& t) {
35  if (is_any_nan(t)) {
36  throw exceptions::value_is_nan("Nan value found.");
37  }
38 
39  if (is_any_inf(t)) {
40  throw exceptions::value_is_inf("Inf value found.");
41  }
42 }
43 
44 } // namespace core
45 } // namespace wayverb
Definition: traits.cpp:2
Definition: capsule_base.h:9