cprover
ui_message.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_UTIL_UI_MESSAGE_H
11 #define CPROVER_UTIL_UI_MESSAGE_H
12 
13 #include <memory>
14 
15 #include "cout_message.h"
16 #include "json_stream.h"
17 #include "timestamper.h"
18 
20 {
21 public:
22  enum class uit { PLAIN, XML_UI, JSON_UI };
23 
24  ui_message_handlert(const class cmdlinet &, const std::string &program);
25 
27 
28  virtual ~ui_message_handlert();
29 
30  uit get_ui() const
31  {
32  return _ui;
33  }
34 
35  virtual void flush(unsigned level) override;
36 
38  {
39  PRECONDITION(json_stream!=nullptr);
40  return *json_stream;
41  }
42 
43 protected:
44  std::unique_ptr<console_message_handlert> console_message_handler;
47  const bool always_flush;
48  std::unique_ptr<const timestampert> time;
49  std::ostream &out;
50  std::unique_ptr<json_stream_arrayt> json_stream;
51 
54  uit,
55  const std::string &program,
56  const bool always_flush,
57  timestampert::clockt clock_type);
58 
59  virtual void print(
60  unsigned level,
61  const std::string &message) override;
62 
63  virtual void print(
64  unsigned level,
65  const std::string &message,
66  const source_locationt &location) override;
67 
68  virtual void print(
69  unsigned level,
70  const xmlt &data) override;
71 
72  virtual void print(
73  unsigned level,
74  const jsont &data) override;
75 
76  virtual void xml_ui_msg(
77  const std::string &type,
78  const std::string &msg,
79  const source_locationt &location);
80 
81  virtual void json_ui_msg(
82  const std::string &type,
83  const std::string &msg,
84  const source_locationt &location);
85 
86  virtual void ui_msg(
87  const std::string &type,
88  const std::string &msg,
89  const source_locationt &location);
90 
91  const char *level_string(unsigned level);
92 
93  std::string command(unsigned c) const override
94  {
95  if(message_handler)
96  return message_handler->command(c);
97  else
98  return std::string();
99  }
100 };
101 
102 #define OPT_FLUSH "(flush)"
103 
104 #define HELP_FLUSH " --flush flush every line of output\n"
105 
106 #endif // CPROVER_UTIL_UI_MESSAGE_H
std::ostream & out
Definition: ui_message.h:49
uit get_ui() const
Definition: ui_message.h:30
Definition: json.h:23
const char * level_string(unsigned level)
Definition: ui_message.cpp:118
std::string command(unsigned c) const override
Create an ECMA-48 SGR (Select Graphic Rendition) command.
Definition: ui_message.h:93
json_stream_arrayt & get_json_stream()
Definition: ui_message.h:37
virtual void print(unsigned level, const std::string &message) override
Definition: ui_message.cpp:128
virtual std::string command(unsigned) const
Create an ECMA-48 SGR (Select Graphic Rendition) command.
Definition: message.h:61
Provides methods for streaming JSON arrays.
Definition: json_stream.h:92
#define PRECONDITION(CONDITION)
Definition: invariant.h:438
Definition: xml.h:18
clockt
Derived types of timestampert.
Definition: timestamper.h:45
const bool always_flush
Definition: ui_message.h:47
virtual void xml_ui_msg(const std::string &type, const std::string &msg, const source_locationt &location)
Definition: ui_message.cpp:259
ui_message_handlert(const class cmdlinet &, const std::string &program)
Definition: ui_message.cpp:65
std::unique_ptr< json_stream_arrayt > json_stream
Definition: ui_message.h:50
virtual ~ui_message_handlert()
Definition: ui_message.cpp:97
Emit timestamps.
message_handlert * message_handler
Definition: ui_message.h:45
virtual void json_ui_msg(const std::string &type, const std::string &msg, const source_locationt &location)
Definition: ui_message.cpp:281
std::unique_ptr< const timestampert > time
Definition: ui_message.h:48
std::unique_ptr< console_message_handlert > console_message_handler
Definition: ui_message.h:44
virtual void flush(unsigned level) override
Definition: ui_message.cpp:300
Definition: kdev_t.h:24
virtual void ui_msg(const std::string &type, const std::string &msg, const source_locationt &location)
Definition: ui_message.cpp:239