#ifndef GLOBALS_H #define GLOBALS_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(_WIN32) || defined(__WIN32__) #include #define mkdir(A, B) _mkdir(A) #endif template static inline std::vector vector_of(T item) { return std::vector { item }; } typedef double nanoseconds_t; class Bytes; extern double getCurrentTime(); extern void hexdump(std::ostream& stream, const Bytes& bytes); extern void hexdumpForSrp16(std::ostream& stream, const Bytes& bytes); struct ErrorException { const std::string message; void print() const; }; class Error { public: Error() { _stream << "Error: "; } [[ noreturn ]] ~Error() noexcept(false) { throw ErrorException { _stream.str() }; } template Error& operator<<(T&& t) { _stream << t; return *this; } private: std::stringstream _stream; }; template struct overloaded : Ts... { using Ts::operator()...; }; template overloaded(Ts...) -> overloaded; #endif