]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/shared/format-table.h
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / src / shared / format-table.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 #include <stdbool.h>
5 #include <stdio.h>
6 #include <sys/types.h>
7
8 #include "json.h"
9 #include "macro.h"
10
11 typedef enum TableDataType {
12 TABLE_EMPTY,
13 TABLE_STRING,
14 TABLE_BOOLEAN,
15 TABLE_TIMESTAMP,
16 TABLE_TIMESPAN,
17 TABLE_SIZE,
18 TABLE_UINT32,
19 TABLE_UINT64,
20 TABLE_PERCENT,
21 _TABLE_DATA_TYPE_MAX,
22 _TABLE_DATA_TYPE_INVALID = -1,
23 } TableDataType;
24
25 typedef struct Table Table;
26 typedef struct TableCell TableCell;
27
28 Table *table_new_internal(const char *first_header, ...) _sentinel_;
29 #define table_new(...) table_new_internal(__VA_ARGS__, NULL)
30 Table *table_new_raw(size_t n_columns);
31 Table *table_unref(Table *t);
32
33 DEFINE_TRIVIAL_CLEANUP_FUNC(Table*, table_unref);
34
35 int table_add_cell_full(Table *t, TableCell **ret_cell, TableDataType type, const void *data, size_t minimum_width, size_t maximum_width, unsigned weight, unsigned align_percent, unsigned ellipsize_percent);
36 static inline int table_add_cell(Table *t, TableCell **ret_cell, TableDataType type, const void *data) {
37 return table_add_cell_full(t, ret_cell, type, data, (size_t) -1, (size_t) -1, (unsigned) -1, (unsigned) -1, (unsigned) -1);
38 }
39
40 int table_dup_cell(Table *t, TableCell *cell);
41
42 int table_set_minimum_width(Table *t, TableCell *cell, size_t minimum_width);
43 int table_set_maximum_width(Table *t, TableCell *cell, size_t maximum_width);
44 int table_set_weight(Table *t, TableCell *cell, unsigned weight);
45 int table_set_align_percent(Table *t, TableCell *cell, unsigned percent);
46 int table_set_ellipsize_percent(Table *t, TableCell *cell, unsigned percent);
47 int table_set_color(Table *t, TableCell *cell, const char *color);
48 int table_set_url(Table *t, TableCell *cell, const char *color);
49 int table_set_uppercase(Table *t, TableCell *cell, bool b);
50
51 int table_update(Table *t, TableCell *cell, TableDataType type, const void *data);
52
53 int table_add_many_internal(Table *t, TableDataType first_type, ...);
54 #define table_add_many(t, ...) table_add_many_internal(t, __VA_ARGS__, _TABLE_DATA_TYPE_MAX)
55
56 void table_set_header(Table *table, bool b);
57 void table_set_width(Table *t, size_t width);
58 int table_set_display(Table *t, size_t first_column, ...);
59 int table_set_sort(Table *t, size_t first_column, ...);
60 int table_set_reverse(Table *t, size_t column, bool b);
61
62 int table_print(Table *t, FILE *f);
63 int table_format(Table *t, char **ret);
64
65 static inline TableCell* TABLE_HEADER_CELL(size_t i) {
66 return SIZE_TO_PTR(i + 1);
67 }
68
69 size_t table_get_rows(Table *t);
70 size_t table_get_columns(Table *t);
71
72 TableCell *table_get_cell(Table *t, size_t row, size_t column);
73
74 const void *table_get(Table *t, TableCell *cell);
75 const void *table_get_at(Table *t, size_t row, size_t column);
76
77 int table_to_json(Table *t, JsonVariant **ret);
78 int table_print_json(Table *t, FILE *f, unsigned json_flags);