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

Go to the source code of this file.

Functions

static amxd_status_t amxd_object_add_list_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_get_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_get_instances_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_get_supported_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_set_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_add_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_del_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_describe_func (amxd_object_t *object)
 
static amxd_status_t amxd_object_add_exec_func (amxd_object_t *object)
 
void PRIVATE amxd_object_init_base (amxd_object_t *const object, const amxd_object_type_t type)
 
bool PRIVATE amxd_object_is_base (const amxd_object_t *const object)
 
amxd_status_t PRIVATE amxd_dm_base_add_funcs (amxd_object_t *object)
 
void PRIVATE amxd_dm_event (const char *signal, const amxd_object_t *const object, amxc_var_t *const data, bool trigger)
 
void PRIVATE amxd_dm_set_derived_from (amxd_object_t *const object)
 
void PRIVATE amxd_common_set_flag (amxc_var_t **flags, const char *flag)
 
void PRIVATE amxd_common_unset_flag (amxc_var_t **flags, const char *flag)
 
bool PRIVATE amxd_common_has_flag (const amxc_var_t *const flags, const char *flag)
 
void amxd_init_base (void)
 
static CONSTRUCTOR void amxd_base_objects_init (void)
 
static DESTRUCTOR void amxd_base_objects_cleanup (void)
 

Variables

static amxc_llist_t base_objects
 
static amxd_object_t base_singleton
 
static amxd_object_t base_template
 

Function Documentation

◆ amxd_base_objects_cleanup()

static DESTRUCTOR void amxd_base_objects_cleanup ( void  )
static

Definition at line 683 of file amxd_dm_priv.c.

683  {
685  amxc_var_clean(&base_singleton.events);
687  amxc_var_clean(&base_template.events);
688 }
static amxd_object_t base_template
Definition: amxd_dm_priv.c:71
static amxd_object_t base_singleton
Definition: amxd_dm_priv.c:70
PRIVATE void amxd_object_free_func_it(amxc_llist_it_t *it)
amxc_llist_t functions
Definition: amxd_types.h:245
amxc_var_t events
Definition: amxd_types.h:256

◆ amxd_base_objects_init()

static CONSTRUCTOR void amxd_base_objects_init ( void  )
static

Definition at line 679 of file amxd_dm_priv.c.

679  {
680  amxd_init_base();
681 }
void amxd_init_base(void)
Definition: amxd_dm_priv.c:665

◆ amxd_common_has_flag()

bool PRIVATE amxd_common_has_flag ( const amxc_var_t *const  flags,
const char *  flag 
)

Definition at line 652 of file amxd_dm_priv.c.

652  {
653  bool retval = false;
654  const amxc_htable_t* ht_flags = NULL;
655 
656  when_null(flags, exit);
657 
658  ht_flags = amxc_var_constcast(amxc_htable_t, flags);
659  retval = amxc_htable_contains(ht_flags, flag);
660 
661 exit:
662  return retval;
663 }

◆ amxd_common_set_flag()

void PRIVATE amxd_common_set_flag ( amxc_var_t **  flags,
const char *  flag 
)

Definition at line 617 of file amxd_dm_priv.c.

617  {
618  amxc_var_t* f = NULL;
619 
620  if((*flags) == NULL) {
621  amxc_var_new(flags);
622  amxc_var_set_type((*flags), AMXC_VAR_ID_HTABLE);
623  }
624  f = GET_ARG((*flags), flag);
625  if(f == NULL) {
626  amxc_var_add_key(bool, (*flags), flag, true);
627  } else {
628  amxc_var_set(bool, f, true);
629  }
630 
631  return;
632 }

◆ amxd_common_unset_flag()

void PRIVATE amxd_common_unset_flag ( amxc_var_t **  flags,
const char *  flag 
)

Definition at line 634 of file amxd_dm_priv.c.

