79 amxc_var_t* parameters = NULL;
80 const amxc_htable_t* ht_parameters = NULL;
99 amxc_var_set_type(retval, AMXC_VAR_ID_HTABLE);
100 amxc_var_add_key(uint32_t, retval,
"index", index);
101 amxc_var_add_key(cstring_t, retval,
"name", name);
102 amxc_var_add_key(cstring_t, retval,
"path", path);
103 amxc_var_add_key(cstring_t, retval,
"object",
object);
104 parameters = amxc_var_add_key(amxc_htable_t, retval,
"parameters", NULL);
144 ht_parameters = amxc_var_constcast(amxc_htable_t, parameters);
145 amxc_htable_for_each(it, ht_parameters) {
146 const char* param_name = amxc_htable_it_get_key(it);
147 amxc_var_t* param_description = amxc_var_from_htable_it(it);
148 bool is_key = GETP_BOOL(param_description,
"attributes.key");
150 amxc_var_t* param_value = amxc_var_take_key(param_description,
"value");
151 amxc_var_set_key(parameters, param_name, param_value, AMXC_VAR_FLAG_UPDATE);
153 amxc_var_delete(¶m_description);
167 amxc_var_init(&value);
170 amxc_var_clean(&value);
171 when_failed(
status, exit);
185 amxc_var_t* retval) {
187 amxc_var_t templ_params;
189 amxp_expr_t* expr = NULL;
191 amxc_var_init(&templ_params);
205 when_failed(
status, exit);
222 amxc_var_clean(&templ_params);
223 amxp_expr_delete(&expr);
231 when_false(amxc_var_type_of(data) == AMXC_VAR_ID_HTABLE, exit);
232 when_null(GET_ARG(data,
"index"), exit);
244 const amxc_var_t*
const args,
245 amxc_var_t*
const retval,
248 amxc_var_t* params = NULL;
249 amxc_var_t* max = (amxc_var_t*) priv;
254 bool is_created =
false;
256 when_null(
object, exit);
257 when_null(retval, exit);
266 int64_t max_inst = 0;
267 instances = is_created ? instances - 1 : instances;
268 if(amxc_var_type_of(max) == AMXC_VAR_ID_CSTRING) {
270 max = ref_value == NULL ? max : ref_value;
272 max_inst = amxc_var_dyncast(int64_t, max);
273 if((max_inst > 0) && ((int64_t) instances >= max_inst)) {
284 index = GET_UINT32(args,
"index");
285 key = amxc_var_dyncast(cstring_t, GET_ARG(args,
"name"));
286 params = GET_ARG(args,
"parameters");
288 set_ro = GET_BOOL(args,
"set_read_only");
305 amxc_var_t* values) {
308 amxc_var_t* var_index = NULL;
311 amxc_var_init(&args);
312 amxc_var_init(&retval);
313 when_null(templ, exit);
315 if(instance != NULL) {
319 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
320 amxc_var_set_key(&args,
"parameters", values, AMXC_VAR_FLAG_COPY);
322 amxc_var_add_key(
bool, &args,
"set_read_only",
true);
323 amxc_var_add_key(uint32_t, &args,
"index", index);
324 amxc_var_add_key(cstring_t, &args,
"name", name);
331 when_failed(
status, exit);
333 var_index = amxc_var_get_path(&retval,
"index", AMXC_VAR_FLAG_DEFAULT);
334 index = amxc_var_dyncast(uint32_t, var_index);
336 if(instance != NULL) {
341 amxc_var_clean(&args);
342 amxc_var_clean(&retval);
Ambiorix Data Model Default actions header file.
static amxd_status_t amxd_action_add_inst(amxd_object_t *const templ, const char *name, uint32_t index, amxc_var_t *params, amxd_dm_access_t access, bool set_ro, amxc_var_t *retval)
amxd_status_t amxd_action_object_add_inst(amxd_object_t *const object, UNUSED amxd_param_t *const p, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
static amxd_status_t amxd_instance_validate_keys(amxd_object_t *instance)
static bool amxd_action_add_inst_is_created(amxd_object_t *const object, amxc_var_t *data)
static void amxd_action_add_inst_build_retval(amxd_object_t *instance, amxc_var_t *retval)
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)
Ambiorix Data Model API header file.
bool amxd_action_verify_access(amxd_object_t *object, amxd_dm_access_t access)
static uint32_t amxd_object_get_instance_count(const amxd_object_t *object)
amxd_status_t amxd_object_describe_params(amxd_object_t *const object, amxc_var_t *const value, amxd_dm_access_t access)
amxd_status_t amxd_param_validate(amxd_param_t *const param, const amxc_var_t *const value)
uint32_t amxd_param_get_attrs(const amxd_param_t *const param)
amxd_status_t amxd_param_get_value(amxd_param_t *const param, amxc_var_t *const value)
amxc_var_t *PRIVATE amxd_resolve_param_ref(amxd_object_t *object, amxc_var_t *ref)
amxd_status_t PRIVATE amxd_action_set_values(amxd_object_t *const object, amxd_dm_access_t access, bool ro, const amxc_var_t *values, amxc_var_t *retval, bool required)
enum _amxd_action amxd_action_t
enum _amxd_status amxd_status_t
@ amxd_status_function_not_implemented
@ amxd_status_invalid_type
@ amxd_status_object_not_found
@ amxd_status_unknown_error
@ amxd_status_invalid_value
@ amxd_status_invalid_action
#define AMXD_OBJECT_INDEXED
Name and path format flag - use index for instance objects.
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
enum _amxd_dm_access amxd_dm_access_t
Access level.
#define AMXD_OBJECT_TERMINATE
Path format flag - when set the object path is terminated with a dot.
amxd_object_t amxd_status_t amxd_status_t char * amxd_object_get_path(const amxd_object_t *object, const uint32_t flags)
Get the full path of the object.
amxd_object_t * amxd_object_get_instance(const amxd_object_t *object, const char *name, uint32_t index)
Get an instance of the template object.
uint32_t amxd_object_get_index(const amxd_object_t *const object)
Get the index of an instance object.
amxd_status_t amxd_object_new_instance(amxd_object_t **object, amxd_object_t *templ, const char *name, uint32_t index, amxc_var_t *values)
Data model object constructor function.
amxd_status_t amxd_object_add_instance(amxd_object_t **instance, amxd_object_t *templ, const char *name, uint32_t index, amxc_var_t *values)
Data model object constructor function.
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.
bool amxd_object_is_attr_set(const amxd_object_t *const object, const amxd_oattr_id_t attr)
Checks if an attribute is set.
const char * amxd_object_get_name(const amxd_object_t *const object, const uint32_t flags)
Get the name of the object (or index as a string for instance objects)
#define amxd_object_for_each(type, it, object)
Helper macro for iterating object content.
static amxd_status_t status