75 return ((c ==
'(') || (c ==
')'));
97 amxc_var_t*
call_id = GET_ARG(args,
"_call_id");
99 amxc_llist_for_each(it, (&func->
args)) {
101 amxc_var_t* in_arg = amxc_var_get_key(args,
103 AMXC_VAR_FLAG_DEFAULT);
105 amxc_var_delete(&in_arg);
112 const char* func_name,
113 amxc_var_t*
const args) {
116 when_null(
object, exit);
119 when_true_status(amxc_var_type_of(args) != AMXC_VAR_ID_HTABLE,
130 when_null_status((*func)->impl,
144 when_null(
object, exit);
145 when_null(func, exit);
146 when_not_null(func->
it.llist, exit);
149 amxc_llist_for_each(it, (&object->
functions)) {
150 const char* object_func_name = NULL;
151 const char* func_name = NULL;
155 if(strcmp(func_name, object_func_name) == 0) {
161 if(object_func == NULL) {
189 when_null(
object, exit);
190 when_str_empty(name, exit);
193 when_null(func, exit);
195 if(owner ==
object) {
202 new_func->
impl = impl;
203 when_failed(amxc_llist_append(&object->
functions, &new_func->
it), exit);
213 amxc_string_t normalized;
215 amxc_string_init(&normalized, 0);
217 when_null(
object, exit);
218 when_str_empty(name, exit);
220 amxc_string_setf(&normalized,
"%s", name);
221 amxc_string_trimr(&normalized,
is_brace);
225 when_not_null(func, exit);
240 amxc_string_clean(&normalized);
246 const char* func_name,
247 amxc_var_t*
const args,
248 amxc_var_t*
const ret) {
252 when_null(ret, exit);
254 when_failed(retval, exit);
256 retval = func->
impl(
object, func, args, ret);
261 uint64_t
call_id = amxc_var_constcast(uint64_t, ret);
263 if(call_ctx == NULL) {
280 const amxc_llist_t* funcs_list = NULL;
282 when_null(
object, exit);
284 amxc_var_init(&funcs);
286 funcs_list = amxc_var_constcast(amxc_llist_t, &funcs);
287 count = amxc_llist_size(funcs_list);
288 amxc_var_clean(&funcs);
Ambiorix Data Model Default actions header file.
amxd_deferred_ctx_t *PRIVATE amxd_find_deferred(uint64_t call_id)
Ambiorix Data Model RPC methods API header file.
Ambiorix Data Model API header file.
static bool amxd_object_can_invoke_function(const amxd_object_t *const object, const amxd_function_t *const func)
static amxd_status_t amxd_object_invoke_check(amxd_object_t *const object, amxd_function_t **func, const char *func_name, amxc_var_t *const args)
static int is_brace(int c)
static void amxd_function_remove_in_args(amxd_function_t *func, amxc_var_t *args)
PRIVATE amxd_function_t * amxd_object_get_self_func(const amxd_object_t *const object, const char *name)
enum _amxd_status amxd_status_t
amxd_status_t(* amxd_object_fn_t)(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)
@ amxd_status_invalid_name
@ amxd_status_function_not_implemented
@ amxd_status_invalid_function
@ amxd_status_invalid_function_argument
@ amxd_status_unknown_error
@ amxd_status_function_not_found
enum _amxd_dm_access amxd_dm_access_t
Access level.
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent object.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxd_status_t amxd_object_change_function(amxd_object_t *const object, const char *name, amxd_object_fn_t impl)
Changes the implementation of an object's RPC method.
amxd_status_t amxd_object_add_function(amxd_object_t *const object, amxd_function_t *const func)
Adds an RPC method definition to the object definition.
amxd_function_t * amxd_object_get_function(const amxd_object_t *const object, const char *name)
Get the definition of a RPC method from an object.
uint32_t amxd_object_get_function_count(amxd_object_t *const object, amxd_dm_access_t access)
Retruns the number of RPC methods available in an object.
amxd_status_t amxd_object_list_functions(amxd_object_t *const object, amxc_var_t *const list, amxd_dm_access_t access)
Builds a linked list variant containing all function names available in the object.
amxd_status_t amxd_object_invoke_function(amxd_object_t *const object, const char *func_name, amxc_var_t *const args, amxc_var_t *const ret)
Calls an object RPC method.
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_function_get_name(const amxd_function_t *const func)
Get the name of a method.
amxd_object_t * amxd_function_get_owner(const amxd_function_t *const func)
Get the object pointer of the object containing the function definition.
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_are_args_valid(amxd_function_t *func, amxc_var_t *args)
Validates that the input arguments are valid.
amxc_llist_it_t derived_from