63 #include <amxc/amxc.h>
64 #include <amxp/amxp.h>
80 amxc_llist_it_delete_t func) {
81 amxc_llist_for_each(it, llist) {
111 amxc_var_t* values) {
112 amxc_var_t* alias_def =
GET_FIELD(templ_params,
"Alias");
113 amxc_var_t* alias_val =
GET_FIELD(values,
"Alias");
114 const char* alias_name = NULL;
116 when_null(alias_def, exit);
117 when_true(!amxc_var_constcast(
bool,
120 when_true(!amxc_var_constcast(
bool,
121 GET_FIELD(alias_def,
"attributes.unique")),
124 alias_name = amxc_var_constcast(cstring_t, alias_val);
133 amxc_var_t* templ_params,
134 amxc_var_t* values) {
141 if((alias != NULL) && (alias[0] != 0)) {
142 object->name = strdup(alias);
143 when_null(object->
name, exit);
146 if(object->
name == NULL) {
147 if((name != NULL) && (name[0] != 0)) {
148 object->name = strdup(name);
149 when_null(object->
name, exit);
168 amxc_llist_it_take(&object->
it);
172 amxc_array_clean(&object->
mib_names, NULL);
173 amxc_var_clean(&object->
events);
182 ( super->
it.llist == NULL)) {
188 object->index_name = NULL;
195 amxc_var_t*
const data) {
196 amxc_var_t* item_data = amxc_var_get_path(full_data,
198 AMXC_VAR_FLAG_DEFAULT);
200 if(amxc_var_type_of(item_data) == AMXC_VAR_ID_LIST) {
201 const amxc_llist_t* src_list = amxc_var_constcast(amxc_llist_t, item_data);
202 amxc_var_set_type(data, AMXC_VAR_ID_LIST);
203 amxc_llist_for_each(it, src_list) {
204 amxc_llist_append(&data->data.vl, it);
207 }
else if(amxc_var_type_of(item_data) == AMXC_VAR_ID_HTABLE) {
208 const amxc_htable_t* src_table = amxc_var_constcast(amxc_htable_t, item_data);
209 amxc_htable_it_t* it = NULL;
210 amxc_var_set_type(data, AMXC_VAR_ID_HTABLE);
211 it = amxc_htable_get_first(src_table);
213 const char* key = amxc_htable_it_get_key(it);
214 amxc_htable_insert(&data->data.vm, key, it);
215 it = amxc_htable_get_first(src_table);
224 amxc_llist_for_each(it, (&object->
functions)) {
225 const char* func_name = NULL;
228 if(strcmp(func_name, name) == 0) {
255 when_failed(retval, exit);
259 when_failed(retval, exit);
261 amxc_llist_iterate(cb_it, (&base->
cb_fns)) {
271 if(dst_is_inst || dst_is_templ) {
300 amxc_llist_for_each(it, (&src->
functions)) {
309 when_failed(retval, exit);
310 if(src_is_mib && (dst_is_inst || dst_is_templ)) {
333 amxc_var_for_each(data, &src->
events) {
334 amxc_var_t* new_data = NULL;
335 const char* name = amxc_var_key(data);
337 amxc_var_new(&new_data);
338 amxc_var_copy(new_data, data);
348 amxc_array_it_t* ait = amxc_array_get_first(&src->
mib_names);
350 const char* name = (
const char*) amxc_array_it_get_data(ait);
352 amxc_array_append_data(&dst->
mib_names, (
void*) name);
354 ait = amxc_array_it_get_next(ait);
364 amxc_llist_for_each(it, (&src->
objects)) {
368 when_failed(retval, exit);
370 when_failed(retval, exit);
372 when_failed(retval, exit);
384 when_null(
object, exit);
387 when_null((*
object), exit);
389 (*object)->attr = base->
attr;
390 (*object)->type = base->
type;
392 amxc_llist_append(&parent->
objects, &(*object)->it);
395 when_failed(retval, exit);
Ambiorix Data Model API header file.
amxd_status_t amxd_dm_invoke_action(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
void PRIVATE amxd_object_init_base(amxd_object_t *const object, const amxd_object_type_t type)
void PRIVATE amxd_dm_set_derived_from(amxd_object_t *const object)
Ambiorix Data Model API header file.
amxd_status_t amxd_object_set_counter(amxd_object_t *const object, const char *name)
Ambiorix Data Model API header file.
const char * amxd_object_template_get_alias(amxc_var_t *templ_params, amxc_var_t *values)
static void amxd_object_free_object_it(amxc_llist_it_t *it)
amxd_function_t * amxd_object_get_self_func(const amxd_object_t *const object, const char *name)
amxd_status_t amxd_object_derive(amxd_object_t **object, amxd_object_t *const base, amxd_object_t *const parent)
amxd_status_t amxd_object_init(amxd_object_t *const object, const amxd_object_type_t type, const char *name, amxc_var_t *templ_params, amxc_var_t *values)
void amxd_object_destroy_handlers(amxd_object_t *const object)
static void amxd_dm_llist_clean(amxc_llist_t *const llist, amxc_llist_it_delete_t func)
void amxd_object_free_func_it(amxc_llist_it_t *it)
static void amxd_object_free_cb_it(amxc_llist_it_t *it)
static void amxd_object_free_param_it(amxc_llist_it_t *it)
amxd_status_t amxd_object_copy_funcs(amxd_object_t *const dst, const amxd_object_t *const src)
amxd_status_t amxd_object_copy_events(amxd_object_t *const dst, const amxd_object_t *const src)
amxd_status_t amxd_object_copy_mib_names(amxd_object_t *const dst, const amxd_object_t *const src)
void amxd_fetch_item(amxc_var_t *const full_data, const char *item, amxc_var_t *const data)
amxd_status_t amxd_object_copy_children(amxd_object_t *const dst, const amxd_object_t *const src)
amxd_status_t amxd_object_copy_params(amxd_object_t *const dst, const amxd_object_t *const src)
void amxd_object_clean(amxd_object_t *const object)
amxd_status_t amxd_param_copy(amxd_param_t **dest, const amxd_param_t *const source)
bool amxd_param_is_attr_set(const amxd_param_t *const param, const amxd_pattr_id_t attr)
amxd_status_t amxd_param_set_attrs(amxd_param_t *param, const uint32_t bitmask, bool enable)
const char * amxd_param_get_name(const amxd_param_t *const param)
amxd_status_t amxd_param_set_attr(amxd_param_t *param, const amxd_pattr_id_t attr, const bool enable)
uint32_t amxd_param_get_attrs(const amxd_param_t *const param)
amxd_object_t * amxd_param_get_owner(const amxd_param_t *const param)
amxd_status_t amxd_param_delete(amxd_param_t **param)
amxd_status_t amxd_param_add_action_cb(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn, void *priv)
#define GET_FIELD(var, field)
enum _amxd_status amxd_status_t
@ amxd_status_unknown_error
enum _amxd_object_type amxd_object_type_t
The different object types.
amxd_status_t amxd_object_add_event_ext(amxd_object_t *const object, const char *event_name, amxc_var_t *event_data)
Adds an event definition to the object.
amxd_object_t * amxd_object_get_child(const amxd_object_t *object, const char *name)
Get a child of the object.
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.
void amxd_object_delete(amxd_object_t **object)
Invokes the destroy handler(s) of the object.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
void amxd_object_free(amxd_object_t **object)
Data model object destructor function.
amxd_status_t amxd_function_set_attr(amxd_function_t *func, const amxd_fattr_id_t attr, const bool enable)
Sets or unsets a method attribute.
const char * amxd_function_get_name(const amxd_function_t *const func)
Get the name of a method.
void amxd_function_delete(amxd_function_t **func)
Data model RPC method destructor function.
amxd_status_t amxd_function_copy(amxd_function_t **dest, const amxd_function_t *const source)
Data model RPC method copy constructor function.
bool amxd_function_is_attr_set(const amxd_function_t *const func, const amxd_fattr_id_t attr)
Checks if a method attribute is set.
uint32_t amxd_function_get_attrs(const amxd_function_t *const func)
Gets the set attributes of a RPC method.
amxc_llist_t derived_objects
amxc_llist_it_t derived_from