17 #define cgrame_msg(m) std::cout << "[INFO] " << m << std::endl
18 #define cgrame_warn(m) std::cout << "[WARNING] " << m << std::endl
19 #define cgrame_label(l) std::cout << "[" << l << "] " << std::endl
20 #define cgrame_cmsg(m) std::cout << "[\033[1;34mINFO\033[0m] " << m << std::endl
21 #define cgrame_cwarn(m) std::cout << "[\033[1;33mWARNING\033[0m] " << m << std::endl
22 #define cgrame_clabel(l) std::cout << "[\033[1;36m" << l << "\033[0m] " << std::endl
25 template <
class T1,
class T2>
27 auto h1 = std::hash<T1>{}(p.first);
28 auto h2 = std::hash<T2>{}(p.second);
31 return h1 ^ (h2 + 0x9e3779b9 + (h1 << 6) + (h1 >> 2));