39 #include <type_traits> 43 # define GUM_CAST dynamic_cast 45 # define GUM_CAST static_cast 48 #include <agrum/agrum.h> 50 #include <agrum/tools/core/utils_dir.h> 51 #include <agrum/tools/core/utils_random.h> 52 #include <agrum/tools/core/utils_string.h> 67 template <
typename T1,
typename T2 >
68 ostream& operator<<(ostream& stream,
const pair< T1, T2 >& val);
77 template <
typename T0,
typename... T >
78 std::ostream& operator<<(std::ostream& os,
const std::tuple< T0, T... >& t);
88 template <
typename T >
89 ostream& operator<<(ostream& stream,
const vector< T >& val);
97 template <
typename T >
98 bool hasUniqueElts(std::vector< T >
const& x);
122 template <
typename T1,
typename T2 >
123 using forbidden_type =
124 typename std::enable_if< !std::is_same< T1, T2 >::value,
int >::type;
129 struct NullStream: std::ostream {
130 NullStream() : std::ios(0), std::ostream(0) {}
140 bool Memcmp(
const void*
const in_,
const void*
const out_,
unsigned long size);
151 template <
typename T >
152 struct AlmostDifferent {
153 bool operator()(
const T& t1,
const T& t2) {
157 return (std::abs(t2) > 1e-5);
159 return (std::abs(t2 - t1) / t1 > 1e-5);
167 template <
typename T >
168 struct AlmostDifferent< T* > {
169 bool operator()(
const T* t1,
const T* t2) {
return (t1 != t2); }
177 #include <agrum/tools/core/utils_misc_tpl.h>