eina_value: add helper: eina_value_struct_desc_get().

this helper will validate a struct and fetch its description, also
checking if the user version matches.
This commit is contained in:
Gustavo Sverzut Barbieri 2017-08-24 11:13:56 -03:00
parent 7683780351
commit 9ac1cb4fad
2 changed files with 23 additions and 0 deletions

View File

@ -1413,6 +1413,19 @@ eina_value_struct_setup(Eina_Value *value, const Eina_Value_Struct_Desc *sdesc)
return EINA_TRUE;
}
static inline const Eina_Value_Struct_Desc *
eina_value_struct_desc_get(const Eina_Value *value)
{
const Eina_Value_Struct *st;
EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, NULL);
st = (const Eina_Value_Struct *)eina_value_memory_get(value);
if ((!st) || (!st->desc))
return NULL;
EINA_SAFETY_ON_FALSE_RETURN_VAL(st->desc->version == EINA_VALUE_STRUCT_DESC_VERSION, NULL);
return st->desc;
}
static inline void *
eina_value_struct_member_memory_get(const Eina_Value_Struct *st, const Eina_Value_Struct_Member *member)
{

View File

@ -3046,6 +3046,16 @@ EAPI Eina_Value *eina_value_struct_new(const Eina_Value_Struct_Desc *desc) EINA_
static inline Eina_Bool eina_value_struct_setup(Eina_Value *value,
const Eina_Value_Struct_Desc *desc) EINA_ARG_NONNULL(1, 2);
/**
* @brief Checks for a struct and get its description.
* @param value Value object
* @return structure description, with all members and size.
* on failure, #NULL is returned.
*
* @since 1.21
*/
static inline const Eina_Value_Struct_Desc *eina_value_struct_desc_get(const Eina_Value *value) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets the generic value in an struct member.
* @param value Source value object