34 #include <type_traits> 37 template <
typename T >
38 ostream& operator<<(ostream& stream, const vector< T >& val) {
42 for (
const auto& v : val) {
55 template <
typename T1,
typename T2 >
56 ostream& operator<<(ostream& stream, const pair< T1, T2 >& val) {
57 stream <<
"(" << val.first <<
"," << val.second <<
")";
63 template <
typename... T >
64 static typename std::enable_if< (N <
sizeof...(T)) >::type
65 print(std::ostream& os,
const std::tuple< T... >& t) {
67 (std::is_convertible< decltype(std::get< N >(t)), std::string >::value)
70 os <<
", " << quote << std::get< N >(t) << quote;
73 template <
typename... T >
74 static typename std::enable_if< !(N <
sizeof...(T)) >::type
75 print(std::ostream&,
const std::tuple< T... >&) {}
78 template <
typename T0,
typename... T >
79 std::ostream&
operator<<(std::ostream& os,
const std::tuple< T0, T... >& t) {
80 char quote = (std::is_convertible< T0, std::string >::value) ?
'"' : 0;
81 os << '(' << quote << std::get< 0 >(t) << quote;
88 if (x.size() <= 1)
return true;
89 if (x.size() == 2)
return x[0] != x[1];
91 auto refless = [](T
const* l, T
const* r) {
return *l < *r; };
92 auto refeq = [](T
const* l, T
const* r) {
return *l == *r; };
94 std::vector< T const* > vp;
96 for (
size_t i = 0; i < x.size(); ++i)
98 sort(vp.begin(), vp.end(), refless);
100 return std::adjacent_find(vp.begin(), vp.end(), refeq) == vp.end();
bool hasUniqueElts(std::vector< T > const &x)
std::ostream & operator<<(std::ostream &output, const BayesNet< GUM_SCALAR > &bn)
Prints map's DAG in output using the Graphviz-dot format.
static std::enable_if< !(N< sizeof...(T)) >::type print(std::ostream &, const std::tuple< T... > &)
static std::enable_if<(N< sizeof...(T)) >::type print(std::ostream &os, const std::tuple< T... > &t)