Mercurial > mm7
comparison ErrorHandling.h @ 1572:19f1735fca80
Слияние
author | Ritor1 |
---|---|
date | Sun, 08 Sep 2013 17:07:58 +0600 |
parents | 30db6d265ceb |
children | aff7a7b072b7 |
comparison
equal
deleted
inserted
replaced
1571:ef20d4608b1a | 1572:19f1735fca80 |
---|---|
1 #pragma once | |
2 | |
3 #define Error(format, ...) Error_impl_(__FILE__, __FUNCTION__, __LINE__, format, __VA_ARGS__) | |
4 #define Assert(condition, ...) Assert_impl_(__FILE__, __FUNCTION__, __LINE__, condition, #condition, __VA_ARGS__) | |
5 | |
6 | |
7 | |
8 #include <stdarg.h> | |
9 inline __declspec(noreturn) void Error_impl_(const char *filename, const char *functionname, int line, | |
10 const char *format, ...) | |
11 { | |
12 va_list va; | |
13 va_start(va, format); | |
14 { | |
15 char header[4096]; | |
16 sprintf(header, "Error in %s: %u\n\t%s\n\n", filename, line, functionname); | |
17 | |
18 char msg_body[8192]; | |
19 vsprintf(msg_body, format, va); | |
20 | |
21 wchar_t msg[sizeof(header) + sizeof(msg_body)]; | |
22 swprintf(msg, L"%S %S", header, msg_body); | |
23 | |
24 extern void MsgBox(const wchar_t *, const wchar_t *); | |
25 MsgBox(msg, L"Error"); | |
26 } | |
27 va_end(va); | |
28 | |
29 __debugbreak(); | |
30 } | |
31 | |
32 | |
33 inline void Assert_impl_(const char *filename, const char *functionname, int line, | |
34 bool condition, const char *condition_string, const char *format = nullptr, ...) | |
35 { | |
36 if (condition) | |
37 return; | |
38 | |
39 va_list va; | |
40 va_start(va, format); | |
41 { | |
42 char header[4096]; | |
43 sprintf(header, "Assertion in %s: %u\n\t%s:\n%s\n\n", filename, line, functionname, condition_string); | |
44 | |
45 char msg_body[8192]; | |
46 vsprintf(msg_body, format, va); | |
47 | |
48 wchar_t msg[sizeof(header) + sizeof(msg_body)]; | |
49 if (format) | |
50 swprintf(msg, L"%S %S", header, msg_body); | |
51 else | |
52 swprintf(msg, L"%S", header); | |
53 | |
54 extern void MsgBox(const wchar_t *, const wchar_t *); | |
55 MsgBox(msg, L"Assertion"); | |
56 } | |
57 va_end(va); | |
58 | |
59 __debugbreak(); | |
60 } |