1//============================================================================
2//
3// SSSS tt lll lll
4// SS SS tt ll ll
5// SS tttttt eeee ll ll aaaa
6// SSSS tt ee ee ll ll aa
7// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8// SS SS tt ee ll ll aa aa
9// SSSS ttt eeeee llll llll aaaaa
10//
11// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
12// and the Stella Team
13//
14// See the file "License.txt" for information on usage and redistribution of
15// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16//============================================================================
17
18#ifndef LOGGER_HXX
19#define LOGGER_HXX
20
21#include <functional>
22
23#include "bspf.hxx"
24
25class Logger {
26
27 public:
28
29 enum class Level {
30 ERR = 0, // cannot use ERROR???
31 INFO = 1,
32 DEBUG = 2,
33 MIN = ERR,
34 MAX = DEBUG
35 };
36
37 using logCallback = std::function<void(const string&, Logger::Level)>;
38
39 public:
40
41 static Logger& instance();
42
43 static void log(const string& message, Level level);
44
45 static void error(const string& message);
46
47 static void info(const string& message);
48
49 static void debug(const string& message);
50
51 void setLogCallback(logCallback callback);
52
53 void clearLogCallback();
54
55 protected:
56
57 Logger() = default;
58
59 private:
60
61 logCallback myLogCallback;
62
63 private:
64
65 void logMessage(const string& message, Level level) const;
66
67 Logger(const Logger&) = delete;
68 Logger(Logger&&) = delete;
69 Logger& operator=(const Logger&) = delete;
70 Logger& operator=(const Logger&&) = delete;
71};
72
73#endif // LOGGER_HXX
74