WPILibC++  unspecified
LoggerImpl.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2015-2018 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #ifndef NTCORE_LOGGERIMPL_H_
9 #define NTCORE_LOGGERIMPL_H_
10 
11 #include "CallbackManager.h"
12 #include "Handle.h"
13 #include "ntcore_cpp.h"
14 
15 namespace nt {
16 
17 namespace impl {
18 
20  : public ListenerData<std::function<void(const LogMessage& msg)>> {
21  LoggerListenerData() = default;
22  LoggerListenerData(std::function<void(const LogMessage& msg)> callback_,
23  unsigned int min_level_, unsigned int max_level_)
24  : ListenerData(callback_), min_level(min_level_), max_level(max_level_) {}
25  LoggerListenerData(unsigned int poller_uid_, unsigned int min_level_,
26  unsigned int max_level_)
27  : ListenerData(poller_uid_),
28  min_level(min_level_),
29  max_level(max_level_) {}
30 
31  unsigned int min_level;
32  unsigned int max_level;
33 };
34 
36  : public CallbackThread<LoggerThread, LogMessage, LoggerListenerData> {
37  public:
38  explicit LoggerThread(int inst) : m_inst(inst) {}
39 
40  bool Matches(const LoggerListenerData& listener, const LogMessage& data) {
41  return data.level >= listener.min_level && data.level <= listener.max_level;
42  }
43 
44  void SetListener(LogMessage* data, unsigned int listener_uid) {
45  data->logger = Handle(m_inst, listener_uid, Handle::kLogger).handle();
46  }
47 
48  void DoCallback(std::function<void(const LogMessage& msg)> callback,
49  const LogMessage& data) {
50  callback(data);
51  }
52 
53  int m_inst;
54 };
55 
56 } // namespace impl
57 
58 class LoggerImpl : public CallbackManager<LoggerImpl, impl::LoggerThread> {
59  friend class LoggerTest;
60  friend class CallbackManager<LoggerImpl, impl::LoggerThread>;
61 
62  public:
63  explicit LoggerImpl(int inst);
64 
65  void Start();
66 
67  unsigned int Add(std::function<void(const LogMessage& msg)> callback,
68  unsigned int min_level, unsigned int max_level);
69  unsigned int AddPolled(unsigned int poller_uid, unsigned int min_level,
70  unsigned int max_level);
71 
72  unsigned int GetMinLevel();
73 
74  void Log(unsigned int level, const char* file, unsigned int line,
75  const char* msg);
76 
77  private:
78  int m_inst;
79 };
80 
81 } // namespace nt
82 
83 #endif // NTCORE_LOGGERIMPL_H_
NetworkTables log message.
Definition: ntcore_cpp.h:238
Definition: CallbackManager.h:54
Definition: LoggerImpl.h:35
Definition: Handle.h:20
Definition: IStorage.h:21
Definition: LoggerImpl.h:58
Definition: LoggerImpl.h:19
Definition: CallbackManager.h:168
Definition: CallbackManager.h:30
unsigned int level
Log level of the message.
Definition: ntcore_cpp.h:253
NT_Logger logger
The logger that generated the message.
Definition: ntcore_cpp.h:250