e576bb | 2002-10-11 | Martin Nilsson | | |
a4a80c | 2006-10-03 | Peter Bortas | | || $Id: pike_macros.h,v 1.39 2006/10/03 16:47:32 peter Exp $
|
e576bb | 2002-10-11 | Martin Nilsson | | */
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifndef MACROS_H
#define MACROS_H
|
a4a80c | 2006-10-03 | Peter Bortas | | #include "global.h"
|
bdfb86 | 1997-12-22 | Fredrik Hübinette (Hubbe) | |
#ifdef HAVE_SYS_PARAM_H
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include <sys/param.h>
|
bdfb86 | 1997-12-22 | Fredrik Hübinette (Hubbe) | | #endif
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | #include "pike_memory.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
d2361e | 2003-06-30 | Martin Stjernholm | | #define PTR_TO_INT(PTR) ((size_t) ((char *) (PTR) - (char *) NULL))
|
bedbe7 | 2003-06-30 | Martin Stjernholm | |
|
a147b6 | 2003-01-02 | Henrik Grubbström (Grubba) | | #define OFFSETOF(str_type, field) \
|
d2361e | 2003-06-30 | Martin Stjernholm | | PTR_TO_INT(& (((struct str_type *)NULL)->field))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #define BASEOF(ptr, str_type, field) \
|
a147b6 | 2003-01-02 | Henrik Grubbström (Grubba) | | ((struct str_type *)((char*)ptr - OFFSETOF(str_type, field)))
|
609892 | 2006-05-30 | Martin Nilsson | |
#ifdef __cplusplus
extern "C++" {
template<typename T> static inline int low_alignof_(T *ignored)
{
struct { char x; T y;} *bar = NULL;
return PTR_TO_INT(&bar->y);
}
};
# define ALIGNOF(X) low_alignof_((X*)NULL)
#else
# define ALIGNOF(X) OFFSETOF({ char ignored_; X fooo_;}, fooo_)
#endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
#define NELEM(a) (sizeof (a) / sizeof ((a)[0]))
#define ALLOC_STRUCT(X) ( (struct X *)xalloc(sizeof(struct X)) )
#define MINIMUM(X,Y) ((X)<(Y)?(X):(Y))
#define MAXIMUM(X,Y) ((X)>(Y)?(X):(Y))
|
b432bb | 1996-10-29 | Per Hedbor | |
|
464914 | 1997-09-27 | Henrik Grubbström (Grubba) | | #define is8bitalnum(X) ("0000000000000000" \
|
2e104a | 1998-05-06 | Henrik Grubbström (Grubba) | | "0000000000000000" \
|
464914 | 1997-09-27 | Henrik Grubbström (Grubba) | | "0000000000000000" \
"1111111111000000" \
"0111111111111111" \
"1111111111100001" \
"0111111111111111" \
"1111111111100000" \
"0000000000000000" \
"0000000000000000" \
"1011110101100010" \
"1011011001101110" \
"1111111111111111" \
"1111111011111111" \
"1111111111111111" \
"1111111011111111"[((unsigned)(X))&0xff] == '1')
|
b432bb | 1996-10-29 | Per Hedbor | |
#define isidchar(X) is8bitalnum(X)
|
5c8e89 | 1995-10-29 | Fredrik Hübinette (Hubbe) | |
|
94eb31 | 1998-05-18 | Henrik Grubbström (Grubba) | | #ifndef HAVE_ISGRAPH
#define isgraph(X) (ispunct(X) || isupper(X) || islower(X) || isdigit(X))
#endif /* !HAVE_ISGRAPH */
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
199498 | 1998-04-07 | Fredrik Hübinette (Hubbe) | |
|
ee1fb8 | 2000-08-03 | Henrik Grubbström (Grubba) | | #define DO_ALIGN(X,Y) (((size_t)(X)+((Y)-1)) & -(Y))
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | #define CONSTANT_STRLEN(X) (sizeof(X) - sizeof(""))
|
ac3edc | 2000-06-27 | Henrik Grubbström (Grubba) | | #define SET_NEXT_AND_FREE(p,free_item) do{ \
|
fccf99 | 2000-04-07 | Fredrik Hübinette (Hubbe) | | next=p->next; \
while(p->refs == 1 && (next=p->next)) \
{ \
add_ref(next); \
|
ac3edc | 2000-06-27 | Henrik Grubbström (Grubba) | | free_item(p); \
|
fccf99 | 2000-04-07 | Fredrik Hübinette (Hubbe) | | p=next; \
} \
|
ac3edc | 2000-06-27 | Henrik Grubbström (Grubba) | | free_item(p); \
|
fccf99 | 2000-04-07 | Fredrik Hübinette (Hubbe) | | }while(0)
|
a4033e | 2000-04-14 | Fredrik Hübinette (Hubbe) | |
|
2bd038 | 2000-12-14 | Martin Stjernholm | |
|
45af0d | 2001-05-13 | Fredrik Hübinette (Hubbe) | |
|
d20cf3 | 2001-07-20 | Martin Stjernholm | |
|
2bd038 | 2000-12-14 | Martin Stjernholm | | #define FREE_AND_GET_REFERENCED(p, item_type, free_item) do { \
item_type *next; \
while (1) { \
if (p->refs > 1) { \
free_item(p); \
break; \
} \
if (!(next = p->next)) { \
free_item(p); \
p = 0; \
break; \
} \
add_ref(next); \
free_item(p); \
p = next; \
} \
} while (0)
|
a4033e | 2000-04-14 | Fredrik Hübinette (Hubbe) | | #define DOUBLELINK(first_object, o) do { \
|
08cf75 | 2001-10-06 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(o); \
|
a4033e | 2000-04-14 | Fredrik Hübinette (Hubbe) | | o->next=first_object; \
o->prev=0; \
if(first_object) first_object->prev=o; \
first_object=o; \
}while(0)
#define DOUBLEUNLINK(first_object,o) do{ \
|
08cf75 | 2001-10-06 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(o); \
|
a4033e | 2000-04-14 | Fredrik Hübinette (Hubbe) | | if(o->prev) { \
o->prev->next=o->next; \
}else { \
DO_IF_DEBUG( \
|
08cf75 | 2001-10-06 | Fredrik Hübinette (Hubbe) | | if(first_object != o) { \
describe(o); \
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Linked in wrong list!\n"); \
|
08cf75 | 2001-10-06 | Fredrik Hübinette (Hubbe) | | } \
|
a4033e | 2000-04-14 | Fredrik Hübinette (Hubbe) | | ) \
first_object=o->next; \
} \
\
if(o->next) o->next->prev=o->prev; \
}while(0)
|
f8153c | 2000-10-09 | Fredrik Hübinette (Hubbe) | | #define PIKE_XCONCAT(X,Y) PIKE_CONCAT(X,Y)
#define PIKE_XCONCAT3(X,Y,Z) PIKE_CONCAT(X,Y,Z)
#define PIKE_XCONCAT4(X,Y,Z,Q) PIKE_CONCAT(X,Y,Z,Q)
|
6b4037 | 2001-07-22 | Martin Stjernholm | |
#define COMMA ,
|
f8153c | 2000-10-09 | Fredrik Hübinette (Hubbe) | |
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | |
|
6f0d75 | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT int my_log2(size_t x);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #endif
|