634  {
635  amxc_var_t* f = NULL;
636  const amxc_htable_t* ht_flags = NULL;
637 
638  when_null((*flags), exit);
639 
640  ht_flags = amxc_var_constcast(amxc_htable_t, *flags);
641  f = GET_ARG((*flags), flag);
642  amxc_var_delete(&f);
643 
644  if(amxc_htable_is_empty(ht_flags)) {
645  amxc_var_delete(flags);
646  }
647 
648 exit:
649  return;
650 }

◆ amxd_dm_base_add_funcs()

amxd_status_t PRIVATE amxd_dm_base_add_funcs ( amxd_object_t object)

Definition at line 508 of file amxd_dm_priv.c.

508  {
510 
511  // list function
512  retval = amxd_object_add_list_func(object);
513  when_failed(retval, exit);
514 
515  // describe function
516  retval = amxd_object_add_describe_func(object);
517  when_failed(retval, exit);
518 
519  // get function
520  retval = amxd_object_add_get_func(object);
521  when_failed(retval, exit);
522 
523  // get instances function
524  retval = amxd_object_add_get_instances_func(object);
525  when_failed(retval, exit);
526 
527  // get_supported dm function
528  retval = amxd_object_add_get_supported_func(object);
529  when_failed(retval, exit);
530 
531  // set function
532  retval = amxd_object_add_set_func(object);
533  when_failed(retval, exit);
534 
535  // add (inst) function
536  retval = amxd_object_add_add_func(object);
537  when_failed(retval, exit);
538 
539  // del (inst) function
540  retval = amxd_object_add_del_func(object);
541  when_failed(retval, exit);
542 
543  // del (inst) function
544  retval = amxd_object_add_exec_func(object);
545 
546 exit:
547  return retval;
548 }
static amxd_status_t amxd_object_add_list_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:73
static amxd_status_t amxd_object_add_exec_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:432
static amxd_status_t amxd_object_add_describe_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:380
static amxd_status_t amxd_object_add_add_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:300
static amxd_status_t amxd_object_add_get_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:125
static amxd_status_t amxd_object_add_get_supported_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:206
static amxd_status_t amxd_object_add_get_instances_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:170
static amxd_status_t amxd_object_add_set_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:255
static amxd_status_t amxd_object_add_del_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:342
enum _amxd_status amxd_status_t
@ amxd_status_unknown_error
Definition: amxd_types.h:79

◆ amxd_dm_event()

void PRIVATE amxd_dm_event ( const char *  signal,
const amxd_object_t *const  object,
amxc_var_t *const  data,
bool  trigger 
)

Definition at line 550 of file amxd_dm_priv.c.

553  {
554  amxd_dm_t* dm = amxd_object_get_dm(object);
555  char* path = NULL;
556  char* epath = NULL;
557  char* index_path = NULL;
558  amxc_var_t signal_data;
559 
560  when_null(dm, exit);
561 
565  amxc_var_init(&signal_data);
566 
567  amxc_var_set_type(&signal_data, AMXC_VAR_ID_HTABLE);
568  amxc_var_add_key(cstring_t, &signal_data, "object", path);
569  amxc_var_add_key(cstring_t, &signal_data, "path", index_path);
570  amxc_var_add_key(cstring_t, &signal_data, "eobject", epath);
571  if(amxc_var_type_of(data) == AMXC_VAR_ID_HTABLE) {
572  const amxc_htable_t* table_data = amxc_var_constcast(amxc_htable_t, data);
573  amxc_htable_it_t* hit = amxc_htable_get_first(table_data);
574  while(hit) {
575  amxc_var_t* part = amxc_var_from_htable_it(hit);
576  const char* key = amxc_htable_it_get_key(hit);
577  if(GET_ARG(&signal_data, key) == NULL) {
578  amxc_var_set_key(&signal_data, key, part, AMXC_VAR_FLAG_DEFAULT);
579  } else {
580  amxc_var_delete(&part);
581  }
582  hit = amxc_htable_get_first(table_data);
583  }
584  } else {
585  amxc_var_set_key(&signal_data, "data", data, AMXC_VAR_FLAG_COPY);
586  }
587  if(trigger) {
588  amxp_sigmngr_trigger_signal(&dm->sigmngr, signal, &signal_data);
589  } else {
590  amxp_sigmngr_emit_signal(&dm->sigmngr, signal, &signal_data);
591  }
592 
593  amxc_var_clean(&signal_data);
594  free(path);
595  free(epath);
596  free(index_path);
597 
598 exit:
599  return;
600 }
#define AMXD_OBJECT_INDEXED
Name and path format flag - use index for instance objects.
Definition: amxd_object.h:176
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
#define AMXD_OBJECT_EXTENDED
Path format flag - set name or index of instrance objects between '[' and ']'.
Definition: amxd_object.h:188
#define AMXD_OBJECT_TERMINATE
Path format flag - when set the object path is terminated with a dot.
Definition: amxd_object.h:214
amxd_object_t amxd_status_t amxd_status_t char * amxd_object_get_path(const amxd_object_t *object, const uint32_t flags)
Get the full path of the object.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxp_signal_mngr_t sigmngr
Definition: amxd_types.h:261
static amxd_dm_t dm

