libamxd  6.4.1
Data Model Manager
amxd_function.c File Reference
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <amxc/amxc.h>
#include <amxp/amxp_signal.h>
#include <amxp/amxp_slot.h>
#include <amxd/amxd_common.h>
#include <amxd/amxd_types.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_function.h>
#include "amxd_priv.h"
#include "amxd_assert.h"
#include "amxd_dm_priv.h"

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 

Functions

static void amxd_function_free_arg_it (amxc_llist_it_t *it)
 
static amxd_status_t amxd_function_init (amxd_function_t *const func, const char *name, uint32_t ret_type, amxd_object_fn_t impl)
 
static int amxd_function_clean (amxd_function_t *const func)
 
static uint32_t amxd_function_get_attributes (const amxd_function_t *const func)
 
static void amxd_function_set_attributes (amxd_function_t *const func, const uint32_t attr)
 
amxd_status_t amxd_function_new (amxd_function_t **func, const char *name, const uint32_t ret_type, amxd_object_fn_t impl)
 Data model RPC method constructor function. More...
 
void amxd_function_delete (amxd_function_t **func)
 Data model RPC method destructor function. More...
 
amxd_status_t amxd_function_copy (amxd_function_t **dest, const amxd_function_t *const source)
 Data model RPC method copy constructor function. More...
 
amxd_object_tamxd_function_get_owner (const amxd_function_t *const func)
 Get the object pointer of the object containing the function definition. More...
 
amxd_function_tamxd_function_get_base (const amxd_function_t *const func)
 Get the base function definition of an overridden function. More...
 
amxd_status_t amxd_function_call_base (const amxd_function_t *const func, amxd_object_t *const object, amxc_var_t *const args, amxc_var_t *const ret)
 Call the base function of an overridden function. More...
 
const char * amxd_function_get_name (const amxd_function_t *const func)
 Get the name of a method. More...
 
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. More...
 
amxd_status_t amxd_function_set_attrs (amxd_function_t *func, const uint32_t bitmask, bool enable)
 Sets or unsets method attributes using a bitmap. More...
 
uint32_t amxd_function_get_attrs (const amxd_function_t *const func)
 Gets the set attributes of a RPC method. More...
 
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. More...
 
void amxd_function_set_flag (amxd_function_t *func, const char *flag)
 Sets a flag on a function. More...
 
void amxd_function_unset_flag (amxd_function_t *func, const char *flag)
 Removes a flag from a function. More...
 
bool amxd_function_has_flag (const amxd_function_t *const func, const char *flag)
 Checks if a flag is set. More...
 
amxd_status_t amxd_function_set_impl (amxd_function_t *const func, amxd_object_fn_t impl)
 Set an implementation for a RPC method. More...
 
amxd_status_t amxd_function_describe (amxd_function_t *const func, amxc_var_t *const value)
 Fetches the full RPC method definition in a variant. More...
 
amxd_func_arg_tamxd_function_get_arg (const amxd_function_t *const func, const char *name)
 Gets the argument definition of a RPC method. More...
 
bool amxd_function_are_args_valid (amxd_function_t *func, amxc_var_t *args)
 Validates that the input arguments are valid. More...
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxd_function.c.

Function Documentation

◆ amxd_function_clean()

static int amxd_function_clean ( amxd_function_t *const  func)
static

Definition at line 112 of file amxd_function.c.

112  {
113  amxc_llist_it_take(&func->it);
114  amxc_llist_clean(&func->args, amxd_function_free_arg_it);
115  amxc_var_delete(&func->flags);
116 
117  free(func->name);
118  func->name = NULL;
119  func->impl = NULL;
120 
121  return 0;
122 }
static void amxd_function_free_arg_it(amxc_llist_it_t *it)
Definition: amxd_function.c:77
amxc_llist_t args
Definition: amxd_types.h:346
amxc_llist_it_t it
Definition: amxd_types.h:342
amxc_var_t * flags
Definition: amxd_types.h:348
amxd_object_fn_t impl
Definition: amxd_types.h:347

◆ amxd_function_free_arg_it()

static void amxd_function_free_arg_it ( amxc_llist_it_t *  it)
static

Definition at line 77 of file amxd_function.c.

77  {
78  amxd_func_arg_t* arg = amxc_llist_it_get_data(it, amxd_func_arg_t, it);
80  free(arg);
81 }
void PRIVATE amxd_function_arg_clean(amxd_func_arg_t *const arg)

◆ amxd_function_get_attributes()

static uint32_t amxd_function_get_attributes ( const amxd_function_t *const  func)
static

Definition at line 124 of file amxd_function.c.

124  {
125 
126  uint32_t attributes = 0;
127 
128  attributes |= func->attr.templ << amxd_fattr_template;
129  attributes |= func->attr.instance << amxd_fattr_instance;
130  attributes |= func->attr.priv << amxd_fattr_private;
131  attributes |= func->attr.prot << amxd_fattr_protected;
132  attributes |= func->attr.async << amxd_fattr_async;
133 
134  return attributes;
135 }
@ amxd_fattr_template
Definition: amxd_types.h:311
@ amxd_fattr_async
Definition: amxd_types.h:321
@ amxd_fattr_private
Definition: amxd_types.h:313
@ amxd_fattr_protected
Definition: amxd_types.h:317
@ amxd_fattr_instance
Definition: amxd_types.h:312
uint32_t templ
Definition: amxd_types.h:326
uint32_t priv
Definition: amxd_types.h:329
uint32_t async
Definition: amxd_types.h:331
uint32_t prot
Definition: amxd_types.h:330
uint32_t instance
Definition: amxd_types.h:327
amxd_func_attr_t attr
Definition: amxd_types.h:343

◆ amxd_function_init()

static amxd_status_t amxd_function_init ( amxd_function_t *const  func,
const char *  name,
uint32_t  ret_type,
amxd_object_fn_t  impl 
)
static

Definition at line 83 of file amxd_function.c.

86  {
88 
89  amxc_llist_it_init(&func->it);
90 
91  func->attr.templ = 0;
92  func->attr.instance = 0;
93  func->attr.priv = 0;
94  func->attr.prot = 0;
95 
96  if((ret_type == AMXC_VAR_ID_ANY) ||
97  ( amxc_var_get_type(ret_type) != NULL)) {
98  func->name = strdup(name);
99  when_null(func->name, exit);
100 
101  amxc_llist_init(&func->args);
102  func->ret_type = ret_type;
103  func->impl = impl;
104 
105  retval = amxd_status_ok;
106  }
107 
108 exit:
109  return retval;
110 }
enum _amxd_status amxd_status_t
@ amxd_status_ok
Definition: amxd_types.h:78
@ amxd_status_unknown_error
Definition: amxd_types.h:79
uint32_t ret_type
Definition: amxd_types.h:345

◆ amxd_function_set_attributes()

static void amxd_function_set_attributes ( amxd_function_t *const  func,
const uint32_t  attr 
)
static

Definition at line 137 of file amxd_function.c.

138  {
139  func->attr.templ = IS_BIT_SET(attr, amxd_fattr_template);
141  func->attr.priv = IS_BIT_SET(attr, amxd_fattr_private);
142  func->attr.prot = IS_BIT_SET(attr, amxd_fattr_protected);
143  func->attr.async = IS_BIT_SET(attr, amxd_fattr_async);
144 }
#define IS_BIT_SET(b, f)
Definition: amxd_common.h:66