15
15
#include " json.h"
16
16
#include " xml_expr.h"
17
17
#include " json_expr.h"
18
+ #include " json_stream.h"
18
19
#include " cout_message.h"
19
20
#include " cmdline.h"
20
21
21
22
ui_message_handlert::ui_message_handlert (
22
- uit __ui, const std::string &program):_ui(__ui )
23
+ uit __ui, const std::string &program):ui_message_handlert( )
23
24
{
24
- switch (__ui)
25
+ set_ui (__ui);
26
+ switch (_ui)
25
27
{
26
28
case uit::PLAIN:
27
29
break ;
28
30
29
31
case uit::XML_UI:
30
- std::cout << " <?xml version=\" 1.0\" encoding=\" UTF-8\" ?>" << " \n " ;
31
- std::cout << " <cprover>" << " \n " ;
32
+ out << " <?xml version=\" 1.0\" encoding=\" UTF-8\" ?>" << " \n " ;
33
+ out << " <cprover>" << " \n " ;
32
34
33
35
{
34
36
xmlt program_xml;
35
37
program_xml.name =" program" ;
36
38
program_xml.data =program;
37
39
38
- std::cout << program_xml;
40
+ out << program_xml;
39
41
}
40
42
break ;
41
43
42
44
case uit::JSON_UI:
43
45
{
44
- std::cout << " [\n " ;
45
- json_objectt json_program;
46
- json_program[" program" ] = json_stringt (program);
47
- std::cout << json_program;
46
+ INVARIANT (json_stream, " JSON stream must be initialized before use" );
47
+ json_stream->push_back ().make_object ()[" program" ] = json_stringt (program);
48
48
}
49
49
break ;
50
50
}
@@ -61,16 +61,24 @@ ui_message_handlert::ui_message_handlert(
61
61
{
62
62
}
63
63
64
+ ui_message_handlert::ui_message_handlert ():
65
+ _ui(uit::PLAIN), out(std::cout), json_stream(nullptr )
66
+ {
67
+ }
68
+
64
69
ui_message_handlert::~ui_message_handlert ()
65
70
{
66
71
switch (get_ui ())
67
72
{
68
73
case uit::XML_UI:
69
- std::cout << " </cprover>" << " \n " ;
74
+
75
+ out << " </cprover>" << " \n " ;
70
76
break ;
71
77
72
78
case uit::JSON_UI:
73
- std::cout << " \n ]\n " ;
79
+ INVARIANT (json_stream, " JSON stream must be initialized before use" );
80
+ json_stream->close ();
81
+ out << ' \n ' ;
74
82
break ;
75
83
76
84
case uit::PLAIN:
@@ -127,7 +135,7 @@ void ui_message_handlert::print(
127
135
INVARIANT (false , " Cannot print xml data on PLAIN UI" );
128
136
break ;
129
137
case uit::XML_UI:
130
- std::cout << data << ' \n ' ;
138
+ out << data << ' \n ' ;
131
139
flush (level);
132
140
break ;
133
141
case uit::JSON_UI:
@@ -152,7 +160,8 @@ void ui_message_handlert::print(
152
160
INVARIANT (false , " Cannot print json data on XML UI" );
153
161
break ;
154
162
case uit::JSON_UI:
155
- std::cout << ' ,' << ' \n ' << data;
163
+ INVARIANT (json_stream, " JSON stream must be initialized before use" );
164
+ json_stream->push_back (data);
156
165
flush (level);
157
166
break ;
158
167
}
@@ -233,8 +242,8 @@ void ui_message_handlert::xml_ui_msg(
233
242
result.new_element (" text" ).data =msg1;
234
243
result.set_attribute (" type" , type);
235
244
236
- std::cout << result;
237
- std::cout << ' \n ' ;
245
+ out << result;
246
+ out << ' \n ' ;
238
247
}
239
248
240
249
void ui_message_handlert::json_ui_msg (
@@ -243,19 +252,15 @@ void ui_message_handlert::json_ui_msg(
243
252
const std::string &msg2,
244
253
const source_locationt &location)
245
254
{
246
- json_objectt result;
255
+ INVARIANT (json_stream, " JSON stream must be initialized before use" );
256
+ json_objectt &result = json_stream->push_back ().make_object ();
247
257
248
258
if (location.is_not_nil () &&
249
259
!location.get_file ().empty ())
250
260
result[" sourceLocation" ] = json (location);
251
261
252
262
result[" messageType" ] = json_stringt (type);
253
263
result[" messageText" ] = json_stringt (msg1);
254
-
255
- // By convention a leading comma is created by every new array entry.
256
- // The first entry is generated in the constructor and does not have
257
- // a trailing comma.
258
- std::cout << " ,\n " << result;
259
264
}
260
265
261
266
void ui_message_handlert::flush (unsigned level)
@@ -272,7 +277,7 @@ void ui_message_handlert::flush(unsigned level)
272
277
case uit::XML_UI:
273
278
case uit::JSON_UI:
274
279
{
275
- std::cout << std::flush;
280
+ out << std::flush;
276
281
}
277
282
break ;
278
283
}
0 commit comments