◆ amxd_dm_set_derived_from()

void PRIVATE amxd_dm_set_derived_from ( amxd_object_t *const  object)

Definition at line 602 of file amxd_dm_priv.c.

602  {
604  switch(type) {
606  case amxd_object_root:
607  amxc_llist_append(&base_singleton.derived_objects, &object->derived_from);
608  break;
610  amxc_llist_append(&base_template.derived_objects, &object->derived_from);
611  break;
612  default:
613  break;
614  }
615 }
enum _amxd_object_type amxd_object_type_t
The different object types.
@ amxd_object_root
Definition: amxd_types.h:178
@ amxd_object_template
Definition: amxd_types.h:183
@ amxd_object_singleton
Definition: amxd_types.h:181
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_t derived_objects
Definition: amxd_types.h:248
amxc_llist_it_t derived_from
Definition: amxd_types.h:249

◆ amxd_init_base()

void amxd_init_base ( void  )

Definition at line 665 of file amxd_dm_priv.c.

665  {
666  if(amxc_llist_is_empty(&base_singleton.functions)) {
667  amxc_llist_init(&base_objects);
668 
671  amxc_llist_append(&base_objects, &base_singleton.it);
672 
674  amxc_llist_append(&base_objects, &base_template.it);
676  }
677 }
static amxc_llist_t base_objects
Definition: amxd_dm_priv.c:69
void PRIVATE amxd_object_init_base(amxd_object_t *const object, const amxd_object_type_t type)
Definition: amxd_dm_priv.c:472
amxd_status_t PRIVATE amxd_dm_base_add_funcs(amxd_object_t *object)
Definition: amxd_dm_priv.c:508
amxc_llist_it_t it
Definition: amxd_types.h:230

◆ amxd_object_add_add_func()

static amxd_status_t amxd_object_add_add_func ( amxd_object_t object)
static

Definition at line 300 of file amxd_dm_priv.c.

