Eina: Add EINA_VALUE_TYPE_ERROR

This new type will be used by the new promise/future implementation,
which will be used to flag errors.
This commit is contained in:
Guilherme Iscaro 2017-08-08 16:57:31 -03:00 committed by Gustavo Sverzut Barbieri
parent 4da53492ae
commit 3ed176370d
2 changed files with 86 additions and 16 deletions

View File

@ -167,7 +167,7 @@ _eina_value_type_uchar_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
short other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
@ -315,7 +315,7 @@ _eina_value_type_ushort_convert_to(const Eina_Value_Type *type EINA_UNUSED, cons
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
@ -465,7 +465,7 @@ _eina_value_type_uint_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
if (EINA_UNLIKELY(v > (unsigned int)eina_value_int_max))
@ -619,7 +619,7 @@ _eina_value_type_ulong_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
if (EINA_UNLIKELY(v > (unsigned int)eina_value_int_max))
@ -778,7 +778,7 @@ _eina_value_type_uint64_convert_to(const Eina_Value_Type *type EINA_UNUSED, cons
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
if (EINA_UNLIKELY(v > (unsigned int)eina_value_int_max))
@ -936,7 +936,7 @@ _eina_value_type_char_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
short other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
@ -1094,7 +1094,7 @@ _eina_value_type_short_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
short other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
@ -1258,7 +1258,7 @@ _eina_value_type_int_convert_to(const Eina_Value_Type *type EINA_UNUSED, const E
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
return eina_value_type_pset(convert, convert_mem, &other_mem);
@ -1424,7 +1424,7 @@ _eina_value_type_long_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
if (EINA_UNLIKELY(v < eina_value_int_min))
@ -1597,7 +1597,7 @@ _eina_value_type_int64_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
if (EINA_UNLIKELY(v < eina_value_int_min))
@ -1776,7 +1776,7 @@ _eina_value_type_float_convert_to(const Eina_Value_Type *type EINA_UNUSED, const
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
if (EINA_UNLIKELY(v < eina_value_int_min))
@ -1957,7 +1957,7 @@ _eina_value_type_double_convert_to(const Eina_Value_Type *type EINA_UNUSED, cons
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v;
if (EINA_UNLIKELY(v < eina_value_int_min))
@ -2123,7 +2123,7 @@ _eina_value_type_string_common_convert_to(const Eina_Value_Type *type EINA_UNUSE
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem;
if ((sscanf(v, "%d", &other_mem) != 1) &&
@ -3438,7 +3438,7 @@ _eina_value_type_timeval_convert_to(const Eina_Value_Type *type EINA_UNUSED, con
return EINA_FALSE;
return eina_value_type_pset(convert, convert_mem, &other_mem);
}
else if (convert == EINA_VALUE_TYPE_INT)
else if ((convert == EINA_VALUE_TYPE_INT) || (convert == EINA_VALUE_TYPE_ERROR))
{
int other_mem = v.tv_sec;
if (EINA_UNLIKELY(v.tv_sec < eina_value_int_min))
@ -4554,6 +4554,20 @@ _eina_value_type_optional_pget(const Eina_Value_Type *type EINA_UNUSED, const vo
return EINA_TRUE;
}
static Eina_Bool
_eina_value_type_eina_error_convert_to(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
{
if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
convert == EINA_VALUE_TYPE_STRING)
{
const Eina_Error v = *(const Eina_Error *)type_mem;
const char *msg = eina_error_msg_get(v);
return eina_value_type_pset(convert, convert_mem, &msg);
}
return _eina_value_type_int_convert_to(type, convert, type_mem, convert_mem);
}
EAPI const Eina_Value_Type _EINA_VALUE_TYPE_OPTIONAL = {
EINA_VALUE_TYPE_VERSION,
sizeof(Eina_Value_Union),
@ -4785,6 +4799,20 @@ static const Eina_Value_Type _EINA_VALUE_TYPE_BASICS[] = {
_eina_value_type_ulong_vset,
_eina_value_type_ulong_pset,
_eina_value_type_ulong_pget
},
{
EINA_VALUE_TYPE_VERSION,
sizeof(Eina_Error),
"Eina_Error",
_eina_value_type_int_setup,
_eina_value_type_int_flush,
_eina_value_type_int_copy,
_eina_value_type_int_compare,
_eina_value_type_eina_error_convert_to,
NULL, /* no convert from */
_eina_value_type_int_vset,
_eina_value_type_int_pset,
_eina_value_type_int_pget
}
};
@ -4992,11 +5020,12 @@ eina_value_init(void)
EINA_VALUE_TYPE_STRINGSHARE = _EINA_VALUE_TYPE_BASICS + 12;
EINA_VALUE_TYPE_STRING = _EINA_VALUE_TYPE_BASICS + 13;
EINA_VALUE_TYPE_TIMESTAMP = _EINA_VALUE_TYPE_BASICS + 14;
EINA_VALUE_TYPE_ERROR = _EINA_VALUE_TYPE_BASICS + 15;
_EINA_VALUE_TYPE_BASICS_START = _EINA_VALUE_TYPE_BASICS + 0;
_EINA_VALUE_TYPE_BASICS_END = _EINA_VALUE_TYPE_BASICS + 14;
_EINA_VALUE_TYPE_BASICS_END = _EINA_VALUE_TYPE_BASICS + 15;
EINA_SAFETY_ON_FALSE_RETURN_VAL((sizeof(_EINA_VALUE_TYPE_BASICS)/sizeof(_EINA_VALUE_TYPE_BASICS[0])) == 15, EINA_FALSE);
EINA_SAFETY_ON_FALSE_RETURN_VAL((sizeof(_EINA_VALUE_TYPE_BASICS)/sizeof(_EINA_VALUE_TYPE_BASICS[0])) == 16, EINA_FALSE);
EINA_VALUE_TYPE_ARRAY = &_EINA_VALUE_TYPE_ARRAY;
@ -5068,6 +5097,7 @@ eina_value_shutdown(void)
EAPI const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START = NULL;
EAPI const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END = NULL;
EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ERROR = NULL;
EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR = NULL;
EAPI const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL;
EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL;

View File

@ -349,6 +349,18 @@ union _Eina_Value_Union
uint64_t _guarantee; /**< guarantees 8-byte alignment */
};
/**
* @var EINA_VALUE_TYPE_ERROR
* manages Eina_Error values.
* This value will hold an Eina_Error number,
* which can be converted to string to get its message or call
* eina_error_msg_get() on the number to convert yourself.
*
* @since 1.21
*/
EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ERROR;
/**
* @var EINA_VALUE_TYPE_UCHAR
* manages unsigned char type.
@ -732,6 +744,7 @@ static inline int eina_value_compare(const Eina_Value *a,
* The variable argument is dependent on chosen type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -793,6 +806,7 @@ static inline Eina_Bool eina_value_set(Eina_Value *value,
* The variable argument is dependent on chosen type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -896,6 +910,7 @@ static inline Eina_Bool eina_value_vget(const Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -962,6 +977,7 @@ static inline Eina_Bool eina_value_pset(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -1170,6 +1186,7 @@ static inline Eina_Bool eina_value_array_remove(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -1231,6 +1248,7 @@ static inline Eina_Bool eina_value_array_set(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -1280,6 +1298,7 @@ static inline Eina_Bool eina_value_array_get(const Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -1335,6 +1354,7 @@ static inline Eina_Bool eina_value_array_insert(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -1476,6 +1496,7 @@ static inline Eina_Bool eina_value_array_vappend(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -1541,6 +1562,7 @@ static inline Eina_Bool eina_value_array_pset(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -1591,6 +1613,7 @@ static inline Eina_Bool eina_value_array_pget(const Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -1649,6 +1672,7 @@ static inline Eina_Bool eina_value_array_pinsert(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -1817,6 +1841,7 @@ static inline Eina_Bool eina_value_list_remove(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -1877,6 +1902,7 @@ static inline Eina_Bool eina_value_list_set(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -1925,6 +1951,7 @@ static inline Eina_Bool eina_value_list_get(const Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -1979,6 +2006,7 @@ static inline Eina_Bool eina_value_list_insert(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -2119,6 +2147,7 @@ static inline Eina_Bool eina_value_list_vappend(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -2183,6 +2212,7 @@ static inline Eina_Bool eina_value_list_pset(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -2232,6 +2262,7 @@ static inline Eina_Bool eina_value_list_pget(const Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -2289,6 +2320,7 @@ static inline Eina_Bool eina_value_list_pinsert(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -2444,6 +2476,7 @@ static inline Eina_Bool eina_value_hash_del(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -2497,6 +2530,7 @@ static inline Eina_Bool eina_value_hash_set(Eina_Value *value,
* The variable argument is dependent on chosen subtype. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -2583,6 +2617,7 @@ static inline Eina_Bool eina_value_hash_vget(const Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -2639,6 +2674,7 @@ static inline Eina_Bool eina_value_hash_pset(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -2984,6 +3020,7 @@ static inline Eina_Bool eina_value_struct_setup(Eina_Value *value,
* The variable argument is dependent on chosen member type. The list
* for basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error
* @li EINA_VALUE_TYPE_UCHAR: unsigned char
* @li EINA_VALUE_TYPE_USHORT: unsigned short
* @li EINA_VALUE_TYPE_UINT: unsigned int
@ -3052,6 +3089,7 @@ static inline Eina_Bool eina_value_struct_set(Eina_Value *value,
* The variable argument is dependent on chosen member type. The list
* for basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -3154,6 +3192,7 @@ static inline Eina_Bool eina_value_struct_vget(const Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*
@ -3226,6 +3265,7 @@ static inline Eina_Bool eina_value_struct_pset(Eina_Value *value,
* The pointer type is dependent on chosen value type. The list for
* basic types:
*
* @li EINA_VALUE_TYPE_ERROR: Eina_Error*
* @li EINA_VALUE_TYPE_UCHAR: unsigned char*
* @li EINA_VALUE_TYPE_USHORT: unsigned short*
* @li EINA_VALUE_TYPE_UINT: unsigned int*