18 std::array<char, 1024> buffer;
20 std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd,
"r"), pclose);
22 throw std::runtime_error(
"popen() failed!");
24 while (fgets(buffer.data(), buffer.size(), pipe.get()) !=
nullptr) {
25 result += buffer.data();
35 #define pass ((void)0) 45 inline void hash_combine(std::size_t& seed) { }
52 template <
typename T,
typename... Rest>
53 inline void hash_combine(std::size_t& seed,
const T& v, Rest... rest) {
56 seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
57 hash_combine(seed, rest...);
72 typename M::mapped_type
get(
const M& m,
const typename M::key_type& key,
const typename M::mapped_type& def) {
73 if(m.contains(key))
return m.at(key);
83 template <
typename T,
typename =
void>
84 struct is_iterable : std::false_type {};
88 struct is_iterable<T, std::void_t<decltype(std::begin(std::declval<T>())),
89 decltype(std::end(std::declval<T>()))
91 > : std::true_type {};
95 constexpr
bool is_iterable_v = is_iterable<T>::value;
104 template <
class T,
class Tuple>
107 template <
class T,
class... Types>
109 static const size_t value = 0;
112 template <
class T,
class U,
class... Types>
114 static const size_t value = 1 +
TypeIndex<T, std::tuple<Types...>>::value;
125 template<
typename X,
typename... Ts>
126 constexpr
bool contains_type() {
127 return std::disjunction<std::is_same<X, Ts>...>::value;
136 template<
typename Test,
template<
typename...>
class Ref>
139 template<
template<
typename...>
class Ref,
typename... Args>
152 template<
typename T,
typename... Args>
153 T mymin(T a, Args... args) {
156 return mymin(args...);
159 return std::min(a, mymin(args...));
void UNUSED(const T &x)
Definition: Miscellaneous.h:38
std::string system_exec(const char *cmd)
Definition: Miscellaneous.h:11
const word U
Definition: Main.cpp:12
Check if a type is contained in parameter pack // *.
Definition: Miscellaneous.h:137
Helpers to Find the numerical index (as a nonterminal_t) in a tuple of a given type.
Definition: Miscellaneous.h:105