300  {
302  amxc_var_t def_val;
303  amxd_function_t* func = NULL;
304 
305  amxc_var_init(&def_val);
306 
307  retval = amxd_function_new(&func, "_add", AMXC_VAR_ID_NULL, amxd_object_func_add);
308  when_failed(retval, exit);
312  retval = amxd_function_new_arg(func, "parameters", AMXC_VAR_ID_HTABLE, NULL);
313  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_strict, true);
314  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_in, true);
315  when_failed(retval, exit);
316  retval = amxd_function_new_arg(func, "index", AMXC_VAR_ID_UINT32, NULL);
317  amxd_function_arg_set_attr(func, "index", amxd_aattr_in, true);
318  when_failed(retval, exit);
319  retval = amxd_function_new_arg(func, "name", AMXC_VAR_ID_CSTRING, NULL);
320  amxd_function_arg_set_attr(func, "name", amxd_aattr_in, true);
321  when_failed(retval, exit);
322  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
323  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
324  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
325  when_failed(retval, exit);
326  amxc_var_set(cstring_t, &def_val, "");
327  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
328  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
329  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
330  when_failed(retval, exit);
331 
332  retval = amxd_object_add_function(object, func);
333 
334 exit:
335  if(retval != 0) {
336  amxd_function_delete(&func);
337  }
338  amxc_var_clean(&def_val);
339  return retval;
340 }
amxd_status_t amxd_object_func_add(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)
@ amxd_fattr_template
Definition: amxd_types.h:311
@ amxd_fattr_protected
Definition: amxd_types.h:317
@ amxd_fattr_instance
Definition: amxd_types.h:312
@ amxd_aattr_strict
Definition: amxd_types.h:286
@ amxd_aattr_in
Definition: amxd_types.h:283
@ amxd_dm_access_protected
Definition: amxd_types.h:139
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_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.
void amxd_function_delete(amxd_function_t **func)
Data model RPC method destructor function.
amxd_status_t amxd_function_arg_set_attr(amxd_function_t *const func, const char *name, const amxd_aattr_id_t attr, const bool enable)
Sets or unsets a method argument attribute.
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.
amxd_status_t amxd_function_new_arg(amxd_function_t *func, const char *name, const uint32_t type, amxc_var_t *default_value)
Adds an argument definition to a RPC method definition.
RPC method structure.
Definition: amxd_types.h:341

◆ amxd_object_add_del_func()

static amxd_status_t amxd_object_add_del_func ( amxd_object_t object)
static

Definition at line 342 of file amxd_dm_priv.c.

342  {
344  amxc_var_t def_val;
345  amxd_function_t* func = NULL;
346 
347  amxc_var_init(&def_val);
348 
349  retval = amxd_function_new(&func, "_del", AMXC_VAR_ID_NULL, amxd_object_func_del);
350  when_failed(retval, exit);
354  retval = amxd_function_new_arg(func, "index", AMXC_VAR_ID_UINT32, NULL);
355  amxd_function_arg_set_attr(func, "index", amxd_aattr_in, true);
356  when_failed(retval, exit);
357  retval = amxd_function_new_arg(func, "name", AMXC_VAR_ID_CSTRING, NULL);
358  amxd_function_arg_set_attr(func, "name", amxd_aattr_in, true);
359  when_failed(retval, exit);
360  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
361  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
362  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
363  when_failed(retval, exit);
364  amxc_var_set(cstring_t, &def_val, "");
365  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
366  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
367  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
368  when_failed(retval, exit);
369 
370  retval = amxd_object_add_function(object, func);
371 
372 exit:
373  if(retval != 0) {
374  amxd_function_delete(&func);
375  }
376  amxc_var_clean(&def_val);
377  return retval;
378 }
amxd_status_t amxd_object_func_del(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)

◆ amxd_object_add_describe_func()

static amxd_status_t amxd_object_add_describe_func ( amxd_object_t object)
static

Definition at line 380 of file amxd_dm_priv.c.

