@@ -214,6 +214,23 @@ namespace detail {
214214 static const jsoncons::basic_string_view<CharT> k = JSONCONS_STRING_VIEW_CONSTANT (CharT, " false" );
215215 return k;
216216 }
217+
218+ static const CharT colon[1 ];
219+ static const CharT colon_space[2 ];
220+ static const CharT space_colon[2 ];
221+ static const CharT space_colon_space[3 ];
222+ static const CharT comma[1 ];
223+ static const CharT comma_space[2 ];
224+ static const CharT space_comma[2 ];
225+ static const CharT space_comma_space[3 ];
226+ static const CharT left_brace[1 ];
227+ static const CharT right_brace[1 ];
228+ static const CharT left_brace_space[2 ];
229+ static const CharT space_right_brace[2 ];
230+ static const CharT left_bracket[1 ];
231+ static const CharT right_bracket[1 ];
232+ static const CharT left_bracket_space[2 ];
233+ static const CharT space_right_bracket[2 ];
217234 public:
218235 using allocator_type = Allocator;
219236 using char_type = CharT;
@@ -297,16 +314,6 @@ namespace detail {
297314 return split_kind_;
298315 }
299316
300- bool is_same_line () const
301- {
302- return split_kind_ == line_split_kind::same_line;
303- }
304-
305- bool is_new_line () const
306- {
307- return split_kind_ == line_split_kind::new_line;
308- }
309-
310317 bool is_multi_line () const
311318 {
312319 return split_kind_ == line_split_kind::multi_line;
@@ -328,12 +335,12 @@ namespace detail {
328335 std::vector<encoding_context,encoding_context_allocator_type> stack_;
329336 int indent_amount_{0 };
330337 std::size_t column_{0 };
331- std::basic_string <CharT> colon_str_;
332- std::basic_string <CharT> comma_str_;
333- std::basic_string <CharT> open_object_brace_str_;
334- std::basic_string <CharT> close_object_brace_str_;
335- std::basic_string <CharT> open_array_bracket_str_;
336- std::basic_string <CharT> close_array_bracket_str_;
338+ jsoncons::basic_string_view <CharT> colon_str_;
339+ jsoncons::basic_string_view <CharT> comma_str_;
340+ jsoncons::basic_string_view <CharT> open_object_brace_str_;
341+ jsoncons::basic_string_view <CharT> close_object_brace_str_;
342+ jsoncons::basic_string_view <CharT> open_array_bracket_str_;
343+ jsoncons::basic_string_view <CharT> close_array_bracket_str_;
337344 int nesting_depth_{0 };
338345 public:
339346
@@ -359,52 +366,52 @@ namespace detail {
359366 switch (options.spaces_around_colon ())
360367 {
361368 case spaces_option::space_after:
362- colon_str_ = std::basic_string <CharT>({ ' : ' , ' ' } );
369+ colon_str_ = jsoncons::basic_string_view <CharT>(colon_space, sizeof (colon_space) );
363370 break ;
364371 case spaces_option::space_before:
365- colon_str_ = std::basic_string <CharT>({ ' ' , ' : ' } );
372+ colon_str_ = jsoncons::basic_string_view <CharT>(space_colon, sizeof (space_colon) );
366373 break ;
367374 case spaces_option::space_before_and_after:
368- colon_str_ = std::basic_string <CharT>({ ' ' , ' : ' , ' ' } );
375+ colon_str_ = jsoncons::basic_string_view <CharT>(space_colon_space, sizeof (space_colon_space) );
369376 break ;
370377 default :
371- colon_str_. push_back ( ' : ' );
378+ colon_str_ = jsoncons::basic_string_view<CharT>(colon, sizeof (colon) );
372379 break ;
373380 }
374381 switch (options.spaces_around_comma ())
375382 {
376383 case spaces_option::space_after:
377- comma_str_ = std::basic_string <CharT>({ ' , ' , ' ' } );
384+ comma_str_ = jsoncons::basic_string_view <CharT>(comma_space, sizeof (comma_space) );
378385 break ;
379386 case spaces_option::space_before:
380- comma_str_ = std::basic_string <CharT>({ ' ' , ' , ' } );
387+ comma_str_ = jsoncons::basic_string_view <CharT>(space_comma, sizeof (space_comma) );
381388 break ;
382389 case spaces_option::space_before_and_after:
383- comma_str_ = std::basic_string <CharT>({ ' ' , ' , ' , ' ' } );
390+ comma_str_ = jsoncons::basic_string_view <CharT>(space_comma_space, sizeof (space_comma_space) );
384391 break ;
385392 default :
386- comma_str_. push_back ( ' , ' );
393+ comma_str_ = jsoncons::basic_string_view<CharT>(comma, sizeof (comma) );
387394 break ;
388395 }
389396 if (options.pad_inside_object_braces ())
390397 {
391- open_object_brace_str_ = std::basic_string <CharT>({ ' { ' , ' ' } );
392- close_object_brace_str_ = std::basic_string <CharT>({ ' ' , ' } ' } );
398+ open_object_brace_str_ = jsoncons::basic_string_view <CharT>(left_brace_space, sizeof (left_brace_space) );
399+ close_object_brace_str_ = jsoncons::basic_string_view <CharT>(space_right_brace, sizeof (space_right_brace) );
393400 }
394401 else
395402 {
396- open_object_brace_str_. push_back ( ' { ' );
397- close_object_brace_str_. push_back ( ' } ' );
403+ open_object_brace_str_ = jsoncons::basic_string_view<CharT>(left_brace, sizeof (left_brace) );
404+ close_object_brace_str_ = jsoncons::basic_string_view<CharT>(right_brace, sizeof (right_brace) );
398405 }
399406 if (options.pad_inside_array_brackets ())
400407 {
401- open_array_bracket_str_ = std::basic_string <CharT>({ ' [ ' , ' ' } );
402- close_array_bracket_str_ = std::basic_string <CharT>({ ' ' , ' ] ' } );
408+ open_array_bracket_str_ = jsoncons::basic_string_view <CharT>(left_bracket_space, sizeof (left_bracket_space) );
409+ close_array_bracket_str_ = jsoncons::basic_string_view <CharT>(space_right_bracket, sizeof (space_right_bracket) );
403410 }
404411 else
405412 {
406- open_array_bracket_str_. push_back ( ' [ ' );
407- close_array_bracket_str_. push_back ( ' ] ' );
413+ open_array_bracket_str_ = jsoncons::basic_string_view<CharT>(left_bracket, sizeof (left_bracket) );
414+ close_array_bracket_str_ = jsoncons::basic_string_view<CharT>(right_bracket, sizeof (right_bracket) );
408415 }
409416 }
410417
@@ -601,7 +608,6 @@ namespace detail {
601608 new_line ();
602609 stack_.emplace_back (container_type::array,split_kind, false ,
603610 column_, column_+open_array_bracket_str_.length ());
604- // new_line();
605611 break ;
606612 }
607613 }
@@ -1097,6 +1103,42 @@ namespace detail {
10971103 }
10981104 };
10991105
1106+ template <typename CharT, typename Sink, typename Allocator>
1107+ const CharT basic_json_encoder<CharT, Sink, Allocator>::colon[1 ] = {' :' };
1108+ template <typename CharT,typename Sink,typename Allocator>
1109+ const CharT basic_json_encoder<CharT,Sink,Allocator>::colon_space[2 ] = {' :' , ' ' };
1110+ template <typename CharT,typename Sink,typename Allocator>
1111+ const CharT basic_json_encoder<CharT,Sink,Allocator>::space_colon[2 ] = {' ' , ' :' };
1112+ template <typename CharT,typename Sink,typename Allocator>
1113+ const CharT basic_json_encoder<CharT,Sink,Allocator>::space_colon_space[3 ] = {' ' , ' :' , ' ' };
1114+
1115+ template <typename CharT, typename Sink, typename Allocator>
1116+ const CharT basic_json_encoder<CharT, Sink, Allocator>::comma[] = {' ,' };
1117+ template <typename CharT,typename Sink,typename Allocator>
1118+ const CharT basic_json_encoder<CharT,Sink,Allocator>::comma_space[] = {' ,' , ' ' };
1119+ template <typename CharT,typename Sink,typename Allocator>
1120+ const CharT basic_json_encoder<CharT,Sink,Allocator>::space_comma[] = {' ' , ' ,' };
1121+ template <typename CharT,typename Sink,typename Allocator>
1122+ const CharT basic_json_encoder<CharT,Sink,Allocator>::space_comma_space[] = {' ' , ' ,' , ' ' };
1123+
1124+ template <typename CharT, typename Sink, typename Allocator>
1125+ const CharT basic_json_encoder<CharT, Sink, Allocator>::left_brace[1 ] = {' {' };
1126+ template <typename CharT,typename Sink,typename Allocator>
1127+ const CharT basic_json_encoder<CharT,Sink,Allocator>::right_brace[1 ] = {' }' };
1128+ template <typename CharT,typename Sink,typename Allocator>
1129+ const CharT basic_json_encoder<CharT,Sink,Allocator>::left_brace_space[2 ] = {' {' , ' ' };
1130+ template <typename CharT,typename Sink,typename Allocator>
1131+ const CharT basic_json_encoder<CharT,Sink,Allocator>::space_right_brace[2 ] = {' ' , ' }' };
1132+
1133+ template <typename CharT, typename Sink, typename Allocator>
1134+ const CharT basic_json_encoder<CharT, Sink, Allocator>::left_bracket[1 ] = {' [' };
1135+ template <typename CharT,typename Sink,typename Allocator>
1136+ const CharT basic_json_encoder<CharT,Sink,Allocator>::right_bracket[1 ] = {' ]' };
1137+ template <typename CharT,typename Sink,typename Allocator>
1138+ const CharT basic_json_encoder<CharT,Sink,Allocator>::left_bracket_space[2 ] = {' [' , ' ' };
1139+ template <typename CharT,typename Sink,typename Allocator>
1140+ const CharT basic_json_encoder<CharT,Sink,Allocator>::space_right_bracket[2 ] = {' ' , ' ]' };
1141+
11001142 template <typename CharT,typename Sink=jsoncons::stream_sink<CharT>,typename Allocator=std::allocator<char >>
11011143 class basic_compact_json_encoder final : public basic_json_visitor<CharT>
11021144 {
0 commit comments