| #ifndef __WEBMDSHOW_COMMON_DEBUGUTIL_HPP__ | |
| #define __WEBMDSHOW_COMMON_DEBUGUTIL_HPP__ | |
| #ifndef DISALLOW_COPY_AND_ASSIGN | |
| #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ | |
| TypeName(const TypeName&); \ | |
| void operator=(const TypeName&) | |
| #endif | |
| #ifdef _DEBUG | |
| #include "odbgstream.hpp" | |
| #include "hrtext.hpp" | |
| #include "iidstr.hpp" | |
| // Simple trace logging macro that expands to nothing in release mode builds. | |
| // Output is sent to the vs console. | |
| #define DBGLOG(X) \ | |
| do { \ | |
| wodbgstream wos; \ | |
| wos << "["__FUNCTION__"] " << X << std::endl; \ | |
| } while(0) | |
| // Extract error from the HRESULT, and output its hex and decimal values. | |
| #define \ | |
| HRLOG(X) L" {" << #X << L"=" << X << L"/" << std::hex << X << std::dec \ | |
| << L" (" << hrtext(X) << L")}" | |
| // Convert 100ns units to seconds | |
| #define REFTIMETOSECONDS(X) (double(X) / 10000000.0f) | |
| #else | |
| #define DBGLOG(X) | |
| #define REFTIMETOSECONDS(X) | |
| #endif | |
| // Keep the compiler quiet about do/while(0)'s (constant conditional) used in | |
| // log macros. | |
| #pragma warning(disable:4127) | |
| // Check the HRESULT for failure (<0), and log it if we're in debug mode, and | |
| // format the failure text so that it is clickable in vs output window. | |
| #define CHK(X, Y) \ | |
| do { \ | |
| if (FAILED(X=(Y))) \ | |
| { \ | |
| DBGLOG("\n" << __FILE__ << "(" << __LINE__ << ") : " << #Y << HRLOG(X)); \ | |
| } \ | |
| } while (0) | |
| #endif // __WEBMDSHOW_COMMON_DEBUGUTIL_HPP__ |