10 #ifndef __LIBELEC_TYPES_IMPL_H__
11 #define __LIBELEC_TYPES_IMPL_H__
14 #include <acfutils/dr.h>
16 #include <acfutils/htbl.h>
17 #include <acfutils/list.h>
18 #include <acfutils/worker.h>
19 #include <acfutils/thread.h>
21 #ifdef LIBELEC_WITH_LIBSWITCH
22 #include <libswitch.h>
25 #ifdef LIBELEC_WITH_NETLINK
26 #include "libelec_types_net.h"
35 #define LIBELEC_SER_START_MARKER \
36 ALIGN_ATTR(16) int __serialize_start_marker[1]
37 #define LIBELEC_SER_END_MARKER \
38 int __serialize_end_marker[1]
39 #define LIBELEC_SERIALIZE_DATA_V(data, ser, key, ...) \
40 conf_set_data_v((ser), (key), &(data)->__serialize_start_marker, \
41 ((uintptr_t)&(data)->__serialize_end_marker) - \
42 ((uintptr_t)&(data)->__serialize_start_marker), __VA_ARGS__)
43 #define LIBELEC_DESERIALIZE_DATA_V(data, ser, key, ...) \
45 size_t __len = ((uintptr_t)&(data)->__serialize_end_marker) - \
46 ((uintptr_t)&(data)->__serialize_start_marker); \
47 void *tmpbuf = safe_malloc(__len); \
48 size_t __act_len = conf_get_data_v((ser), (key), tmpbuf, \
49 __len, __VA_ARGS__); \
50 if (__act_len != __len) { \
51 logMsg("Error deserializing key " key ": " \
52 "data length mismatch, wanted %d bytes, got %d", \
53 __VA_ARGS__, (int)__len, (int)__act_len); \
57 memcpy(&(data)->__serialize_start_marker, tmpbuf, __len); \
65 mutex_t worker_interlock;
87 mutex_t user_cbs_lock;
91 elec_comp_t **comps_array;
97 #ifdef LIBELEC_WITH_NETLINK
105 netlink_proto_t proto;
111 netlink_proto_t proto;
117 LIBELEC_SER_START_MARKER;
121 LIBELEC_SER_END_MARKER;
135 LIBELEC_SER_START_MARKER;
138 double stab_factor_U;
139 double stab_factor_f;
140 LIBELEC_SER_END_MARKER;
145 elec_comp_t *batt_conn;
157 LIBELEC_SER_START_MARKER;
160 double random_load_factor;
161 LIBELEC_SER_END_MARKER;
169 #ifdef LIBELEC_WITH_LIBSWITCH
172 LIBELEC_SER_START_MARKER;
176 LIBELEC_SER_END_MARKER;
197 double out_amps[ELEC_MAX_SRCS];
198 elec_comp_t *srcs[ELEC_MAX_SRCS];
218 LIBELEC_SER_START_MARKER;
240 LIBELEC_SER_END_MARKER;
242 double src_int_cond_total;
244 elec_comp_t *srcs[ELEC_MAX_SRCS];
252 elec_comp_t *srcs_ext[ELEC_MAX_SRCS];
264 #ifdef LIBELEC_WITH_DRS
275 list_node_t comps_node;
276 list_node_t gens_batts_node;
277 list_node_t ties_node;
278 avl_node_t info2comp_node;
279 avl_node_t name2comp_node;