libamxd  6.4.1
Data Model Manager
amxd_parameter_action.h File Reference
#include <stdint.h>
#include <amxd/amxd_types.h>

Go to the source code of this file.

Functions

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)
 
amxd_status_t amxd_param_remove_action_cb (amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn)
 
void amxd_param_enable_action_cb (const amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn, bool enable)
 
bool amxd_param_has_action_cb (amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn)
 
bool amxd_param_has_action (amxd_param_t *const param, const amxd_action_t reason)
 
void * amxd_param_get_action_cb_data (amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn)
 
void amxd_param_set_action_cb_data (amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn, void *data)
 

Function Documentation

◆ amxd_param_add_action_cb()

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 
)

Definition at line 67 of file amxd_parameter_action.c.

70  {
72  amxd_dm_cb_t* cb = NULL;
73  when_null(param, exit);
74  when_null(fn, exit);
75 
76  cb = amxd_get_action(&param->cb_fns, reason, fn);
77  if((cb != NULL) && (cb->priv == priv)) {
78  goto exit;
79  }
80 
81  cb = (amxd_dm_cb_t*) calloc(1, sizeof(amxd_dm_cb_t));
82  when_null(cb, exit);
83 
84  cb->fn = fn;
85  cb->reason = reason;
86  cb->priv = priv;
87  cb->enable = true;
88 
89  amxc_llist_append(&param->cb_fns, &cb->it);
91 
92 exit:
93  return status;
94 }
amxd_dm_cb_t *PRIVATE amxd_get_action(const amxc_llist_t *const cb_fns, const amxd_action_t reason, amxd_action_fn_t fn)
Definition: amxd_common.c:99
enum _amxd_status amxd_status_t
@ amxd_status_ok
Definition: amxd_types.h:78
@ amxd_status_unknown_error
Definition: amxd_types.h:79
amxc_llist_it_t it
Definition: amxd_types.h:158
amxd_action_t reason
Definition: amxd_types.h:160
void * priv
Definition: amxd_types.h:161
amxd_action_fn_t fn
Definition: amxd_types.h:159
amxc_llist_t cb_fns
Definition: amxd_types.h:391
static amxd_status_t status

◆ amxd_param_enable_action_cb()

void amxd_param_enable_action_cb ( const amxd_param_t *const  param,
const amxd_action_t  reason,
amxd_action_fn_t  fn,
bool  enable 
)

Definition at line 117 of file amxd_parameter_action.c.

120  {
121 
122  amxd_dm_cb_t* cb = NULL;
123  when_null(param, exit);
124  when_null(fn, exit);
125 
126  cb = amxd_get_action(&param->cb_fns, reason, fn);
127  when_null(cb, exit);
128 
129  cb->enable = enable;
130 
131 exit:
132  return;
133 }

◆ amxd_param_get_action_cb_data()

void* amxd_param_get_action_cb_data ( amxd_param_t *const  param,
const amxd_action_t  reason,
amxd_action_fn_t  fn 
)

Definition at line 185 of file amxd_parameter_action.c.

187  {
188  amxd_dm_cb_t* cb = NULL;
189  when_null(param, exit);
190  when_null(fn, exit);
191 
192  cb = amxd_get_action(&param->cb_fns, reason, fn);
193 
194 exit:
195  if(cb != NULL) {
196  return cb->priv;
197  } else {
198  return NULL;
199  }
200 }

◆ amxd_param_has_action()

bool amxd_param_has_action ( amxd_param_t *const  param,
const amxd_action_t  reason 
)

Definition at line 152 of file amxd_parameter_action.c.

152  {
153  bool has_cb = false;
154  amxd_dm_cb_t* cb = NULL;
155  amxd_object_t* super = NULL;
156  amxd_param_t* current = NULL;
157  when_null(param, exit);
158 
159  current = param;
160  super = amxd_param_get_owner(current);
161  while(current != NULL && super != NULL) {
162  cb = amxd_get_action(&current->cb_fns, reason, NULL);
163  if(cb != NULL) {
164  has_cb = true;
165  break;
166  }
167 
169  super = amxd_object_get_parent(super);
170  } else {
171  super = (super->derived_from.llist == NULL) ?
172  NULL :
173  amxc_container_of(super->derived_from.llist,
175  derived_objects);
176  }
177 
178  current = amxd_object_get_param_def(super, amxd_param_get_name(param));
179  }
180 
181 exit:
182  return has_cb;
183 }
const char * amxd_param_get_name(const amxd_param_t *const param)
amxd_object_t * amxd_param_get_owner(const amxd_param_t *const param)
@ amxd_object_instance
Definition: amxd_types.h:186
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent 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.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
amxc_llist_it_t derived_from
Definition: amxd_types.h:249

◆ amxd_param_has_action_cb()

bool amxd_param_has_action_cb ( amxd_param_t *const  param,
const amxd_action_t  reason,
amxd_action_fn_t  fn 
)

Definition at line 135 of file amxd_parameter_action.c.

137  {
138  bool has_cb = false;
139  amxd_dm_cb_t* cb = NULL;
140  when_null(param, exit);
141  when_null(fn, exit);
142 
143  cb = amxd_get_action(&param->cb_fns, reason, fn);
144  when_null(cb, exit);
145 
146  has_cb = true;
147 
148 exit:
149  return has_cb;
150 }

◆ amxd_param_remove_action_cb()

amxd_status_t amxd_param_remove_action_cb ( amxd_param_t *const  param,
const amxd_action_t  reason,
amxd_action_fn_t  fn 
)

Definition at line 96 of file amxd_parameter_action.c.

98  {
100  amxd_dm_cb_t* cb = NULL;
101  when_null(param, exit);
102  when_null(fn, exit);
103 
104  cb = amxd_get_action(&param->cb_fns, reason, fn);
105  when_null(cb, exit);
106 
107  amxc_llist_it_take(&cb->it);
108  free(cb);
109 
111 
112 exit:
113  return status;
114 }

◆ amxd_param_set_action_cb_data()

void amxd_param_set_action_cb_data ( amxd_param_t *const  param,
const amxd_action_t  reason,
amxd_action_fn_t  fn,
void *  data 
)

Definition at line 202 of file amxd_parameter_action.c.

205  {
206  amxd_dm_cb_t* cb = NULL;
207  when_null(param, exit);
208  when_null(fn, exit);
209 
210  cb = amxd_get_action(&param->cb_fns, reason, fn);
211  if(cb != NULL) {
212  cb->priv = data;
213  }
214 
215 exit:
216  return;
217 }