11namespace data_table_detail
16 : out_(out), delimiter_(delimiter), options_(
std::move(options))
18 template <
typename Schema>
24 template <
typename Schema,
typename Row>
void row(Schema
const& schema, Row
const&
row)
44 template <
typename Schema>
51 template <
typename Schema,
typename Row>
void row(Schema
const& schema, Row
const&
row)
54 if (!std::exchange(first_,
false)) out.put(
',');
77 return data_table_detail::delimited_sink(out,
',', std::move(options));
83 return data_table_detail::delimited_sink(out,
'\t', std::move(options));
90 return data_table_detail::json_sink_adapter(out, std::move(options));
102 std::optional<output_policy>
policy = std::nullopt;
105namespace data_table_detail
116 bool candidate =
false;
117 bool exception =
false;
121 exception = !candidate;
122 if constexpr (runtime_real<T>)
127 else if constexpr (half_integer<T>)
130 .decimal_candidate = candidate,
131 .decimal_exception = exception,
139 template <
typename Schema>
146 for (std::size_t
p = 0;
p < selection_.
indices.size(); ++
p)
148 table_->column(column.label(), display::width::fit(options_.minimum_column_width),
149 selection_.display[p].alignment);
151 this->emit_metadata(metadata);
153 template <
typename Schema,
typename Row>
void row(Schema
const& schema, Row
const&
row)
155 std::vector<display::formatted_cell> cells;
156 cells.reserve(selection_.
indices.size());
160 table_->row(std::move(cells));
168 for (
auto const& [key,
value] : metadata)
173 .content = std::move(
text),
176 .where = std::source_location::current()});
181 data_terminal_options options_;
182 resolved_projection selection_;
183 std::optional<display::streaming_table> table_;
191 return data_table_detail::terminal_sink_adapter(std::move(options));
Definition data_table_sinks.hpp:13
void finish(table_metadata const &)
Definition data_table_sinks.hpp:28
delimited_sink(std::ostream &out, char delimiter, delimited_options options)
Definition data_table_sinks.hpp:15
void begin(std::string const &, Schema const &schema, table_metadata const &, data_sink_start)
Definition data_table_sinks.hpp:19
void row(Schema const &schema, Row const &row)
Definition data_table_sinks.hpp:24
Definition data_table_sinks.hpp:41
void begin(std::string const &title, Schema const &schema, table_metadata const &metadata, data_sink_start start)
Definition data_table_sinks.hpp:45
void row(Schema const &schema, Row const &row)
Definition data_table_sinks.hpp:51
void finish(table_metadata const &summary)
Definition data_table_sinks.hpp:57
json_sink_adapter(std::ostream &out, data_json_options options)
Definition data_table_sinks.hpp:43
Definition data_table_sinks.hpp:136
void finish(table_metadata const &summary)
Definition data_table_sinks.hpp:162
terminal_sink_adapter(data_terminal_options options)
Definition data_table_sinks.hpp:138
void begin(std::string const &title, Schema const &schema, table_metadata const &metadata, data_sink_start)
Definition data_table_sinks.hpp:140
void row(Schema const &schema, Row const &row)
Definition data_table_sinks.hpp:153
A sequence of styled text spans and semantic glyph tokens.
Definition presentation.hpp:216
styled_text & append(std::string_view text, terminal::TerminalStyle style={})
Append a text span.
Definition presentation.cpp:1164
Concept for real scalar types (float, double, etc.).
Definition scalar_concepts.hpp:69
Definition data_table.hpp:48
locale_t value
Definition data_table.cpp:49
Precision-preserving JSON snapshots of typed result tables.
presentation::styled_text text
Definition display.cpp:141
constexpr bool isfinite(I const &x) noexcept
Returns whether an integer scalar is finite.
Definition math.hpp:121
stream
Selects the ordinary display stream for a message.
Definition display.hpp:25
void emit(presentation::styled_text text, stream destination, bool newline, std::source_location where)
Emit styled text through the active display sink.
Definition display.cpp:843
std::function< void(event const &)> sink
Callable that receives display events for final routing and rendering.
Definition display.hpp:126
void visit_selected(Schema const &schema, Row const &row, resolved_projection const &selection, Function &&function)
Definition data_table.hpp:719
void write_json_end(json_output &out, table_metadata const *summary)
Definition data_table_json.hpp:159
void check_output(std::ostream &out)
Definition data_table.cpp:40
resolved_projection resolve_projection(Schema const &schema, table_projection const &options)
Definition data_table.hpp:688
void write_delimited_row(std::ostream &out, Schema const &schema, Row const &row, resolved_projection const &selection, char delimiter, delimited_options const &options)
Definition data_table.hpp:798
void visit_column(Schema const &schema, std::size_t index, Function &&function)
Definition data_table.hpp:681
std::string cell_text(T const &value, data_column_display const &display, bool machine)
Definition data_table.hpp:636
void write_json_begin(json_output &out, std::string const &title, Schema const &schema, table_metadata const &metadata, resolved_projection const &selection, data_sink_start start)
Definition data_table_json.hpp:140
display::formatted_cell terminal_cell(T const &value, data_column_display const &format)
Definition data_table_sinks.hpp:107
void write_json_row(json_output &out, Schema const &schema, Row const &row, resolved_projection const &selection)
Definition data_table_json.hpp:113
void write_delimited_header(std::ostream &out, Schema const &schema, resolved_projection const &selection, char delimiter)
Definition data_table.hpp:783
Definition data_table.cpp:8
auto terminal_sink(data_terminal_options options={})
Stream deferred display formatting through display::streaming_table.
Definition data_table_sinks.hpp:189
output_policy plain_policy()
Build a policy for plain file/log rendering with no ANSI color.
Definition presentation.cpp:1195
auto csv_sink(std::ostream &out, delimited_options options={})
Stream CSV rows to a borrowed stream, flushing on explicit sink/table finish.
Definition data_table_sinks.hpp:75
auto tsv_sink(std::ostream &out, delimited_options options={})
Stream tab-delimited CSV rows to a borrowed stream, flushing on explicit finish.
Definition data_table_sinks.hpp:81
std::map< std::string, std::string > table_metadata
Application metadata is owned text, independent of numerical rows.
Definition data_table.hpp:314
auto json_sink(std::ostream &out, data_json_options options={})
Stream a JSON document.
Definition data_table_sinks.hpp:88
Human-facing display event routed through the active sink.
Definition display.hpp:115
stream destination
Definition display.hpp:116
Column display settings. These never change stored values or default export precision.
Definition data_table.hpp:198
std::string missing
Definition data_table.hpp:201
bool fractions
Definition data_table.hpp:202
Ordered JSON column selection. Empty selects every column; display precision is never applied.
Definition data_table_json.hpp:12
std::vector< std::string > columns
Definition data_table_json.hpp:13
The index of the first row this attachment can emit (zero for full replay).
Definition data_table.hpp:344
Definition data_table_json.hpp:20
Definition data_table.hpp:33
Definition data_table.hpp:675
std::vector< std::size_t > indices
Definition data_table.hpp:676
Independent terminal projection, widths, and destination using the existing display router.
Definition data_table_sinks.hpp:95
display::sink output
Definition data_table_sinks.hpp:101
bool show_metadata
Definition data_table_sinks.hpp:100
std::size_t minimum_column_width
Definition data_table_sinks.hpp:98
std::optional< std::size_t > wrap_width
Definition data_table_sinks.hpp:99
display::stream destination
Definition data_table_sinks.hpp:97
std::optional< output_policy > policy
Definition data_table_sinks.hpp:102
table_projection projection
Definition data_table_sinks.hpp:96
Delimited output policy, independent of terminal styles and width.
Definition data_table.hpp:763
table_projection projection
Definition data_table.hpp:765
Ordered output columns and independent display overrides. Empty columns selects the full schema.
Definition data_table.hpp:308