WPILibC++  unspecified
LoggerImpl.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) FIRST 2015. 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 NT_LOGGERIMPL_H_
9 #define NT_LOGGERIMPL_H_
10 
11 #include "ntcore_cpp.h"
12 
13 #include "CallbackManager.h"
14 #include "Handle.h"
15 
16 namespace nt {
17 
18 namespace impl {
19 
21  : public ListenerData<std::function<void(const LogMessage& msg)>> {
22  LoggerListenerData() = default;
23  LoggerListenerData(std::function<void(const LogMessage& msg)> callback_,
24  unsigned int min_level_, unsigned int max_level_)
25  : ListenerData(callback_), min_level(min_level_), max_level(max_level_) {}
26  LoggerListenerData(unsigned int poller_uid_, unsigned int min_level_,
27  unsigned int max_level_)
28  : ListenerData(poller_uid_),
29  min_level(min_level_),
30  max_level(max_level_) {}
31 
32  unsigned int min_level;
33  unsigned int max_level;
34 };
35 
37  : public CallbackThread<LoggerThread, LogMessage, LoggerListenerData> {
38  public:
39  LoggerThread(int inst) : m_inst(inst) {}
40 
41  bool Matches(const LoggerListenerData& listener, const LogMessage& data) {
42  return data.level >= listener.min_level && data.level <= listener.max_level;
43  }
44 
45  void SetListener(LogMessage* data, unsigned int listener_uid) {
46  data->logger = Handle(m_inst, listener_uid, Handle::kLogger).handle();
47  }
48 
49  void DoCallback(std::function<void(const LogMessage& msg)> callback,
50  const LogMessage& data) {
51  callback(data);
52  }
53 
54  int m_inst;
55 };
56 
57 } // namespace impl
58 
59 class LoggerImpl : public CallbackManager<LoggerImpl, impl::LoggerThread> {
60  friend class LoggerTest;
61  friend class CallbackManager<LoggerImpl, impl::LoggerThread>;
62 
63  public:
64  explicit LoggerImpl(int inst);
65 
66  void Start();
67 
68  unsigned int Add(std::function<void(const LogMessage& msg)> callback,
69  unsigned int min_level, unsigned int max_level);
70  unsigned int AddPolled(unsigned int poller_uid, unsigned int min_level,
71  unsigned int max_level);
72 
73  unsigned int GetMinLevel();
74 
75  void Log(unsigned int level, const char* file, unsigned int line,
76  const char* msg);
77 
78  private:
79  int m_inst;
80 };
81 
82 } // namespace nt
83 
84 #endif // NT_CONNECTIONNOTIFIER_H_
NetworkTables log message.
Definition: ntcore_cpp.h:232
Definition: CallbackManager.h:52
Definition: LoggerImpl.h:36
Definition: Handle.h:20
Definition: IEntryNotifier.h:15
Definition: LoggerImpl.h:59
Definition: LoggerImpl.h:20
Definition: CallbackManager.h:166
Definition: CallbackManager.h:28
unsigned int level
Log level of the message.
Definition: ntcore_cpp.h:247
NT_Logger logger
The logger that generated the message.
Definition: ntcore_cpp.h:244