380  {
382  amxd_function_t* func = NULL;
383  amxc_var_t def_val;
384 
385  amxc_var_init(&def_val);
386  amxc_var_set(bool, &def_val, false);
387 
388  retval = amxd_function_new(&func, "_describe", AMXC_VAR_ID_HTABLE, amxd_object_func_describe);
389  when_failed(retval, exit);
393  retval = amxd_function_new_arg(func, "parameters", AMXC_VAR_ID_BOOL, &def_val);
394  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_in, true);
395  when_failed(retval, exit);
396  retval = amxd_function_new_arg(func, "functions", AMXC_VAR_ID_BOOL, &def_val);
397  amxd_function_arg_set_attr(func, "functions", amxd_aattr_in, true);
398  when_failed(retval, exit);
399  retval = amxd_function_new_arg(func, "objects", AMXC_VAR_ID_BOOL, &def_val);
400  amxd_function_arg_set_attr(func, "objects", amxd_aattr_in, true);
401  when_failed(retval, exit);
402  retval = amxd_function_new_arg(func, "instances", AMXC_VAR_ID_BOOL, &def_val);
403  amxd_function_arg_set_attr(func, "instances", amxd_aattr_in, true);
404  when_failed(retval, exit);
405  retval = amxd_function_new_arg(func, "exists", AMXC_VAR_ID_BOOL, &def_val);
406  amxd_function_arg_set_attr(func, "exists", amxd_aattr_in, true);
407  when_failed(retval, exit);
408  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
409  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
410  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
411  when_failed(retval, exit);
412  amxc_var_set(cstring_t, &def_val, "");
413  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
414  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
415  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
416  when_failed(retval, exit);
417  amxc_var_set(bool, &def_val, false);
418  retval = amxd_function_new_arg(func, "events", AMXC_VAR_ID_BOOL, &def_val);
419  amxd_function_arg_set_attr(func, "events", amxd_aattr_in, true);
420  when_failed(retval, exit);
421 
422  retval = amxd_object_add_function(object, func);
423 
424 exit:
425  if(retval != 0) {
426  amxd_function_delete(&func);
427  }
428  amxc_var_clean(&def_val);
429  return retval;
430 }
amxd_status_t amxd_object_func_describe(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)

◆ amxd_object_add_exec_func()

static amxd_status_t amxd_object_add_exec_func ( amxd_object_t object)
static

Definition at line 432 of file amxd_dm_priv.c.

432  {
434  amxd_function_t* func = NULL;
435  amxc_var_t def_val;
436 
437  amxc_var_init(&def_val);
438  amxc_var_set(bool, &def_val, false);
439 
440  retval = amxd_function_new(&func, "_exec", AMXC_VAR_ID_ANY, amxd_object_func_exec);
441  when_failed(retval, exit);
445  retval = amxd_function_new_arg(func, "method", AMXC_VAR_ID_CSTRING, NULL);
446  amxd_function_arg_set_attr(func, "method", amxd_aattr_in, true);
447  amxd_function_arg_set_attr(func, "method", amxd_aattr_mandatory, true);
448  amxd_function_arg_set_attr(func, "method", amxd_aattr_strict, true);
449  when_failed(retval, exit);
450  amxc_var_set_type(&def_val, AMXC_VAR_ID_HTABLE);
451  retval = amxd_function_new_arg(func, "args", AMXC_VAR_ID_HTABLE, &def_val);
452  amxd_function_arg_set_attr(func, "args", amxd_aattr_in, true);
453  amxd_function_arg_set_attr(func, "args", amxd_aattr_out, true);
454  amxd_function_arg_set_attr(func, "args", amxd_aattr_strict, true);
455  when_failed(retval, exit);
456  amxc_var_set(cstring_t, &def_val, "");
457  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
458  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
459  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
460  when_failed(retval, exit);
461 
462  retval = amxd_object_add_function(object, func);
463 
464 exit:
465  if(retval != 0) {
466  amxd_function_delete(&func);
467  }
468  amxc_var_clean(&def_val);
469  return retval;
470 }
amxd_status_t amxd_object_func_exec(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)
@ amxd_aattr_mandatory
Definition: amxd_types.h:285
@ amxd_aattr_out
Definition: amxd_types.h:284

◆ amxd_object_add_get_func()

static amxd_status_t amxd_object_add_get_func ( amxd_object_t object)
static

Definition at line 125 of file amxd_dm_priv.c.

