libamxd  6.4.1
Data Model Manager
amxd_object_function.c File Reference
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "amxd_priv.h"
#include <amxd/amxd_common.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_action.h>
#include <amxd/amxd_function.h>
#include "amxd_dm_priv.h"
#include "amxd_object_priv.h"
#include "amxd_assert.h"

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 

Functions

static int is_brace (int c)
 
static bool amxd_object_can_invoke_function (const amxd_object_t *const object, const amxd_function_t *const func)
 
static void amxd_function_remove_in_args (amxd_function_t *func, amxc_var_t *args)
 
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)
 
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. More...
 
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. More...
 
amxd_function_tamxd_object_get_function (const amxd_object_t *const object, const char *name)
 Get the definition of a RPC method from an object. More...
 
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. More...
 
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. More...
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxd_object_function.c.

Function Documentation

◆ amxd_function_remove_in_args()

static void amxd_function_remove_in_args ( amxd_function_t func,
amxc_var_t *  args 
)
static

Definition at line 95 of file amxd_object_function.c.

96  {
97  amxc_var_t* call_id = GET_ARG(args, "_call_id");
98  amxc_var_delete(&call_id);
99  amxc_llist_for_each(it, (&func->args)) {
100  amxd_func_arg_t* arg = amxc_llist_it_get_data(it, amxd_func_arg_t, it);
101  amxc_var_t* in_arg = amxc_var_get_key(args,
102  arg->name,
103  AMXC_VAR_FLAG_DEFAULT);
104  if(arg->attr.out == 0) {
105  amxc_var_delete(&in_arg);
106  }
107  }
108 }
uint32_t out
Definition: amxd_types.h:292
amxd_arg_attr_t attr
Definition: amxd_types.h:299
amxc_llist_t args
Definition: amxd_types.h:346
static uint64_t call_id

◆ amxd_object_can_invoke_function()

static bool amxd_object_can_invoke_function ( const amxd_object_t *const  object,
const amxd_function_t *const  func 
)
static

Definition at line 78 of file amxd_object_function.c.

79  {
80  bool retval = false;
81 
83  when_true(func->attr.instance == 0, exit);
84  }
86  when_true(func->attr.templ == 0, exit);
87  }
88 
89  retval = true;
90 
91 exit:
92  return retval;
93 }
@ amxd_object_template
Definition: amxd_types.h:183
@ amxd_object_instance
Definition: amxd_types.h:186
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
uint32_t templ
Definition: amxd_types.h:326
uint32_t instance
Definition: amxd_types.h:327
amxd_func_attr_t attr
Definition: amxd_types.h:343

◆ amxd_object_invoke_check()

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

Definition at line 110 of file amxd_object_function.c.

113  {
115 
116  when_null(object, exit);
117  when_str_empty_status(func_name, exit, retval = amxd_status_invalid_name);
118  when_null_status(args, exit, retval = amxd_status_invalid_function_argument);
119  when_true_status(amxc_var_type_of(args) != AMXC_VAR_ID_HTABLE,
120  exit,
122  *func = amxd_object_get_function(object, func_name);
123  when_null_status(*func, exit, retval = amxd_status_function_not_found);
124  when_true_status(!amxd_function_are_args_valid(*func, args),
125  exit,
127  when_true_status(!amxd_object_can_invoke_function(object, *func),
128  exit,
130  when_null_status((*func)->impl,
131  exit,
133 
134  retval = amxd_status_ok;
135 
136 exit:
137  return retval;
138 }
static bool amxd_object_can_invoke_function(const amxd_object_t *const object, const amxd_function_t *const func)
enum _amxd_status amxd_status_t
@ amxd_status_invalid_name
Definition: amxd_types.h:86
@ amxd_status_function_not_implemented
Definition: amxd_types.h:83
@ amxd_status_invalid_function
Definition: amxd_types.h:84
@ amxd_status_invalid_function_argument
Definition: amxd_types.h:85
@ amxd_status_ok
Definition: amxd_types.h:78
@ amxd_status_unknown_error
Definition: amxd_types.h:79
@ amxd_status_function_not_found
Definition: amxd_types.h:81
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.
bool amxd_function_are_args_valid(amxd_function_t *func, amxc_var_t *args)
Validates that the input arguments are valid.

◆ is_brace()

static int is_brace ( int  c)
static

Definition at line 74 of file amxd_object_function.c.

74  {
75  return ((c == '(') || (c == ')'));
76 }