libamxd  6.4.1
Data Model Manager
amxd_object_expression.h File Reference

Go to the source code of this file.

Functions

amxp_expr_status_t amxd_object_expr_get_field (amxp_expr_t *expr, amxc_var_t *value, const char *path, void *priv)
 
amxd_status_t amxd_object_new_key_expr (amxd_object_t *const templ, amxp_expr_t **expr, const amxc_var_t *const data)
 
amxd_object_tamxd_object_find_instance (const amxd_object_t *const templ, amxp_expr_t *expr)
 
amxd_object_tamxd_object_find_next_instance (const amxd_object_t *const instance, amxp_expr_t *expr)
 
bool amxd_object_has_matching_instances (const amxd_object_t *const templ, amxp_expr_t *expr)
 
bool amxd_object_has_keys (amxd_object_t *const instance)
 
bool amxd_object_matches_expr (amxd_object_t *const object, amxp_expr_t *expr)
 

Function Documentation

◆ amxd_object_expr_get_field()

amxp_expr_status_t amxd_object_expr_get_field ( amxp_expr_t *  expr,
amxc_var_t *  value,
const char *  path,
void *  priv 
)

◆ amxd_object_find_instance()

amxd_object_t* amxd_object_find_instance ( const amxd_object_t *const  templ,
amxp_expr_t *  expr 
)

Definition at line 226 of file amxd_object_expression.c.

227  {
228  amxd_object_t* instance = NULL;
229 
230  when_null(templ, exit);
231  when_true(amxd_object_get_type(templ) != amxd_object_template, exit);
232  when_null(expr, exit);
233 
234  amxd_object_for_each(instance, it, templ) {
235  instance = amxc_container_of(it, amxd_object_t, it);
236  if(amxd_object_matches_expr(instance, expr)) {
237  break;
238  }
239  instance = NULL;
240  }
241 
242 exit:
243  return instance;
244 }
bool amxd_object_matches_expr(amxd_object_t *const object, amxp_expr_t *expr)
@ amxd_object_template
Definition: amxd_types.h:183
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
#define amxd_object_for_each(type, it, object)
Helper macro for iterating object content.
Definition: amxd_object.h:113

◆ amxd_object_find_next_instance()

amxd_object_t* amxd_object_find_next_instance ( const amxd_object_t *const  instance,
amxp_expr_t *  expr 
)

Definition at line 246 of file amxd_object_expression.c.

247  {
248  amxd_object_t* inst = NULL;
249  amxc_llist_it_t* it = NULL;
250 
251  when_null(instance, exit);
252  when_true(amxd_object_get_type(instance) != amxd_object_instance, exit);
253  when_null(expr, exit);
254 
255  it = amxc_llist_it_get_next(&instance->it);
256  while(it) {
257  inst = amxc_container_of(it, amxd_object_t, it);
258  if(amxd_object_matches_expr(inst, expr)) {
259  break;
260  }
261  it = amxc_llist_it_get_next(it);
262  inst = NULL;
263  }
264 
265 exit:
266  return inst;
267 }
@ amxd_object_instance
Definition: amxd_types.h:186
amxc_llist_it_t it
Definition: amxd_types.h:230

◆ amxd_object_has_keys()

bool amxd_object_has_keys ( amxd_object_t *const  instance)

Definition at line 278 of file amxd_object_expression.c.

278  {
279  bool retval = false;
280  amxc_var_t params;
281  const amxc_htable_t* ht_params = NULL;
282 
283  amxc_var_init(&params);
284 
285  when_null(instance, exit);
286  when_true(amxd_object_get_type(instance) != amxd_object_instance &&
288  exit);
289 
290  when_failed(amxd_object_describe_params(instance, &params, amxd_dm_access_public), exit);
291  ht_params = amxc_var_constcast(amxc_htable_t, &params);
292  amxc_htable_for_each(it, ht_params) {
293  amxc_var_t* param = amxc_var_from_htable_it(it);
294  if(amxc_var_constcast(bool, GET_FIELD(param, "attributes.key"))) {
295  retval = true;
296  break;
297  }
298  }
299 
300 exit:
301  amxc_var_clean(&params);
302  return retval;
303 }
amxd_status_t amxd_object_describe_params(amxd_object_t *const object, amxc_var_t *const value, amxd_dm_access_t access)
#define GET_FIELD(var, field)
Definition: amxd_priv.h:76
@ amxd_dm_access_public
Definition: amxd_types.h:136

◆ amxd_object_has_matching_instances()

bool amxd_object_has_matching_instances ( const amxd_object_t *const  templ,
amxp_expr_t *  expr 
)

Definition at line 269 of file amxd_object_expression.c.

270  {
271  bool retval = false;
272 
273  retval = (amxd_object_find_instance(templ, expr) != NULL);
274 
275  return retval;
276 }
amxd_object_t * amxd_object_find_instance(const amxd_object_t *const templ, amxp_expr_t *expr)

◆ amxd_object_matches_expr()

bool amxd_object_matches_expr ( amxd_object_t *const  object,
amxp_expr_t *  expr 
)

Definition at line 305 of file amxd_object_expression.c.

306  {
307  bool retval = false;
308 
309  when_null(object, exit);
310  when_null(expr, exit);
311 
312  retval = amxp_expr_evaluate(expr, amxd_object_expr_get_field, object, NULL);
313 
314 exit:
315  return retval;
316 }
amxp_expr_status_t amxd_object_expr_get_field(UNUSED amxp_expr_t *expr, amxc_var_t *value, const char *path, void *priv)

◆ amxd_object_new_key_expr()

amxd_status_t amxd_object_new_key_expr ( amxd_object_t *const  templ,
amxp_expr_t **  expr,
const amxc_var_t *const  data 
)

Definition at line 205 of file amxd_object_expression.c.

207  {
209  const amxc_htable_t* ht_data = NULL;
210  amxc_var_t params;
211 
212  amxc_var_init(&params);
213  when_null(data, exit);
214  when_true(amxc_var_type_of(data) != AMXC_VAR_ID_HTABLE, exit);
215  when_true(amxd_object_get_type(templ) != amxd_object_template, exit);
216 
217  when_failed(amxd_object_describe_key_params(templ, &params, amxd_dm_access_public), exit);
218  ht_data = amxc_var_constcast(amxc_htable_t, data);
219  status = amxd_object_build_key_expr(&params, expr, ht_data);
220 
221 exit:
222  amxc_var_clean(&params);
223  return status;
224 }
amxd_status_t PRIVATE amxd_object_build_key_expr(amxc_var_t *const templ_params, amxp_expr_t **expr, const amxc_htable_t *const data)
amxd_status_t amxd_object_describe_key_params(amxd_object_t *const object, amxc_var_t *const value, amxd_dm_access_t access)
enum _amxd_status amxd_status_t
@ amxd_status_unknown_error
Definition: amxd_types.h:79
static amxd_status_t status