DTNMA Reference Tools v2.1.0 - 13.gc5c0bac
Delay-Tolerant Networking Management Architecture (DTNMA) Tool Suite
Loading...
Searching...
No Matches
typing.c File Reference
#include "typing.h"
#include "lookup.h"
#include "semtype.h"
#include "cace/ari/type.h"
#include "cace/ari/algo.h"
#include "cace/ari/text.h"
#include "cace/util/defs.h"
#include "cace/util/logging.h"
#include "cace/config.h"
#include <m-dict.h>
#include <pthread.h>
#include <math.h>
#include <float.h>
#include <fenv.h>
+ Include dependency graph for typing.c:

Data Structures

struct  cace_ari_type_anyint_constraints_t
 Limitations for integer ARI types. More...
 
struct  cace_ari_type_anyfloat_constraints_t
 Limitations for REAL* ARI types. More...
 

Macros

#define BUILTIN_ANYINT_EXTRACT(valtype, setter)
 

Functions

static void builtin_ari_name (const cace_amm_type_t *self, cace_ari_t *name)
 Name any builtin type.
 
static cace_amm_type_match_res_t builtin_common_lit_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 Implement common match logic.
 
static bool builtin_common_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 Implement common conversion logic.
 
static void cace_ari_force_lit_type (cace_ari_t *out, cace_ari_type_t ari_type)
 
static cace_amm_type_match_res_t builtin_literal_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static cace_amm_type_match_res_t builtin_default_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_default_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 A default convert function that simply copies a value that matches using the type object, and copies the undefined value unconditionally.
 
static cace_amm_type_match_res_t builtin_null_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_null_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_bool_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_bool_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static bool builtin_anyint_constraints (const cace_ari_type_anyint_constraints_t *cnst, const cace_ari_t *ari)
 
static bool builtin_anyfloat_constraints (const cace_ari_type_anyfloat_constraints_t *cnst, double *out, const cace_ari_t *ari)
 
static cace_amm_type_match_res_t builtin_byte_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_byte_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_int_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_int_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_uint_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_uint_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_vast_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_vast_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_uvast_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_uvast_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_real32_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_real32_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_real64_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static int builtin_real64_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static bool builtin_time_constraints (struct timespec *out, const cace_ari_t *ari)
 
static int builtin_time_convert (const cace_amm_type_t *self, cace_ari_t *out, const cace_ari_t *in)
 
static cace_amm_type_match_res_t builtin_textstr_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static cace_amm_type_match_res_t builtin_bytestr_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static cace_amm_type_match_res_t builtin_idseg_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static cace_amm_type_match_res_t builtin_object_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static cace_amm_type_match_res_t builtin_namespace_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
static cace_amm_type_match_res_t builtin_common_objref_match (const cace_amm_type_t *self, const cace_ari_t *ari)
 
void cace_amm_builtin_dict_init (void)
 Initializer for cace_amm_builtin_dict.
 
const cace_amm_type_t * cace_amm_type_get_builtin (cace_ari_type_t ari_type)
 Get a built-in type object.
 
void cace_amm_type_init (cace_amm_type_t *type)
 Initialize a type object to a default, invalid state.
 
void cace_amm_type_deinit (cace_amm_type_t *type)
 Free any resources associated with a semantic type.
 
void cace_amm_type_reset (cace_amm_type_t *type)
 Reset to the default invalid state.
 
bool cace_amm_type_is_valid (const cace_amm_type_t *type)
 Determine if a type object is valid.
 
bool cace_amm_type_get_name (const cace_amm_type_t *type, cace_ari_t *name)
 Get an ARI name for a type object.
 
static int cace_amm_type_set_name_aritype (cace_amm_type_t *type, const cace_ari_t *name)
 non-recursive builtin
 
static int cace_amm_type_set_name_semtype (cace_amm_type_t *type, const cace_ari_t *name, const cace_amm_obj_store_t *store)
 
int cace_amm_type_set_name (cace_amm_type_t *type, const cace_ari_t *name, const cace_amm_obj_store_t *store)
 
cace_amm_type_match_res_t cace_amm_type_match (const cace_amm_type_t *type, const cace_ari_t *ari)
 Determine if a type (built-in or semantic) matches a specific value.
 
int cace_amm_type_convert (const cace_amm_type_t *type, cace_ari_t *out, const cace_ari_t *in)
 Force a value to be converted to a specific type (built-in or semantic).
 
static bool cace_amm_builtin_validate_lit (const cace_ari_t *ari, bool is_map_key)
 Match a single ARI with its literal type.
 
static int cace_amm_builtin_validate_visit_ari (cace_ari_t *ari, const cace_ari_visit_ctx_t *ctx)
 Adapt to the visitor interface.
 
bool cace_amm_builtin_validate (const cace_ari_t *ari)
 Validate that typed literals agree with their values.
 
bool cace_amm_ari_is_truthy (const cace_ari_t *in)
 Determine if the given ARI object is truthy.
 

Variables

static const cace_ari_type_anyint_constraints_t _builtin_byte_cnst
 
static const cace_ari_type_anyint_constraints_t _builtin_int_cnst
 
