libamxd  6.4.1
Data Model Manager
amxd_object.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <amxc/amxc.h>
#include <amxp/amxp.h>
#include <amxd/amxd_types.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_object_expression.h>
#include <amxd/amxd_dm.h>
#include "amxd_priv.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 void amxd_object_set_attributes (amxd_object_t *const object, const uint32_t attr)
 
static bool amxd_object_type_is_valid (const amxd_object_type_t type)
 
static bool amxd_is_valid_counter (amxd_object_t *const counter, amxd_object_t *const counted)
 
static amxd_param_tamxd_create_counter_param (amxd_object_t *const container, amxd_object_t *const counted, const char *name)
 
void amxd_object_free (amxd_object_t **object)
 Data model object destructor function. More...
 
amxd_status_t amxd_object_new (amxd_object_t **object, const amxd_object_type_t type, const char *name)
 Data model object constructor function. More...
 
amxd_status_t amxd_object_add_object (amxd_object_t *const parent, amxd_object_t *const child)
 Adds an object in the data model tree. More...
 
const char * amxd_object_get_name (const amxd_object_t *const object, const uint32_t flags)
 Get the name of the object (or index as a string for instance objects) More...
 
uint32_t amxd_object_get_index (const amxd_object_t *const object)
 Get the index of an instance object. More...
 
amxd_status_t amxd_object_set_attr (amxd_object_t *const object, const amxd_oattr_id_t attr, const bool enable)
 Sets or unsets an object attribute. More...
 
amxd_status_t amxd_object_set_attrs (amxd_object_t *const object, const uint32_t bitmask, bool enable)
 Sets or unsets object attributes using a bitmap. More...
 
uint32_t amxd_object_get_attrs (const amxd_object_t *const object)
 Gets the set attributes of an object. More...
 
bool amxd_object_is_attr_set (const amxd_object_t *const object, const amxd_oattr_id_t attr)
 Checks if an attribute is set. More...
 
amxd_status_t amxd_object_set_counter (amxd_object_t *const object, const char *name)
 
amxd_object_tamxd_object_get_base (const amxd_object_t *const object)
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxd_object.c.

Function Documentation

◆ amxd_create_counter_param()

static amxd_param_t* amxd_create_counter_param ( amxd_object_t *const  container,
amxd_object_t *const  counted,
const char *  name 
)
static

Definition at line 107 of file amxd_object.c.

