simdjson 4.4.0
Ridiculously Fast JSON
Loading...
Searching...
No Matches
fractured_formatter.h
1#ifndef SIMDJSON_INTERNAL_FRACTURED_FORMATTER_H
2#define SIMDJSON_INTERNAL_FRACTURED_FORMATTER_H
3
4#include "simdjson/dom/serialization.h"
5#include "simdjson/dom/fractured_json.h"
6#include "simdjson/internal/json_structure_analyzer.h"
7
8namespace simdjson {
9namespace internal {
10
18class fractured_formatter : public base_formatter<fractured_formatter> {
19public:
20 explicit fractured_formatter(const fractured_json_options& opts = {});
21
23 simdjson_inline void print_newline();
24
26 simdjson_inline void print_indents(size_t depth);
27
29 simdjson_inline void print_space();
30
32 void set_layout_mode(layout_mode mode);
33
35 layout_mode get_layout_mode() const;
36
38 void set_depth(size_t depth);
39
41 size_t get_depth() const;
42
44 void track_line_length(size_t chars);
45
47 void reset_line_length();
48
50 size_t get_line_length() const;
51
53 bool should_break_line(size_t upcoming_length) const;
54
56 const fractured_json_options& options() const;
57
58 // Table formatting support
60 void begin_table_row();
61
63 void end_table_row();
64
66 void set_column_widths(const std::vector<size_t>& widths);
67
69 size_t get_column_index() const;
70
72 void next_column();
73
75 void align_to_column_width(size_t actual_width);
76
77private:
78 fractured_json_options options_;
79 layout_mode current_layout_ = layout_mode::EXPANDED;
80 size_t current_depth_ = 0;
81 size_t current_line_length_ = 0;
82
83 // Table state
84 bool in_table_mode_ = false;
85 std::vector<size_t> column_widths_;
86 size_t current_column_ = 0;
87};
88
96class fractured_string_builder {
97public:
98 fractured_string_builder(const fractured_json_options& opts = {});
99
101 void append(const dom::element& value);
102
104 void append(const dom::array& value);
105
107 void append(const dom::object& value);
108
110 simdjson_inline void clear();
111
113 simdjson_inline std::string_view str() const;
114
115private:
116 fractured_formatter format_;
117 structure_analyzer analyzer_;
118 fractured_json_options options_;
119
121 void format_element(const dom::element& elem, const element_metrics& metrics, size_t depth);
122
124 void format_array(const dom::array& arr, const element_metrics& metrics, size_t depth);
125
127 void format_array_inline(const dom::array& arr, const element_metrics& metrics);
128
130 void format_array_compact_multiline(const dom::array& arr, const element_metrics& metrics, size_t depth);
131
133 void format_array_as_table(const dom::array& arr, const element_metrics& metrics, size_t depth);
134
136 void format_array_expanded(const dom::array& arr, const element_metrics& metrics, size_t depth);
137
139 void format_object(const dom::object& obj, const element_metrics& metrics, size_t depth);
140
142 void format_object_inline(const dom::object& obj, const element_metrics& metrics);
143
145 void format_object_expanded(const dom::object& obj, const element_metrics& metrics, size_t depth);
146
148 void format_scalar(const dom::element& elem);
149
151 std::vector<size_t> calculate_column_widths(const dom::array& arr,
152 const std::vector<std::string>& columns) const;
153
155 size_t measure_value_length(const dom::element& elem) const;
156};
157
158} // namespace internal
159} // namespace simdjson
160
161#endif // SIMDJSON_INTERNAL_FRACTURED_FORMATTER_H
The top level simdjson namespace, containing everything the library provides.
Definition base.h:8