static const cace_ari_type_anyint_constraints_t _builtin_uint_cnst
 
static const cace_ari_type_anyint_constraints_t _builtin_vast_cnst
 
static const cace_ari_type_anyint_constraints_t _builtin_uvast_cnst
 
static const cace_ari_type_anyfloat_constraints_t _builtin_real32_cnst
 
static const cace_ari_type_anyfloat_constraints_t _builtin_real64_cnst
 
static cace_amm_type_t cace_amm_builtins []
 
static cace_amm_type_lookup_t cace_amm_builtin_dict
 Cached type dictionary.
 
static pthread_once_t cace_amm_builtin_dict_ctrl = PTHREAD_ONCE_INIT
 Guard for cace_amm_builtin_dict_init()
 

Macro Definition Documentation

◆ BUILTIN_ANYINT_EXTRACT

#define BUILTIN_ANYINT_EXTRACT (   valtype,
  setter 
)

Function Documentation

◆ builtin_anyfloat_constraints()

◆ builtin_anyint_constraints()

◆ builtin_ari_name()

static void builtin_ari_name ( const cace_amm_type_t *  self,
cace_ari_t name 
)
static

Name any builtin type.

References cace_ari_set_aritype_text().

◆ builtin_bool_convert()

static int builtin_bool_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_bool_match()

◆ builtin_byte_convert()

static int builtin_byte_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_byte_match()

static cace_amm_type_match_res_t builtin_byte_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_bytestr_match()

static cace_amm_type_match_res_t builtin_bytestr_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_common_convert()

static bool builtin_common_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_common_lit_match()

static cace_amm_type_match_res_t builtin_common_lit_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_common_objref_match()

◆ builtin_default_convert()

static int builtin_default_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

A default convert function that simply copies a value that matches using the type object, and copies the undefined value unconditionally.

References builtin_common_convert(), CACE_AMM_ERR_CONVERT_BADVALUE, CACE_AMM_ERR_CONVERT_NULLFUNC, CACE_AMM_TYPE_MATCH_NEGATIVE, CACE_AMM_TYPE_MATCH_NOINFO, and cace_ari_set_copy().

◆ builtin_default_match()

static cace_amm_type_match_res_t builtin_default_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_idseg_match()

◆ builtin_int_convert()

static int builtin_int_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_int_match()

static cace_amm_type_match_res_t builtin_int_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_literal_match()

static cace_amm_type_match_res_t builtin_literal_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_namespace_match()

◆ builtin_null_convert()

static int builtin_null_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_null_match()

◆ builtin_object_match()

◆ builtin_real32_convert()

static int builtin_real32_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_real32_match()

static cace_amm_type_match_res_t builtin_real32_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_real64_convert()

static int builtin_real64_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_real64_match()

static cace_amm_type_match_res_t builtin_real64_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_textstr_match()

static cace_amm_type_match_res_t builtin_textstr_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_time_constraints()

◆ builtin_time_convert()

◆ builtin_uint_convert()

static int builtin_uint_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_uint_match()

static cace_amm_type_match_res_t builtin_uint_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_uvast_convert()

static int builtin_uvast_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_uvast_match()

static cace_amm_type_match_res_t builtin_uvast_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ builtin_vast_convert()

static int builtin_vast_convert ( const cace_amm_type_t *  self,
cace_ari_t out,
const cace_ari_t in 
)
static

◆ builtin_vast_match()

static cace_amm_type_match_res_t builtin_vast_match ( const cace_amm_type_t *  self,
const cace_ari_t ari 
)
static

◆ cace_amm_ari_is_truthy()

◆ cace_amm_builtin_dict_init()

void cace_amm_builtin_dict_init ( void  )

◆ cace_amm_builtin_validate()

bool cace_amm_builtin_validate ( const cace_ari_t ari)

Validate that typed literals agree with their values.

This performs comparisons of valid cace_ari_lit_t::prim_type and valid cace_ari_lit_t::value within each ARI type.

References cace_amm_builtin_validate_visit_ari(), cace_ari_visit(), CHKFALSE, and cace_ari_visitor_t::visit_ari.

Referenced by check_decoding(), and test_cace_ari_cbor_decode_invalid().

◆ cace_amm_builtin_validate_lit()

static bool cace_amm_builtin_validate_lit ( const cace_ari_t ari,
bool  is_map_key 
)
static

Match a single ARI with its literal type.

Returns
True if it is a typed literal with matching value, or if it is not a typed literal.

References cace_ari_lit_t::ari_type, cace_ari_t::as_lit, cace_amm_type_get_builtin(), cace_amm_type_match(), CACE_AMM_TYPE_MATCH_POSITIVE, cace_ari_lit_t::has_ari_type, and cace_ari_t::is_ref.

Referenced by cace_amm_builtin_validate_visit_ari().

◆ cace_amm_builtin_validate_visit_ari()

static int cace_amm_builtin_validate_visit_ari ( cace_ari_t ari,
const cace_ari_visit_ctx_t ctx 
)
static

Adapt to the visitor interface.

