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 =
typename std::enable_if< !std::is_same< T1, T2 >::value,
int >::type;
128 struct NullStream: std::ostream {
129 NullStream() : std::ios(0), std::ostream(0) {}
139 bool Memcmp(
const void*
const in_,
const void*
const out_,
unsigned long size);
150 template <
typename T >
151 struct AlmostDifferent {
152 bool operator()(
const T& t1,
const T& t2) {
156 return (std::abs(t2) > 1e-5);
158 return (std::abs(t2 - t1) / t1 > 1e-5);
166 template <
typename T >
167 struct AlmostDifferent< T* > {
168 bool operator()(
const T* t1,
const T* t2) {
return (t1 != t2); }
176 #include <agrum/tools/core/utils_misc_tpl.h>