21# define ANJ_INTERNAL_INCLUDE_UTILS
22# include <anj_internal/utils.h>
23# undef ANJ_INTERNAL_INCLUDE_UTILS
33# define ANJ_ID_INVALID UINT16_MAX
35# define ANJ_CONTAINER_OF(ptr, type, member) \
36 ((type *) (void *) ((char *) (intptr_t) (ptr) -offsetof(type, member)))
37# define ANJ_MIN(a, b) ((a) < (b) ? (a) : (b))
38# define ANJ_MAX(a, b) ((a) < (b) ? (b) : (a))
39# define ANJ_ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
44# define ANJ_QUOTE(Value) # Value
51# define ANJ_QUOTE_MACRO(Value) ANJ_QUOTE(Value)
57# define ANJ_ASSERT(cond, msg) assert((cond) && (bool) "" msg)
63# define ANJ_UNREACHABLE(msg) ANJ_ASSERT(0, msg)
70# define ANJ_CONCAT(...) \
71 _ANJ_CONCAT_INTERNAL__( \
72 _ANJ_CONCAT_INTERNAL__(_ANJ_CONCAT_INTERNAL_, \
73 _ANJ_VARARG_LENGTH(__VA_ARGS__)), \
81# define ANJ_STATIC_ASSERT(condition, message) \
82 struct ANJ_CONCAT(static_assert_, message) { \
83 char message[(condition) ? 1 : -1]; \
90# define ANJ_MAKE_RESOURCE_INSTANCE_PATH(Oid, Iid, Rid, Riid) \
91 _ANJ_MAKE_URI_PATH(Oid, Iid, Rid, Riid, 4)
93# define ANJ_MAKE_RESOURCE_PATH(Oid, Iid, Rid) \
94 _ANJ_MAKE_URI_PATH(Oid, Iid, Rid, ANJ_ID_INVALID, 3)
96# define ANJ_MAKE_INSTANCE_PATH(Oid, Iid) \
97 _ANJ_MAKE_URI_PATH(Oid, Iid, ANJ_ID_INVALID, ANJ_ID_INVALID, 2)
99# define ANJ_MAKE_OBJECT_PATH(Oid) \
100 _ANJ_MAKE_URI_PATH( \
101 Oid, ANJ_ID_INVALID, ANJ_ID_INVALID, ANJ_ID_INVALID, 1)
103# define ANJ_MAKE_ROOT_PATH() \
104 _ANJ_MAKE_URI_PATH(ANJ_ID_INVALID, \
115 for (
size_t i = 0; i < left->
uri_len; ++i) {
116 if (left->
ids[i] != right->
ids[i]) {
129 return path->
uri_len > id_type;
134 return path->
uri_len == (size_t) id_type + 1u;
142 for (
size_t i = 0; i < base->
uri_len; ++i) {
143 if (path->
ids[i] != base->
ids[i]) {
anj_id_type_t
Definition defs.h:196
uint16_t ids[ANJ_URI_PATH_MAX_LENGTH]
Definition defs.h:214
size_t uri_len
Definition defs.h:215
static bool anj_uri_path_equal(const anj_uri_path_t *left, const anj_uri_path_t *right)
Definition utils.h:110
size_t anj_uint32_to_string_value(char *out_buff, uint32_t value)
static bool anj_uri_path_is(const anj_uri_path_t *path, anj_id_type_t id_type)
Definition utils.h:132
int anj_string_to_objlnk_value(anj_objlnk_value_t *out, const char *objlnk)
static bool anj_uri_path_outside_base(const anj_uri_path_t *path, const anj_uri_path_t *base)
Definition utils.h:137
int anj_string_to_uint32_value(uint32_t *out_val, const char *buff, size_t buff_len)
size_t anj_int64_to_string_value(char *out_buff, int64_t value)
size_t anj_uint16_to_string_value(char *out_buff, uint16_t value)
size_t anj_uint64_to_string_value(char *out_buff, uint64_t value)
bool anj_uri_path_increasing(const anj_uri_path_t *previous_path, const anj_uri_path_t *current_path)
static bool anj_uri_path_has(const anj_uri_path_t *path, anj_id_type_t id_type)
Definition utils.h:127
size_t anj_double_to_string_value(char *out_buff, double value)
uint16_t anj_determine_block_buffer_size(size_t buff_size)
int anj_string_to_double_value(double *out_val, const char *buff, size_t buff_len)
int anj_string_to_uint64_value(uint64_t *out_val, const char *buff, size_t buff_len)
int anj_string_to_int64_value(int64_t *out_val, const char *buff, size_t buff_len)
static size_t anj_uri_path_length(const anj_uri_path_t *path)
Definition utils.h:123