References cace_amm_builtin_validate_lit(), and cace_ari_visit_ctx_t::is_map_key.

Referenced by cace_amm_builtin_validate().

◆ cace_amm_type_convert()

int cace_amm_type_convert ( const cace_amm_type_t *  type,
cace_ari_t out,
const cace_ari_t in 
)

Force a value to be converted to a specific type (built-in or semantic).

Parameters
[in]typeThe type to convert to.
[out]outThe converted value (valid if the return is zero). This struct must already be initialized.
[in]inThe value to convert. This struct must be initialized.
Returns
Zero if the conversion is successful.

References CACE_AMM_ERR_CONVERT_NULLFUNC, CACE_LOG_DEBUG, CHKERR1, and CHKRET.

Referenced by ari_numeric_add(), cace_amm_actual_param_set_populate(), cace_amm_semtype_dlist_convert(), cace_amm_semtype_seq_convert_it(), cace_amm_semtype_tblt_convert(), cace_amm_semtype_ulist_convert(), cace_amm_semtype_umap_convert(), cace_amm_semtype_union_convert(), cace_amm_semtype_use_convert(), cace_ari_equal(), cace_numeric_binary_comparison_operator(), cace_numeric_binary_operator(), cace_numeric_integer_binary_operator(), check_convert(), normalize_key(), refda_adm_ietf_dtnma_agent_ctrl_wait_cond_check(), refda_eval_condition(), refda_eval_oper(), and refda_oper_eval_ctx_populate().

◆ cace_amm_type_deinit()

◆ cace_amm_type_get_builtin()

◆ cace_amm_type_get_name()

◆ cace_amm_type_init()

◆ cace_amm_type_is_valid()

bool cace_amm_type_is_valid ( const cace_amm_type_t *  type)

Determine if a type object is valid.

Returns
True if the object is valid.

References CACE_AMM_TYPE_INVALID, and CHKFALSE.

Referenced by refda_binding_ctrl(), refda_ctrl_exec_ctx_check_result(), refda_eval_oper(), and refda_valprod_edd_run().

◆ cace_amm_type_match()

◆ cace_amm_type_reset()

void cace_amm_type_reset ( cace_amm_type_t *  type)

◆ cace_amm_type_set_name()

◆ cace_amm_type_set_name_aritype()

static int cace_amm_type_set_name_aritype ( cace_amm_type_t *  type,
const cace_ari_t name 
)
static

◆ cace_amm_type_set_name_semtype()

◆ cace_ari_force_lit_type()

Variable Documentation

◆ _builtin_byte_cnst

const cace_ari_type_anyint_constraints_t _builtin_byte_cnst
static
Initial value:
= {
.uint_max = UINT8_MAX,
.int_min = 0,
.int_max = UINT8_MAX,
}

Referenced by builtin_byte_convert(), and builtin_byte_match().

◆ _builtin_int_cnst

const cace_ari_type_anyint_constraints_t _builtin_int_cnst
static
Initial value:
= {
.uint_max = INT32_MAX,
.int_min = INT32_MIN,
.int_max = INT32_MAX,
}

Referenced by builtin_int_convert(), and builtin_int_match().

◆ _builtin_real32_cnst

const cace_ari_type_anyfloat_constraints_t _builtin_real32_cnst
static
Initial value:
= {
.float_min = -FLT_MAX,
.float_max = FLT_MAX,
}

Referenced by builtin_real32_convert(), and builtin_real32_match().

◆ _builtin_real64_cnst

const cace_ari_type_anyfloat_constraints_t _builtin_real64_cnst
static
Initial value:
= {
.float_min = -DBL_MAX,
.float_max = DBL_MAX,
}

Referenced by builtin_real64_convert(), and builtin_real64_match().

◆ _builtin_uint_cnst

const cace_ari_type_anyint_constraints_t _builtin_uint_cnst
static
Initial value:
= {
.uint_max = UINT32_MAX,
.int_min = 0,
.int_max = UINT32_MAX,
}

Referenced by builtin_uint_convert(), and builtin_uint_match().

◆ _builtin_uvast_cnst

const cace_ari_type_anyint_constraints_t _builtin_uvast_cnst
static
Initial value:
= {
.uint_max = UINT64_MAX,
.int_min = 0,
.int_max = INT64_MAX,
}

Referenced by builtin_uvast_convert(), and builtin_uvast_match().

◆ _builtin_vast_cnst

const cace_ari_type_anyint_constraints_t _builtin_vast_cnst
static
Initial value:
= {
.uint_max = INT64_MAX,
.int_min = 0,
.int_max = INT64_MAX,
}

Referenced by builtin_vast_convert(), and builtin_vast_match().

◆ cace_amm_builtin_dict

cace_amm_type_lookup_t cace_amm_builtin_dict
static

Cached type dictionary.

Referenced by cace_amm_builtin_dict_init(), and cace_amm_type_get_builtin().

◆ cace_amm_builtin_dict_ctrl

pthread_once_t cace_amm_builtin_dict_ctrl = PTHREAD_ONCE_INIT
static

◆ cace_amm_builtins

cace_amm_type_t cace_amm_builtins[]
static