blob: b6929ba52f3cea069290666fdf12db84930524d4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/** ---------------------------------------------------------------------------
* @file: logmessage.h
*
* Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com>
* MIT License, see LICENSE file for more details.
* ----------------------------------------------------------------------------
*/
#ifndef YAGE_CORE_LOGMESSAGE_H
#define YAGE_CORE_LOGMESSAGE_H
#include <memory>
#include <sstream>
#include <string>
#include "loglevel.h"
namespace yage
{
class Logger;
class LogMessage
{
public:
~LogMessage();
LogMessage(const LogMessage &msg) = delete;
LogMessage &operator=(const LogMessage &msg) = delete;
LogMessage &operator=(LogMessage &&msg) = delete;
template <typename T>
LogMessage &operator<<(const T &value);
LogMessage &operator<<(std::ostream &(*fn)(std::ostream &os));
struct Meta {
LogLevel level;
std::string fileName;
int line;
};
private:
friend class Logger;
std::ostringstream buffer_;
Logger *owner_;
Meta meta_;
LogMessage(Logger *owner, LogLevel level, const std::string &file_name, int line_num);
LogMessage(LogMessage &&msg);
};
/* -----------------------------------------------------------------------------
* Template definitions
* -----------------------------------------------------------------------------
*/
template <typename T>
LogMessage &LogMessage::operator<<(const T &value)
{
buffer_ << value;
return *this;
}
} // namespace yage
#endif
|