LCOV - code coverage report
Current view: top level - shared - format-table.h (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 5 5 100.0 %
Date: 2019-08-22 15:41:25 Functions: 3 3 100.0 %

          Line data    Source code
       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_TIMESTAMP_UTC,
      17             :         TABLE_TIMESTAMP_RELATIVE,
      18             :         TABLE_TIMESPAN,
      19             :         TABLE_TIMESPAN_MSEC,
      20             :         TABLE_SIZE,
      21             :         TABLE_BPS,
      22             :         TABLE_INT,
      23             :         TABLE_INT8,
      24             :         TABLE_INT16,
      25             :         TABLE_INT32,
      26             :         TABLE_INT64,
      27             :         TABLE_UINT,
      28             :         TABLE_UINT8,
      29             :         TABLE_UINT16,
      30             :         TABLE_UINT32,
      31             :         TABLE_UINT64,
      32             :         TABLE_PERCENT,
      33             :         TABLE_IFINDEX,
      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) */
      36             :         _TABLE_DATA_TYPE_MAX,
      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             : 
      49             :         _TABLE_DATA_TYPE_INVALID = -1,
      50             : } TableDataType;
      51             : 
      52             : /* PIDs are just 32bit signed integers on Linux */
      53             : #define TABLE_PID TABLE_INT32
      54             : assert_cc(sizeof(pid_t) == sizeof(int32_t));
      55             : 
      56             : typedef struct Table Table;
      57             : typedef struct TableCell TableCell;
      58             : 
      59             : Table *table_new_internal(const char *first_header, ...) _sentinel_;
      60             : #define table_new(...) table_new_internal(__VA_ARGS__, NULL)
      61             : Table *table_new_raw(size_t n_columns);
      62             : Table *table_unref(Table *t);
      63             : 
      64           6 : DEFINE_TRIVIAL_CLEANUP_FUNC(Table*, table_unref);
      65             : 
      66             : 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);
      67          30 : static inline int table_add_cell(Table *t, TableCell **ret_cell, TableDataType type, const void *data) {
      68          30 :         return table_add_cell_full(t, ret_cell, type, data, (size_t) -1, (size_t) -1, (unsigned) -1, (unsigned) -1, (unsigned) -1);
      69             : }
      70             : int table_add_cell_stringf(Table *t, TableCell **ret_cell, const char *format, ...) _printf_(3, 4);
      71             : 
      72             : int table_fill_empty(Table *t, size_t until_column);
      73             : 
      74             : int table_dup_cell(Table *t, TableCell *cell);
      75             : 
      76             : int table_set_minimum_width(Table *t, TableCell *cell, size_t minimum_width);
      77             : int table_set_maximum_width(Table *t, TableCell *cell, size_t maximum_width);
      78             : int table_set_weight(Table *t, TableCell *cell, unsigned weight);
      79             : int table_set_align_percent(Table *t, TableCell *cell, unsigned percent);
      80             : int table_set_ellipsize_percent(Table *t, TableCell *cell, unsigned percent);
      81             : int table_set_color(Table *t, TableCell *cell, const char *color);
      82             : int table_set_url(Table *t, TableCell *cell, const char *url);
      83             : int table_set_uppercase(Table *t, TableCell *cell, bool b);
      84             : 
      85             : int table_update(Table *t, TableCell *cell, TableDataType type, const void *data);
      86             : 
      87             : int table_add_many_internal(Table *t, TableDataType first_type, ...);
      88             : #define table_add_many(t, ...) table_add_many_internal(t, __VA_ARGS__, _TABLE_DATA_TYPE_MAX)
      89             : 
      90             : void table_set_header(Table *table, bool b);
      91             : void table_set_width(Table *t, size_t width);
      92             : int table_set_empty_string(Table *t, const char *empty);
      93             : int table_set_display(Table *t, size_t first_column, ...);
      94             : int table_set_sort(Table *t, size_t first_column, ...);
      95             : int table_set_reverse(Table *t, size_t column, bool b);
      96             : 
      97             : int table_print(Table *t, FILE *f);
      98             : int table_format(Table *t, char **ret);
      99             : 
     100           2 : static inline TableCell* TABLE_HEADER_CELL(size_t i) {
     101           2 :         return SIZE_TO_PTR(i + 1);
     102             : }
     103             : 
     104             : size_t table_get_rows(Table *t);
     105             : size_t table_get_columns(Table *t);
     106             : 
     107             : TableCell *table_get_cell(Table *t, size_t row, size_t column);
     108             : 
     109             : const void *table_get(Table *t, TableCell *cell);
     110             : const void *table_get_at(Table *t, size_t row, size_t column);
     111             : 
     112             : int table_to_json(Table *t, JsonVariant **ret);
     113             : int table_print_json(Table *t, FILE *f, JsonFormatFlags json_flags);

Generated by: LCOV version 1.14