]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/format-table.h
table: add TABLE_UINT8 or friends
[thirdparty/systemd.git] / src / shared / format-table.h
CommitLineData
1960e736
LP
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
31ac2357 8#include "json.h"
1960e736
LP
9#include "macro.h"
10
11typedef enum TableDataType {
12 TABLE_EMPTY,
13 TABLE_STRING,
14 TABLE_BOOLEAN,
15 TABLE_TIMESTAMP,
c5bbb2b5
YW
16 TABLE_TIMESTAMP_UTC,
17 TABLE_TIMESTAMP_RELATIVE,
1960e736 18 TABLE_TIMESPAN,
ba99f19c 19 TABLE_TIMESPAN_MSEC,
1960e736 20 TABLE_SIZE,
9ff27e64 21 TABLE_BPS,
d5538326 22 TABLE_INT,
e74294c3
YW
23 TABLE_INT8,
24 TABLE_INT16,
d5538326
YW
25 TABLE_INT32,
26 TABLE_INT64,
27 TABLE_UINT,
e74294c3
YW
28 TABLE_UINT8,
29 TABLE_UINT16,
1960e736 30 TABLE_UINT32,
a4661181
LP
31 TABLE_UINT64,
32 TABLE_PERCENT,
8390d391 33 TABLE_IFINDEX,
a7a257cd
YW
34 TABLE_IN_ADDR, /* Takes a union in_addr_union (or a struct in_addr) */
35 TABLE_IN6_ADDR, /* Takes a union in_addr_union (or a struct in6_addr) */
1960e736 36 _TABLE_DATA_TYPE_MAX,
6268974f
LP
37
38 /* The following are not really data types, but commands for table_add_cell_many() to make changes to
39 * a cell just added. */
40 TABLE_SET_MINIMUM_WIDTH,
41 TABLE_SET_MAXIMUM_WIDTH,
42 TABLE_SET_WEIGHT,
43 TABLE_SET_ALIGN_PERCENT,
44 TABLE_SET_ELLIPSIZE_PERCENT,
45 TABLE_SET_COLOR,
46 TABLE_SET_URL,
47 TABLE_SET_UPPERCASE,
48
1960e736
LP
49 _TABLE_DATA_TYPE_INVALID = -1,
50} TableDataType;
51
52typedef struct Table Table;
53typedef struct TableCell TableCell;
54
55Table *table_new_internal(const char *first_header, ...) _sentinel_;
56#define table_new(...) table_new_internal(__VA_ARGS__, NULL)
57Table *table_new_raw(size_t n_columns);
58Table *table_unref(Table *t);
59
60DEFINE_TRIVIAL_CLEANUP_FUNC(Table*, table_unref);
61
62int 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);
63static inline int table_add_cell(Table *t, TableCell **ret_cell, TableDataType type, const void *data) {
64 return table_add_cell_full(t, ret_cell, type, data, (size_t) -1, (size_t) -1, (unsigned) -1, (unsigned) -1, (unsigned) -1);
65}
5896e03c 66int table_add_cell_stringf(Table *t, TableCell **ret_cell, const char *format, ...) _printf_(3, 4);
1960e736
LP
67
68int table_dup_cell(Table *t, TableCell *cell);
69
70int table_set_minimum_width(Table *t, TableCell *cell, size_t minimum_width);
71int table_set_maximum_width(Table *t, TableCell *cell, size_t maximum_width);
72int table_set_weight(Table *t, TableCell *cell, unsigned weight);
73int table_set_align_percent(Table *t, TableCell *cell, unsigned percent);
74int table_set_ellipsize_percent(Table *t, TableCell *cell, unsigned percent);
75int table_set_color(Table *t, TableCell *cell, const char *color);
dc0e9c9b 76int table_set_url(Table *t, TableCell *cell, const char *url);
359abf6d 77int table_set_uppercase(Table *t, TableCell *cell, bool b);
1960e736 78
27e730e6
LP
79int table_update(Table *t, TableCell *cell, TableDataType type, const void *data);
80
1960e736
LP
81int table_add_many_internal(Table *t, TableDataType first_type, ...);
82#define table_add_many(t, ...) table_add_many_internal(t, __VA_ARGS__, _TABLE_DATA_TYPE_MAX)
83
84void table_set_header(Table *table, bool b);
85void table_set_width(Table *t, size_t width);
86int table_set_display(Table *t, size_t first_column, ...);
87int table_set_sort(Table *t, size_t first_column, ...);
a2c73e2d 88int table_set_reverse(Table *t, size_t column, bool b);
1960e736
LP
89
90int table_print(Table *t, FILE *f);
91int table_format(Table *t, char **ret);
92
93static inline TableCell* TABLE_HEADER_CELL(size_t i) {
94 return SIZE_TO_PTR(i + 1);
95}
96
97size_t table_get_rows(Table *t);
98size_t table_get_columns(Table *t);
9314ead7
LP
99
100TableCell *table_get_cell(Table *t, size_t row, size_t column);
62d99b39
LP
101
102const void *table_get(Table *t, TableCell *cell);
103const void *table_get_at(Table *t, size_t row, size_t column);
31ac2357
LP
104
105int table_to_json(Table *t, JsonVariant **ret);
a1c7a1f0 106int table_print_json(Table *t, FILE *f, JsonFormatFlags json_flags);