rtl433  UNKNOWN
RTL-433 utility
data.h
Go to the documentation of this file.
1 
21 #ifndef INCLUDE_DATA_H_
22 #define INCLUDE_DATA_H_
23 
24 #include <stdio.h>
25 
26 #if defined(_MSC_VER) && !defined(__clang__)
27  /*
28  * MSVC have no support for "Variable Length Arrays"
29  * But compiling using 'clang-cl', '_MSC_VER' is a built-in. Hence use VLA
30  * for Clang in that case.
31  * With no VLAs, we need 'alloca()' which is in '<malloc.h>' etc.
32  */
33  #include <malloc.h>
34  #define RTL_433_NO_VLAs
35 
36  // MSVC has something like C99 restrict as __restrict
37  #ifndef restrict
38  #define restrict __restrict
39  #endif
40 #endif
41 
42 typedef enum {
50 } data_type_t;
51 
52 typedef struct data_array {
55  void *values;
56 } data_array_t;
57 
58 typedef struct data {
59  char *key;
60  char *pretty_key;
62  char *format;
63  void *value;
64  unsigned retain;
65  struct data *next;
66 } data_t;
67 
100 data_t *data_make(const char *key, const char *pretty_key, ...);
101 
106 data_t *data_append(data_t *first, const char *key, const char *pretty_key, ...);
107 
112 data_t *data_prepend(data_t *first, const char *key, const char *pretty_key, ...);
113 
122 
124 void data_array_free(data_array_t *array);
125 
128 
130 void data_free(data_t *data);
131 
132 struct data_output;
133 
134 typedef struct data_output {
135  void (*print_data)(struct data_output *output, data_t *data, char *format);
136  void (*print_array)(struct data_output *output, data_array_t *data, char *format);
137  void (*print_string)(struct data_output *output, const char *data, char *format);
138  void (*print_double)(struct data_output *output, double data, char *format);
139  void (*print_int)(struct data_output *output, int data, char *format);
140  void (*output_start)(struct data_output *output, const char **fields, int num_fields);
141  void (*output_poll)(struct data_output *output);
142  void (*output_free)(struct data_output *output);
143  FILE *file;
144 } data_output_t;
145 
153 
155 
156 struct data_output *data_output_kv_create(FILE *file);
157 
158 struct data_output *data_output_syslog_create(const char *host, const char *port);
159 
167 void data_output_start(struct data_output *output, const char **fields, int num_fields);
168 
170 void data_output_print(struct data_output *output, data_t *data);
171 
173 void data_output_poll(struct data_output *output);
174 
175 void data_output_free(struct data_output *output);
176 
177 /* data output helpers */
178 
179 void print_value(data_output_t *output, data_type_t type, void *value, char *format);
180 
181 void print_array_value(data_output_t *output, data_array_t *array, char *format, int idx);
182 
183 size_t data_print_jsons(data_t *data, char *dst, size_t len);
184 
185 #endif // INCLUDE_DATA_H_
data_t * data_make(const char *key, const char *pretty_key,...)
Constructs a structured data object.
Definition: data.c:273
data_t * data_prepend(data_t *first, const char *key, const char *pretty_key,...)
Adds to a structured data object, by prepending data.
Definition: data.c:291
unsigned retain
incremented on data_retain, data_free only frees if this is zero
Definition: data.h:64
size_t data_print_jsons(data_t *data, char *dst, size_t len)
Definition: data.c:959
void data_array_free(data_array_t *array)
Releases a data array.
Definition: data.c:309
void print_value(data_output_t *output, data_type_t type, void *value, char *format)
Definition: data.c:382
char * pretty_key
the name used for displaying data to user in with a nicer name
Definition: data.h:60
struct data_array data_array_t
struct data_output * data_output_syslog_create(const char *host, const char *port)
Definition: data.c:1101
void(* output_start)(struct data_output *output, const char **fields, int num_fields)
Definition: data.h:140
data_t * data_append(data_t *first, const char *key, const char *pretty_key,...)
Adds to a structured data object, by appending data.
Definition: data.c:282
Definition: data.h:134
data_t * data_retain(data_t *data)
Retain a structure object, returns the structure object passed in.
Definition: data.c:321
data_type_t
Definition: data.h:42
void data_output_poll(struct data_output *output)
Allows to polls an event loop, if necessary.
Definition: data.c:366
data_array_t * data_array(int num_values, data_type_t type, void *ptr)
Constructs an array from given data of the given uniform type.
Definition: data.c:163
pointer to data is stored
Definition: data.h:43
void print_array_value(data_output_t *output, data_array_t *array, char *format, int idx)
Definition: data.c:407
void * value
Definition: data.h:63
struct data_output data_output_t
struct data_output * data_output_csv_create(FILE *file)
Construct data output for CSV printer.
Definition: data.c:846
struct data data_t
void(* print_int)(struct data_output *output, int data, char *format)
Definition: data.h:139
void data_free(data_t *data)
Releases a structure object if retain is zero, decrement retain otherwise.
Definition: data.c:328
FILE * file
Definition: data.h:143
struct data_output * data_output_kv_create(FILE *file)
Definition: data.c:669
pointer to integer is stored
Definition: data.h:44
pointer to an array of values is stored
Definition: data.h:47
void data_output_start(struct data_output *output, const char **fields, int num_fields)
Setup known field keys and start output, used by CSV only.
Definition: data.c:359
void(* output_poll)(struct data_output *output)
Definition: data.h:141
char * key
Definition: data.h:59
struct data * next
chaining to the next element in the linked list; NULL indicates end-of-list
Definition: data.h:65
indicates the following value is formatted
Definition: data.h:49
pointer to a string is stored
Definition: data.h:46
invalid
Definition: data.h:48
void(* print_array)(struct data_output *output, data_array_t *data, char *format)
Definition: data.h:136
struct data_output * data_output_json_create(FILE *file)
Definition: data.c:483
void data_output_print(struct data_output *output, data_t *data)
Prints a structured data object.
Definition: data.c:348
void(* output_free)(struct data_output *output)
Definition: data.h:142
void * values
Definition: data.h:55
void(* print_string)(struct data_output *output, const char *data, char *format)
Definition: data.h:137
Definition: data.h:52
void(* print_double)(struct data_output *output, double data, char *format)
Definition: data.h:138
void data_output_free(struct data_output *output)
Definition: data.c:373
char * format
if not null, contains special formatting string
Definition: data.h:62
data_type_t type
Definition: data.h:61
pointer to a double is stored
Definition: data.h:45
int num_values
Definition: data.h:53
Definition: data.h:58
data_type_t type
Definition: data.h:54