diff options
author | Nao Pross <naopross@thearcway.org> | 2019-01-21 04:00:58 +0100 |
---|---|---|
committer | Nao Pross <naopross@thearcway.org> | 2019-01-21 04:02:18 +0100 |
commit | f40251efc21a4e2db446af73c810d1b063cf84fb (patch) | |
tree | dce905174d6020d11e885a860b3dbce6c7899b6e /debug.hpp | |
download | libwsdl2-f40251efc21a4e2db446af73c810d1b063cf84fb.tar.gz libwsdl2-f40251efc21a4e2db446af73c810d1b063cf84fb.zip |
Initial commit, add makefile, .gitignore and debug header
Diffstat (limited to '')
-rw-r--r-- | debug.hpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/debug.hpp b/debug.hpp new file mode 100644 index 0000000..16dc5a8 --- /dev/null +++ b/debug.hpp @@ -0,0 +1,77 @@ +#pragma once + +#include <iostream> +#include <sstream> + +#ifdef DEBUG + + #warning building in debug mode! + #ifdef __builtin_strrchr + #define __FILENAME__ (\ + __builtin_strrchr(__FILE__, '/') ? \ + __builtin_strrchr(__FILE__, '/') + 1 : __FILE__) + + #define npdebug_fname(); { \ + std::cerr << "[" << __FILENAME__ << ":" << __LINE__ << "] "; \ + } + + #define npdebug(...); { \ + npdebug_fname(); \ + np::va_debug(__VA_ARGS__); \ + } + #else + #define npdebug(...); np::va_debug(__VA_ARGS__); + #endif + + namespace np { + template<typename... Args> + inline void va_debug(Args&... args) { + (std::cerr << ... << args) << std::endl; + } + + template<typename T> + void range_debug(const T& t) { + range_debug("", t); + } + + template<typename T> + void range_debug(const std::string& msg, const T& t) { + std::string out; + for (auto elem : t) + out += elem += ", "; + + npdebug(msg, out); + } + + template<typename T> + T inspect(const T& t) { + npdebug(t); + return t; + } + + template<typename T> + T inspect(const std::string& msg, const T& t) { + npdebug(msg, t); + return t; + } + } +#else + #define npdebug(...) {} + + namespace np { + template<typename... Args> + inline void va_debug(Args&... args) {} + + template<typename T> + inline void range_debug(const T& t) {} + + template<typename T> + inline void range_debug(const std::string& msg, const T& t) {} + + template<typename T> + T inspect(const T& t) { return t; } + + template<typename T> + T inspect(const std::string& msg, const T& t) { return t; } + } +#endif |