RavEngine
Loading...
Searching...
No Matches
logging.h
1
/*
2
Copyright 2018 Google Inc. All Rights Reserved.
3
4
Licensed under the Apache License, Version 2.0 (the "License");
5
you may not use this file except in compliance with the License.
6
You may obtain a copy of the License at
7
8
http://www.apache.org/licenses/LICENSE-2.0
9
10
Unless required by applicable law or agreed to in writing, software
11
distributed under the License is distributed on an "AS-IS" BASIS,
12
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
See the License for the specific language governing permissions and
14
limitations under the License.
15
*/
16
17
#ifndef RESONANCE_AUDIO_PLATFORM_LOGGING_H_
18
#define RESONANCE_AUDIO_PLATFORM_LOGGING_H_
19
20
#include <cstdlib>
21
22
#include <cassert>
23
#include <iostream>
24
#include <sstream>
25
26
#undef DCHECK
27
#undef DCHECK_EQ
28
#undef DCHECK_NE
29
#undef DCHECK_LE
30
#undef DCHECK_LT
31
#undef DCHECK_GE
32
#undef DCHECK_GT
33
#undef CHECK
34
#undef CHECK_EQ
35
#undef CHECK_NE
36
#undef CHECK_LE
37
#undef CHECK_LT
38
#undef CHECK_GE
39
#undef CHECK_GT
40
#undef CHECK_NOTNULL
41
#undef LOG
42
43
// This class is used to disable logging, while still allowing for log messages
44
// to contain '<<' expressions.
45
class
NullLogger
{
46
public
:
47
std::ostream& GetStream() {
48
static
std::ostream kNullStream(
nullptr
);
49
return
kNullStream;
50
}
51
};
52
53
// If statement prevents unused variable warnings.
54
#define DCHECK(expr) \
55
if (false && (expr)) \
56
; \
57
else \
58
NullLogger().GetStream()
59
#define DCHECK_OP(val1, val2, op) DCHECK((val1)op(val2))
60
61
#define DCHECK_EQ(val1, val2) DCHECK_OP((val1), (val2), ==)
62
#define DCHECK_NE(val1, val2) DCHECK_OP((val1), (val2), !=)
63
#define DCHECK_LE(val1, val2) DCHECK_OP((val1), (val2), <=)
64
#define DCHECK_LT(val1, val2) DCHECK_OP((val1), (val2), <)
65
#define DCHECK_GE(val1, val2) DCHECK_OP((val1), (val2), >=)
66
#define DCHECK_GT(val1, val2) DCHECK_OP((val1), (val2), >)
67
68
// This class is used to log to std::cerr.
69
class
FatalLogger
{
70
public
:
71
FatalLogger
(
const
char
* file,
int
line) {
72
error_string_ << file <<
":"
<< line <<
": "
;
73
}
74
~FatalLogger
() {
75
const
std::string error_string = error_string_.str();
76
std::cerr << error_string << std::endl;
77
abort();
78
}
79
std::ostream& GetStream() {
return
error_string_; }
80
81
private
:
82
std::ostringstream error_string_;
83
};
84
85
#define CHECK(condition) \
86
!(condition) ? FatalLogger(__FILE__, __LINE__).GetStream() \
87
: NullLogger().GetStream()
88
89
#define CHECK_OP(val1, val2, op) CHECK((val1)op(val2))
90
91
#define CHECK_EQ(val1, val2) CHECK_OP((val1), (val2), ==)
92
#define CHECK_NE(val1, val2) CHECK_OP((val1), (val2), !=)
93
#define CHECK_LE(val1, val2) CHECK_OP((val1), (val2), <=)
94
#define CHECK_LT(val1, val2) CHECK_OP((val1), (val2), <)
95
#define CHECK_GE(val1, val2) CHECK_OP((val1), (val2), >=)
96
#define CHECK_GT(val1, val2) CHECK_OP((val1), (val2), >)
97
98
// Helper for CHECK_NOTNULL(), using C++11 perfect forwarding.
99
template
<
typename
T>
100
T CheckNotNull(T&& t) {
101
assert(t !=
nullptr
);
102
return
std::forward<T>(t);
103
}
104
#define CHECK_NOTNULL(val) CheckNotNull(val)
105
106
//#define LOG(severity) NullLogger().GetStream()
107
#define LOG(severity) FatalLogger(__FILE__, __LINE__).GetStream()
108
109
#endif
// RESONANCE_AUDIO_PLATFORM_LOGGING_H_
FatalLogger
Definition
logging.h:69
NullLogger
Definition
logging.h:45
RavEngine
deps
resonance-audio
resonance_audio
base
logging.h
Generated by
1.9.8