125  {
127  amxc_var_t def_val;
128  amxd_function_t* func = NULL;
129 
130  amxc_var_init(&def_val);
131  amxc_var_set(cstring_t, &def_val, ".");
132 
133  retval = amxd_function_new(&func, "_get", AMXC_VAR_ID_HTABLE, amxd_object_func_get);
134  when_failed(retval, exit);
138  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
139  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
140  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
141  amxc_var_set_type(&def_val, AMXC_VAR_ID_LIST);
142  when_failed(retval, exit);
143  retval = amxd_function_new_arg(func, "parameters", AMXC_VAR_ID_LIST, &def_val);
144  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_in, true);
145  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_strict, true);
146  when_failed(retval, exit);
147  amxc_var_set(uint32_t, &def_val, 0);
148  retval = amxd_function_new_arg(func, "depth", AMXC_VAR_ID_INT32, &def_val);
149  amxd_function_arg_set_attr(func, "depth", amxd_aattr_in, true);
150  when_failed(retval, exit);
151  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
152  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
153  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
154  when_failed(retval, exit);
155  retval = amxd_function_new_arg(func, "filter", AMXC_VAR_ID_CSTRING, NULL);
156  amxd_function_arg_set_attr(func, "filter", amxd_aattr_in, true);
157  amxd_function_arg_set_attr(func, "filter", amxd_aattr_strict, true);
158  when_failed(retval, exit);
159 
160  retval = amxd_object_add_function(object, func);
161 
162 exit:
163  if(retval != 0) {
164  amxd_function_delete(&func);
165  }
166  amxc_var_clean(&def_val);
167  return retval;
168 }
amxd_status_t amxd_object_func_get(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)

◆ amxd_object_add_get_instances_func()

static amxd_status_t amxd_object_add_get_instances_func ( amxd_object_t object)
static

Definition at line 170 of file amxd_dm_priv.c.

170  {
172  amxc_var_t def_val;
173  amxd_function_t* func = NULL;
174 
175  amxc_var_init(&def_val);
176  amxc_var_set(cstring_t, &def_val, ".");
177 
178  retval = amxd_function_new(&func, "_get_instances", AMXC_VAR_ID_HTABLE, amxd_object_func_get_instances);
179  when_failed(retval, exit);
183  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
184  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
185  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
186  when_failed(retval, exit);
187  amxc_var_set(uint32_t, &def_val, 0);
188  retval = amxd_function_new_arg(func, "depth", AMXC_VAR_ID_INT32, &def_val);
189  amxd_function_arg_set_attr(func, "depth", amxd_aattr_in, true);
190  when_failed(retval, exit);
191  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
192  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
193  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
194  when_failed(retval, exit);
195 
196  retval = amxd_object_add_function(object, func);
197 
198 exit:
199  if(retval != 0) {
200  amxd_function_delete(&func);
201  }
202  amxc_var_clean(&def_val);
203  return retval;
204 }
amxd_status_t amxd_object_func_get_instances(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)

◆ amxd_object_add_get_supported_func()

static amxd_status_t amxd_object_add_get_supported_func ( amxd_object_t object)
static

Definition at line 206 of file amxd_dm_priv.c.

206  {
208  amxc_var_t def_val;
209  amxd_function_t* func = NULL;
210 
211  amxc_var_init(&def_val);
212  amxc_var_set(bool, &def_val, true);
213 
214  retval = amxd_function_new(&func,
215  "_get_supported",
216  AMXC_VAR_ID_HTABLE,
218  when_failed(retval, exit);
222  retval = amxd_function_new_arg(func, "first_level_only", AMXC_VAR_ID_BOOL, &def_val);
223  amxd_function_arg_set_attr(func, "first_level_only", amxd_aattr_in, true);
224  when_failed(retval, exit);
225  amxc_var_set(bool, &def_val, false);
226  retval = amxd_function_new_arg(func, "parameters", AMXC_VAR_ID_BOOL, &def_val);
227  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_in, true);
228  when_failed(retval, exit);
229  retval = amxd_function_new_arg(func, "functions", AMXC_VAR_ID_BOOL, &def_val);
230  amxd_function_arg_set_attr(func, "functions", amxd_aattr_in, true);
231  when_failed(retval, exit);
232  retval = amxd_function_new_arg(func, "events", AMXC_VAR_ID_BOOL, &def_val);
233  amxd_function_arg_set_attr(func, "events", amxd_aattr_in, true);
234  when_failed(retval, exit);
235  amxc_var_set(cstring_t, &def_val, "");
236  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
237  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
238  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
239  when_failed(retval, exit);
240  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
241  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
242  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
243  when_failed(retval, exit);
244 
245  retval = amxd_object_add_function(object, func);
246 
247 exit:
248  if(retval != 0) {
249  amxd_function_delete(&func);
250  }
251  amxc_var_clean(&def_val);
252  return retval;
253 }
amxd_status_t amxd_object_func_get_supported(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)

