62 #include <amxc/amxc.h>
76 if((a == NULL) && (b != NULL)) {
80 if((a != NULL) && (b == NULL)) {
84 if(((a != NULL) && (b != NULL)) && (strcmp(a, b) != 0)) {
96 when_null(entry, exit);
113 when_null(entry, exit);
116 when_null(*entry, exit);
129 when_null(entry, exit);
130 when_null(*entry, exit);
150 when_null(entry, exit);
153 when_failed(status, exit);
159 when_str_empty(a, exit);
163 when_str_empty(b, exit);
171 entry->
a = strdup(a);
172 when_null(entry->
a, exit);
180 entry->
b = strdup(b);
181 when_null(entry->
b, exit);
191 amxc_llist_it_init(&entry->
it);
192 amxc_llist_init(&entry->
entries);
194 amxc_var_init(&entry->
a_to_b);
195 amxc_var_init(&entry->
b_to_a);
200 amxc_var_set_type(&entry->
a_to_b, AMXC_VAR_ID_HTABLE);
201 amxc_var_set_type(&entry->
b_to_a, AMXC_VAR_ID_HTABLE);
202 when_failed(amxp_sigmngr_new(&entry->
sig_mngr), exit);
203 amxp_sigmngr_add_signal(entry->
sig_mngr,
"sync:instance-added");
214 amxc_var_clean(&entry->
a_to_b);
215 amxc_var_clean(&entry->
b_to_a);
221 when_null(entry, exit);
224 amxp_sigmngr_delete(&entry->
sig_mngr);
238 amxc_llist_it_take(&entry->
it);
241 amxc_var_clean(&entry->
a_to_b);
242 amxc_var_clean(&entry->
b_to_a);
255 when_null(dest, exit);
256 when_null(src, exit);
266 when_failed(status, exit);
271 amxc_llist_for_each(it, &src->
entries) {
275 when_failed(status, exit);
287 when_null(parent, exit);
288 when_null(child, exit);
289 when_true(parent == child, exit);
300 when_failed(status, exit);
302 when_failed(status, exit);
304 amxc_llist_iterate(it, &child->
entries) {
308 when_failed(status, exit);
311 amxc_llist_iterate(it, &parent->
entries) {
318 amxc_llist_append(&parent->
entries, &child->
it);
329 if(entry1 == entry2) {
334 if((entry1 == NULL) || (entry2 == NULL)) {
amxs_status_t amxs_update_child_attributes(int parent_attr, int *child_attr)
amxs_status_t amxs_validate_attributes(int parent_attr, int child_attr)
void amxs_llist_it_delete_subscription(amxc_llist_it_t *it)
amxs_status_t amxs_sync_entry_add_entry(amxs_sync_entry_t *parent, amxs_sync_entry_t *child)
amxs_status_t amxs_sync_entry_new(amxs_sync_entry_t **entry, const char *a, const char *b, int attributes, amxs_translation_cb_t translation_cb, amxs_action_cb_t action_cb, amxs_sync_entry_type_t type, void *priv)
amxs_sync_direction_t amxs_sync_entry_get_initial_direction(const amxs_sync_entry_t *const entry)
int amxs_sync_entry_compare(amxs_sync_entry_t *entry1, amxs_sync_entry_t *entry2)
amxs_status_t amxs_sync_entry_init(amxs_sync_entry_t *entry, const char *a, const char *b, int attributes, amxs_translation_cb_t translation_cb, amxs_action_cb_t action_cb, amxs_sync_entry_type_t type, void *priv)
amxs_status_t amxs_sync_entry_copy(amxs_sync_entry_t **dest, amxs_sync_entry_t *src, void *priv)
static void amxs_llist_it_delete_sync_entry(amxc_llist_it_t *it)
void amxs_sync_entry_delete(amxs_sync_entry_t **entry)
void amxs_sync_entry_clean(amxs_sync_entry_t *entry)
static int amxs_sync_entry_compare_name(const char *const a, const char *const b)
enum _amxs_sync_entry_type amxs_sync_entry_type_t
@ amxs_status_unknown_error
@ amxs_status_invalid_type
@ amxs_status_invalid_arg
enum _amxs_sync_direction amxs_sync_direction_t
enum _amxs_status amxs_status_t
#define AMXS_SYNC_INIT_B
Take the initial values from object B.
#define AMXS_SYNC_ONLY_B_TO_A
Only synchronize from object B to object A.
#define AMXS_SYNC_ONLY_A_TO_B
Only synchronize from object A to object B.
amxs_status_t(* amxs_action_cb_t)(const amxs_sync_entry_t *entry, amxs_sync_direction_t direction, amxc_var_t *data, void *priv)
Definition of the action callback function.
amxs_status_t(* amxs_translation_cb_t)(const amxs_sync_entry_t *entry, amxs_sync_direction_t direction, const amxc_var_t *input, amxc_var_t *output, void *priv)
Definition of the translation callback function.
amxs_sync_entry_type_t type
amxb_bus_ctx_t * bus_ctx_a
amxs_translation_cb_t translation_cb
amxc_llist_t subscriptions
amxs_action_cb_t action_cb
amxp_signal_mngr_t * sig_mngr
amxb_bus_ctx_t * bus_ctx_b