libamxd  6.4.1
Data Model Manager
amxd_action_object_validate.c File Reference
#include "amxd_priv.h"
#include <amxd/amxd_dm.h>
#include <amxd/amxd_action.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_object_expression.h>
#include "amxd_assert.h"

Go to the source code of this file.

Functions

static bool amxd_object_validate_filter (UNUSED amxd_object_t *const object, UNUSED int32_t depth, void *priv)
 
static void amxd_object_validate_impl (amxd_object_t *const object, UNUSED int32_t depth, void *priv)
 
static amxd_status_t is_instance_unique (amxd_object_t *object)
 
amxd_status_t amxd_action_object_validate (amxd_object_t *const object, UNUSED amxd_param_t *const p, amxd_action_t reason, UNUSED const amxc_var_t *const args, UNUSED amxc_var_t *const retval, UNUSED void *priv)
 
amxd_status_t amxd_object_validate (amxd_object_t *const object, int32_t depth)
 

Function Documentation

◆ amxd_action_object_validate()

amxd_status_t amxd_action_object_validate ( amxd_object_t *const  object,
UNUSED amxd_param_t *const  p,
amxd_action_t  reason,
UNUSED const amxc_var_t *const  args,
UNUSED amxc_var_t *const  retval,
UNUSED void *  priv 
)

Definition at line 110 of file amxd_action_object_validate.c.

115  {
117  when_null(object, exit);
118  when_true_status(reason != action_object_validate,
119  exit,
121 
123  status = is_instance_unique(object);
124  } else {
126  }
127 
128 exit:
129  return status;
130 }
static amxd_status_t is_instance_unique(amxd_object_t *object)
@ action_object_validate
Definition: amxd_types.h:119
enum _amxd_status amxd_status_t
@ amxd_status_function_not_implemented
Definition: amxd_types.h:83
@ amxd_status_ok
Definition: amxd_types.h:78
@ amxd_status_unknown_error
Definition: amxd_types.h:79
@ amxd_object_instance
Definition: amxd_types.h:186
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 amxd_status_t status

◆ amxd_object_validate()

amxd_status_t amxd_object_validate ( amxd_object_t *const  object,
int32_t  depth 
)

Definition at line 132 of file amxd_action_object_validate.c.

133  {
135 
136  when_null(object, exit);
137 
142  depth,
143  &status);
144 
145 exit:
146  return status;
147 }
static void amxd_object_validate_impl(amxd_object_t *const object, UNUSED int32_t depth, void *priv)
static bool amxd_object_validate_filter(UNUSED amxd_object_t *const object, UNUSED int32_t depth, void *priv)
@ amxd_direction_down
Definition: amxd_types.h:216
void amxd_object_hierarchy_walk(amxd_object_t *const object, const amxd_direction_t direction, amxd_object_filter_fn_t filter, amxd_object_cb_fn_t cb, int32_t depth, void *priv)
Iterates over all objects in the data model tree.

◆ amxd_object_validate_filter()

static bool amxd_object_validate_filter ( UNUSED amxd_object_t *const  object,
UNUSED int32_t  depth,
void *  priv 
)
static

Definition at line 64 of file amxd_action_object_validate.c.

66  {
68  return (*status == amxd_status_ok);
69 }

◆ amxd_object_validate_impl()

static void amxd_object_validate_impl ( amxd_object_t *const  object,
UNUSED int32_t  depth,
void *  priv 
)
static

Definition at line 71 of file amxd_action_object_validate.c.

73  {
75  *status = amxd_dm_invoke_action(object,
76  NULL,
78  NULL,
79  NULL);
80 }
amxd_status_t amxd_dm_invoke_action(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Definition: amxd_dm.c:591

◆ is_instance_unique()

static amxd_status_t is_instance_unique ( amxd_object_t object)
static

Definition at line 82 of file amxd_action_object_validate.c.

82  {
83  amxd_object_t* matching_obj = NULL;
85  amxd_object_t* templ = amxd_object_get_parent(object);
86  amxp_expr_t* expr = NULL;
87  amxc_var_t data;
88  amxc_var_init(&data);
89 
91  amxd_object_new_key_expr(templ, &expr, &data);
92 
93  // if no key parameters are defined in the template object the expression will be NULL
94  when_null(expr, exit);
95 
96  matching_obj = amxd_object_find_instance(templ, expr);
97  if(matching_obj == object) {
98  matching_obj = amxd_object_find_next_instance(matching_obj, expr);
99  }
100  when_true_status(matching_obj != NULL, exit, retval = amxd_status_duplicate);
101 
102 exit:
103  amxc_var_clean(&data);
104  amxp_expr_delete(&expr);
105 
106  return retval;
107 }
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_t * amxd_object_find_next_instance(const amxd_object_t *const instance, amxp_expr_t *expr)
amxd_object_t * amxd_object_find_instance(const amxd_object_t *const templ, amxp_expr_t *expr)
amxd_status_t amxd_object_get_key_params(amxd_object_t *const object, amxc_var_t *const params, amxd_dm_access_t access)
@ amxd_status_duplicate
Definition: amxd_types.h:91
@ amxd_dm_access_private
Definition: amxd_types.h:141
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent object.