◆ amxd_object_add_list_func()

static amxd_status_t amxd_object_add_list_func ( amxd_object_t object)
static

Definition at line 73 of file amxd_dm_priv.c.

73  {
75  amxc_var_t def_val;
76  amxd_function_t* func = NULL;
77 
78  amxc_var_init(&def_val);
79  amxc_var_set(bool, &def_val, true);
80 
81  retval = amxd_function_new(&func, "_list", AMXC_VAR_ID_HTABLE, amxd_object_func_list);
82  when_failed(retval, exit);
86  retval = amxd_function_new_arg(func, "parameters", AMXC_VAR_ID_BOOL, &def_val);
87  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_in, true);
88  when_failed(retval, exit);
89  retval = amxd_function_new_arg(func, "functions", AMXC_VAR_ID_BOOL, &def_val);
90  amxd_function_arg_set_attr(func, "functions", amxd_aattr_in, true);
91  when_failed(retval, exit);
92  retval = amxd_function_new_arg(func, "objects", AMXC_VAR_ID_BOOL, &def_val);
93  amxd_function_arg_set_attr(func, "objects", amxd_aattr_in, true);
94  when_failed(retval, exit);
95  retval = amxd_function_new_arg(func, "instances", AMXC_VAR_ID_BOOL, &def_val);
96  amxd_function_arg_set_attr(func, "instances", amxd_aattr_in, true);
97  when_failed(retval, exit);
98  retval = amxd_function_new_arg(func, "template_info", AMXC_VAR_ID_BOOL, &def_val);
99  amxd_function_arg_set_attr(func, "template_info", amxd_aattr_in, true);
100  when_failed(retval, exit);
101  amxc_var_set(bool, &def_val, false);
102  retval = amxd_function_new_arg(func, "events", AMXC_VAR_ID_BOOL, &def_val);
103  amxd_function_arg_set_attr(func, "events", amxd_aattr_in, true);
104  when_failed(retval, exit);
105  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
106  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
107  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
108  when_failed(retval, exit);
109  amxc_var_set(cstring_t, &def_val, "");
110  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
111  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
112  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
113  when_failed(retval, exit);
114 
115  retval = amxd_object_add_function(object, func);
116 
117 exit:
118  if(retval != 0) {
119  amxd_function_delete(&func);
120  }
121  amxc_var_clean(&def_val);
122  return retval;
123 }
amxd_status_t amxd_object_func_list(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)

◆ amxd_object_add_set_func()

static amxd_status_t amxd_object_add_set_func ( amxd_object_t object)
static

Definition at line 255 of file amxd_dm_priv.c.

