eina: seems like all the compiler we support do support __typeof__.

This commit is contained in:
Cedric Bail 2013-07-29 16:28:07 +09:00
parent 2692234b60
commit fa57dd8b2a
2 changed files with 13 additions and 39 deletions

View File

@ -685,17 +685,10 @@ EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MA
* *
* @since 1.2 * @since 1.2
*/ */
#ifdef __GNUC__ #define EINA_INARRAY_FOREACH(array, itr) \
# define EINA_INARRAY_FOREACH(array, itr) \ for ((itr) = (array)->members; \
for ((itr) = (array)->members; \ (itr) < (((__typeof__(*itr)*)(array)->members) + (array)->len); \
(itr) < (((__typeof__(*itr)*)(array)->members) + (array)->len); \ (itr)++)
(itr)++)
#else
# define EINA_INARRAY_FOREACH(array, itr) \
for ((itr) = (array)->members; \
(itr) < (((typeof(*itr)*)(array)->members) + (array)->len); \
(itr)++)
#endif
/** /**
* @def EINA_INARRAY_REVERSE_FOREACH * @def EINA_INARRAY_REVERSE_FOREACH
@ -713,19 +706,11 @@ EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MA
* *
* @since 1.2 * @since 1.2
*/ */
#ifdef __GNUC__ #define EINA_INARRAY_REVERSE_FOREACH(array, itr) \
# define EINA_INARRAY_REVERSE_FOREACH(array, itr) \ for ((itr) = ((((__typeof__(*(itr))*)(array)->members) + (array)->len) - 1); \
for ((itr) = ((((__typeof__(*(itr))*)(array)->members) + (array)->len) - 1); \ (((itr) >= (__typeof__(*(itr))*)(array)->members) \
(((itr) >= (__typeof__(*(itr))*)(array)->members) \ && ((array)->members != NULL)); \
&& ((array)->members != NULL)); \ (itr)--)
(itr)--)
#else
# define EINA_INARRAY_REVERSE_FOREACH(array, itr) \
for ((itr) = ((((typeof(*(itr))*)(array)->members) + (array)->len) - 1); \
(((itr) >= (typeof(*(itr))*)(array)->members) \
&& ((array)->members != NULL)); \
(itr)--)
#endif
/** /**
* @} * @}

View File

@ -818,13 +818,8 @@ EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func);
* In C++ we can't assign a "type*" pointer to void* so we rely on GCC's typeof * In C++ we can't assign a "type*" pointer to void* so we rely on GCC's typeof
* operator. * operator.
*/ */
# ifdef __GNUC__ # define _EINA_INLIST_CONTAINER(ref, ptr) (__typeof__(ref))((char *)(ptr) - \
# define _EINA_INLIST_CONTAINER(ref, ptr) (__typeof__(ref))((char *)(ptr) - \ _EINA_INLIST_OFFSET(ref))
_EINA_INLIST_OFFSET(ref))
# else
# define _EINA_INLIST_CONTAINER(ref, ptr) (typeof(ref))((char *)(ptr) - \
_EINA_INLIST_OFFSET(ref))
# endif
#endif #endif
/** /**
@ -873,14 +868,8 @@ EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func);
* don't remove all items from the list. * don't remove all items from the list.
* @since 1.8 * @since 1.8
*/ */
#ifdef __GNUC__ #define EINA_INLIST_FREE(list, it) \
# define EINA_INLIST_FREE(list, it) \ for (it = (__typeof__(it)) list; list; it = (__typeof__(it)) list)
for (it = (__typeof__(it)) list; list; it = (__typeof__(it)) list)
#else
# define EINA_INLIST_FREE(list, it) \
for (it = (typeof(it)) list; list; it = (typeof(it)) list)
#endif
#include "eina_inline_inlist.x" #include "eina_inline_inlist.x"