109  {
110  amxd_param_t* param = NULL;
111  amxc_var_t count;
113  amxd_dm_t* dm = amxd_object_get_dm(container);
114 
115  amxc_var_init(&count);
116  when_str_empty(name, exit);
117  param = amxd_object_get_param_def(container, name);
118  if(param != NULL) {
121  param = NULL;
122  }
123  } else {
124  amxd_param_new(&param, name, AMXC_VAR_ID_UINT32);
125  status = amxd_object_add_param(container, param);
126  when_failed(status, exit);
127  param->priv = amxd_object_get_rel_path(counted, container, AMXD_OBJECT_NAMED);
131  dm);
132  }
133 
134  when_null(param, exit);
137 
138  amxc_var_set(uint32_t, &count, amxd_object_get_instance_count(counted));
139  status = amxd_param_set_value(param, &count);
140  when_failed(status, exit);
141 
143 
144 exit:
145  if(status != amxd_status_ok) {
146  amxd_param_free(&param);
147  param = NULL;
148  }
149  amxc_var_clean(&count);
150  return param;
151 }
static uint32_t amxd_object_get_instance_count(const amxd_object_t *object)
bool amxd_param_is_attr_set(const amxd_param_t *const param, const amxd_pattr_id_t attr)
amxd_status_t amxd_param_new(amxd_param_t **param, const char *name, const uint32_t type)
amxd_status_t amxd_param_set_value(amxd_param_t *const param, const amxc_var_t *const value)
amxd_status_t amxd_param_set_attr(amxd_param_t *param, const amxd_pattr_id_t attr, const bool enable)
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)
void PRIVATE amxd_param_free(amxd_param_t **param)
amxd_status_t PRIVATE amxd_param_counter_destroy(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
@ amxd_pattr_read_only
Definition: amxd_types.h:358
@ amxd_pattr_counter
Definition: amxd_types.h:361
@ action_param_destroy
Definition: amxd_types.h:116
enum _amxd_status amxd_status_t
@ amxd_status_invalid_name
Definition: amxd_types.h:86
@ amxd_status_ok
Definition: amxd_types.h:78
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
char * amxd_object_get_rel_path(const amxd_object_t *child, const amxd_object_t *parent, const uint32_t flags)
Get the relative path of the object.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.
amxd_status_t amxd_object_add_param(amxd_object_t *const object, amxd_param_t *const param)
Adds a parameter definition to an object.
static amxd_dm_t dm
static amxd_status_t status

◆ amxd_is_valid_counter()

static bool amxd_is_valid_counter ( amxd_object_t *const  counter,
amxd_object_t *const  counted 
)
static

Definition at line 92 of file amxd_object.c.

93  {
94  bool retval = false;
95 
96  when_null(counter, exit);
97  when_null(counted, exit);
98 
99  when_true(amxd_object_get_type(counted) != amxd_object_template, exit);
100 
101  retval = true;
102 
103 exit:
104  return retval;
105 }
@ 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
static int counter

◆ amxd_object_get_base()

amxd_object_t* amxd_object_get_base ( const amxd_object_t *const  object)

Definition at line 389 of file amxd_object.c.

389  {
390  amxd_object_t* base = NULL;
391 
392  when_null(object, exit);
393  when_null(object->derived_from.llist, exit);
394  base = amxc_container_of(object->derived_from.llist, amxd_object_t, derived_objects);
395 
396 exit:
397  return base;
398 }
amxc_llist_it_t derived_from
Definition: amxd_types.h:249

◆ amxd_object_set_attributes()

static void amxd_object_set_attributes ( amxd_object_t *const  object,
const uint32_t  attr 
)
static

Definition at line 77 of file amxd_object.c.

78  {
79  object->attr.read_only = IS_BIT_SET(attr, amxd_oattr_read_only);
80  object->attr.persistent = IS_BIT_SET(attr, amxd_oattr_persistent);
81  object->attr.priv = IS_BIT_SET(attr, amxd_oattr_private);
82  object->attr.prot = IS_BIT_SET(attr, amxd_oattr_protected);
83  object->attr.locked = IS_BIT_SET(attr, amxd_oattr_locked);
84 }
#define IS_BIT_SET(b, f)
Definition: amxd_common.h:66
@ amxd_oattr_read_only
Definition: amxd_types.h:199
@ amxd_oattr_locked
Definition: amxd_types.h:206
@ amxd_oattr_protected
Definition: amxd_types.h:210
@ amxd_oattr_persistent
Definition: amxd_types.h:200
@ amxd_oattr_private
Definition: amxd_types.h:202

◆ amxd_object_set_counter()

amxd_status_t amxd_object_set_counter ( amxd_object_t *const  object,
const char *  name 
)

Definition at line 362 of file amxd_object.c.

363  {
365  amxd_param_t* param = NULL;
366  amxd_object_t* container = NULL;
367 
368  container = amxd_object_get_parent(object);
369  when_true(!amxd_is_valid_counter(container, object), exit);
370  param = amxd_create_counter_param(container, object, name);
371  when_null(param, exit);
372 
373  if((amxd_object_get_type(container) == amxd_object_instance) ||
375  (amxd_object_get_type(container) == amxd_object_template)) {
377  }
378 
379 exit:
380  if(status != amxd_status_ok) {
381  if(param != NULL) {
382  free(param->priv);
383  }
384  amxd_param_free(&param);
385  }
386  return status;
387 }
static amxd_param_t * amxd_create_counter_param(amxd_object_t *const container, amxd_object_t *const counted, const char *name)
Definition: amxd_object.c:107
static bool amxd_is_valid_counter(amxd_object_t *const counter, amxd_object_t *const counted)
Definition: amxd_object.c:92
@ amxd_status_unknown_error
Definition: amxd_types.h:79
@ amxd_object_singleton
Definition: amxd_types.h:181
@ 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_object_type_is_valid()

static bool amxd_object_type_is_valid ( const amxd_object_type_t  type)
static

Definition at line 86 of file amxd_object.c.

86  {
87  return (type == amxd_object_singleton ||
88  type == amxd_object_template ||
89  type == amxd_object_mib);
90 }
@ amxd_object_mib
Definition: amxd_types.h:188