255  {
257  amxc_var_t def_val;
258  amxd_function_t* func = NULL;
259 
260  amxc_var_init(&def_val);
261 
262  retval = amxd_function_new(&func, "_set", AMXC_VAR_ID_NULL, amxd_object_func_set);
263  when_failed(retval, exit);
267  amxc_var_set_type(&def_val, AMXC_VAR_ID_HTABLE);
268  retval = amxd_function_new_arg(func, "parameters", AMXC_VAR_ID_HTABLE, &def_val);
269  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_strict, true);
270  amxd_function_arg_set_attr(func, "parameters", amxd_aattr_in, true);
271  when_failed(retval, exit);
272  retval = amxd_function_new_arg(func, "oparameters", AMXC_VAR_ID_HTABLE, &def_val);
273  amxd_function_arg_set_attr(func, "oparameters", amxd_aattr_strict, true);
274  amxd_function_arg_set_attr(func, "oparameters", amxd_aattr_in, true);
275  when_failed(retval, exit);
276  amxc_var_set(uint32_t, &def_val, amxd_dm_access_protected);
277  retval = amxd_function_new_arg(func, "access", AMXC_VAR_ID_UINT32, &def_val);
278  amxd_function_arg_set_attr(func, "access", amxd_aattr_in, true);
279  when_failed(retval, exit);
280  amxc_var_set(cstring_t, &def_val, "");
281  retval = amxd_function_new_arg(func, "rel_path", AMXC_VAR_ID_CSTRING, &def_val);
282  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_in, true);
283  amxd_function_arg_set_attr(func, "rel_path", amxd_aattr_strict, true);
284  when_failed(retval, exit);
285  amxc_var_set(bool, &def_val, false);
286  retval = amxd_function_new_arg(func, "allow_partial", AMXC_VAR_ID_BOOL, &def_val);
287  amxd_function_arg_set_attr(func, "allow_partial", amxd_aattr_in, true);
288  when_failed(retval, exit);
289 
290  retval = amxd_object_add_function(object, func);
291 
292 exit:
293  if(retval != 0) {
294  amxd_function_delete(&func);
295  }
296  amxc_var_clean(&def_val);
297  return retval;
298 }
amxd_status_t amxd_object_func_set(amxd_object_t *object, amxd_function_t *func, amxc_var_t *args, amxc_var_t *ret)

◆ amxd_object_init_base()

void PRIVATE amxd_object_init_base ( amxd_object_t *const  object,
const amxd_object_type_t  type 
)

Definition at line 472 of file amxd_dm_priv.c.

473  {
474  amxc_llist_it_init(&object->it);
475 
476  object->type = type;
477  object->attr.read_only = 0;
478  object->attr.priv = 0;
479  object->attr.prot = 0;
480  object->attr.persistent = 0;
481  object->attr.locked = 0;
482 
483  object->index = 0;
484  object->last_index = 0;
485 
486  object->name = NULL;
487  object->index_name = NULL;
488 
489  amxc_llist_init(&object->objects);
490  amxc_llist_init(&object->instances);
491  amxc_llist_init(&object->functions);
492  amxc_llist_init(&object->parameters);
493  amxc_var_init(&object->events);
494  amxc_var_set_type(&object->events, AMXC_VAR_ID_HTABLE);
495 
496  amxc_llist_init(&object->cb_fns);
497 
498  amxc_llist_init(&object->derived_objects);
499  amxc_llist_it_init(&object->derived_from);
500 
501  amxc_array_init(&object->mib_names, 0);
502 }
amxc_llist_t cb_fns
Definition: amxd_types.h:253
amxc_llist_t objects
Definition: amxd_types.h:243
amxc_array_t mib_names
Definition: amxd_types.h:254
amxc_llist_t instances
Definition: amxd_types.h:244
amxc_llist_t parameters
Definition: amxd_types.h:246

◆ amxd_object_is_base()

bool PRIVATE amxd_object_is_base ( const amxd_object_t *const  object)

Definition at line 504 of file amxd_dm_priv.c.

504  {
505  return ((object == &base_singleton) || (object == &base_template));
506 }

Variable Documentation

◆ base_objects

amxc_llist_t base_objects
static

Definition at line 69 of file amxd_dm_priv.c.

◆ base_singleton

amxd_object_t base_singleton
static

Definition at line 70 of file amxd_dm_priv.c.

◆ base_template

amxd_object_t base_template
static

Definition at line 71 of file amxd_dm_priv.c.