GeNN  4.0.0
GPU enhanced Neuronal Networks (GeNN)
ConsoleAppender.h
Go to the documentation of this file.
1 #pragma once
3 #include <plog/Util.h>
4 #include <plog/WinApi.h>
5 #include <iostream>
6 
7 namespace plog
8 {
9  template<class Formatter>
10  class ConsoleAppender : public IAppender
11  {
12  public:
13 #ifdef _WIN32
14  ConsoleAppender() : m_isatty(!!_isatty(_fileno(stdout))), m_stdoutHandle()
15  {
16  if (m_isatty)
17  {
18  m_stdoutHandle = GetStdHandle(stdHandle::kOutput);
19  }
20  }
21 #else
22  ConsoleAppender() : m_isatty(!!isatty(fileno(stdout))) {}
23 #endif
24 
25  virtual void write(const Record& record)
26  {
27  util::nstring str = Formatter::format(record);
29 
30  writestr(str);
31  }
32 
33  protected:
34  void writestr(const util::nstring& str)
35  {
36 #ifdef _WIN32
37  if (m_isatty)
38  {
39  WriteConsoleW(m_stdoutHandle, str.c_str(), static_cast<DWORD>(str.size()), NULL, NULL);
40  }
41  else
42  {
43  std::cout << util::toNarrow(str, codePage::kActive) << std::flush;
44  }
45 #else
46  std::cout << str << std::flush;
47 #endif
48  }
49 
50  private:
51 #ifdef __BORLANDC__
52  static int _isatty(int fd) { return ::isatty(fd); }
53 #endif
54 
55  protected:
57  const bool m_isatty;
58 #ifdef _WIN32
59  HANDLE m_stdoutHandle;
60 #endif
61  };
62 }
Definition: AndroidAppender.h:5
util::Mutex m_mutex
Definition: ConsoleAppender.h:56
Definition: Util.h:335
ConsoleAppender()
Definition: ConsoleAppender.h:22
virtual void write(const Record &record)
Definition: ConsoleAppender.h:25
std::string nstring
Definition: Util.h:56
const bool m_isatty
Definition: ConsoleAppender.h:57
Definition: Util.h:396
void writestr(const util::nstring &str)
Definition: ConsoleAppender.h:34
Definition: Record.h:102
Definition: IAppender.h:6
Definition: ConsoleAppender.h:10