forked from enlightenment/efl
eina: use __typeof__ for public headers to build applications with c++0x.
This commit is contained in:
parent
cbd0ccbbbe
commit
f6ba1f69e7
|
@ -685,10 +685,17 @@ EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MA
|
|||
*
|
||||
* @since 1.2
|
||||
*/
|
||||
#define EINA_INARRAY_FOREACH(array, itr) \
|
||||
for ((itr) = (array)->members; \
|
||||
(itr) < (((typeof(*itr)*)(array)->members) + (array)->len); \
|
||||
(itr)++)
|
||||
#ifdef __GNUC__
|
||||
# define EINA_INARRAY_FOREACH(array, itr) \
|
||||
for ((itr) = (array)->members; \
|
||||
(itr) < (((__typeof__(*itr)*)(array)->members) + (array)->len); \
|
||||
(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
|
||||
|
@ -706,11 +713,19 @@ EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MA
|
|||
*
|
||||
* @since 1.2
|
||||
*/
|
||||
#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)--)
|
||||
#ifdef __GNUC__
|
||||
# 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)--)
|
||||
#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
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -818,8 +818,13 @@ 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
|
||||
* operator.
|
||||
*/
|
||||
#define _EINA_INLIST_CONTAINER(ref, ptr) (typeof(ref))((char *)(ptr) - \
|
||||
# ifdef __GNUC__
|
||||
# define _EINA_INLIST_CONTAINER(ref, ptr) (__typeof__(ref))((char *)(ptr) - \
|
||||
_EINA_INLIST_OFFSET(ref))
|
||||
# else
|
||||
# define _EINA_INLIST_CONTAINER(ref, ptr) (typeof(ref))((char *)(ptr) - \
|
||||
_EINA_INLIST_OFFSET(ref))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -868,9 +873,13 @@ EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func);
|
|||
* don't remove all items from the list.
|
||||
* @since 1.8
|
||||
*/
|
||||
#define EINA_INLIST_FREE(list, it) \
|
||||
for (it = (typeof(it)) list; list; it = (typeof(it)) list) \
|
||||
|
||||
#ifdef __GNUC__
|
||||
# define EINA_INLIST_FREE(list, it) \
|
||||
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"
|
||||
|
|
Loading…
Reference in New Issue