|
|
|
|
|
#ifndef MACROS_H |
#define MACROS_H |
|
#include <global.h> |
|
#ifdef HAVE_SYS_PARAM_H |
#include <sys/param.h> |
#endif |
|
#include "pike_memory.h" |
|
#define OFFSETOF(str_type, field) ((long)& (((struct str_type *)0)->field)) |
#define BASEOF(ptr, str_type, field) \ |
((struct str_type *)((char*)ptr - (char*)& (((struct str_type *)0)->field))) |
|
#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)) |
|
|
#define is8bitalnum(X) ("0000000000000000" \ |
"0000000000001000" \ |
"0000000000000000" \ |
"1111111111000000" \ |
"0111111111111111" \ |
"1111111111100001" \ |
"0111111111111111" \ |
"1111111111100000" \ |
"0000000000000000" \ |
"0000000000000000" \ |
"1011110101100010" \ |
"1011011001101110" \ |
"1111111111111111" \ |
"1111111011111111" \ |
"1111111111111111" \ |
"1111111011111111"[((unsigned)(X))&0xff] == '1') |
|
#define isidchar(X) is8bitalnum(X) |
|
#define ALIGN_BOUND sizeof(char *) |
#define DO_ALIGN(X,Y) (((long)(X)+(Y-1)) & -(Y)) |
#define MY_ALIGN(X) DO_ALIGN(X,ALIGN_BOUND) |
|
#endif |
|
|