33 constexpr std::size_t PADDING{1};
42 auto gutter = std::string(
static_cast<std::size_t
>(
indent) * 4,
' ');
44 auto const ncolumns =
headers.size();
45 std::vector<std::size_t> col_width(ncolumns);
49 all_alignments.reserve(ncolumns);
55 std::size_t row_width{};
56 for (
unsigned i = 0;
i <
headers.size();
i++) {
57 col_width[
i] =
headers[
i].length() + PADDING;
58 row_width += col_width[
i];
63 if (
title.length() > row_width) {
64 auto const extra_size =
title.length() - row_width;
65 auto column_pad = extra_size / ncolumns;
66 if ((extra_size % ncolumns) != 0) {
69 for (
auto& column: col_width) {
76 for (
unsigned i = 0;
i <
row.size();
i++) {
77 if (col_width[
i] < (
row[
i].length()) + PADDING) {
78 col_width[
i] =
row[
i].length() + PADDING;
83 std::stringstream header;
86 assert(col_width[
i] <= std::numeric_limits<int>::max());
88 static_cast<int>(col_width[
i]),
90 header <<
text <<
" | ";
93 row_width = header.str().length();
94 auto separator_line = std::string(row_width - 1,
'-');
98 assert(row_width >= 3 && row_width - 3 <= std::numeric_limits<int>::max());
100 static_cast<int>(row_width - 3),
102 stream <<
'\n' << gutter << separator_line;
103 stream <<
'\n' << gutter <<
'|' << fmt_title <<
'|';
107 stream <<
'\n' << gutter << separator_line;
108 stream <<
'\n' << gutter << header.str();
109 stream <<
'\n' << gutter << separator_line;
113 stream <<
'\n' << gutter <<
"| ";
114 for (
unsigned i = 0;
i <
row.size();
i++) {
115 assert(col_width[
i] <= std::numeric_limits<int>::max());
117 static_cast<int>(col_width[
i]),
124 stream <<
'\n' << gutter << separator_line <<
'\n';
static std::string align_text(const std::string &text, int width, text_alignment type)
Aligns a text within a field of width width.
encapsulates code generation backend implementations
Implement string manipulation functions.
TableRowType headers
top header/keys
std::vector< TableRowType > rows
data
void print(int indent=0) const
std::string title
title of the table
std::vector< stringutils::text_alignment > alignments
alignment for every column of data rows
Implement generic table data structure.