home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0400
/
CCE_0423.ZIP
/
CCE_0423.PD
/
INCLUD83.ZOO
/
macros.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-20
|
1KB
|
59 lines
/*
* MACROS.H commonly useful macros
*/
#ifndef _MACROS_H
#define _MACROS_H
#ifdef __GNUC__
/* with GNUC we will use safe versions, these may look like that they
* have overhead, but they do not -- trust me!
*/
/* absolute value for any type of number */
#define abs(a) \
({typedef _ta = (a); \
_ta _a = (a); \
_a < ((_ta)0) ? -(_a) : _a; })
/* maximum and minumum for any type of number */
#define max(a,b) \
({typedef _ta = (a), _tb = (b); \
_ta _a = (a); _tb _b = (b); \
_a > _b ? _a : _b; })
#define min(a,b) \
({typedef _ta = (a), _tb = (b); \
_ta _a = (a); _tb _b = (b); \
_a < _b ? _a : _b; })
/* swap any objects (even identically typed structs!) */
/* WARNING: not safe */
#define swap(a,b) \
({typedef _ta = (a); \
_ta _t; \
_t = (a); (a) = (b); (b) = _t; })
#else /* be careful !! */
/* absolute value for any type of number */
#define abs(x) ((x)<0?(-(x)):(x))
/* maximum and minumum for any type of number */
#define max(x,y) (((x)>(y))?(x):(y))
#define min(x,y) (((x)<(y))?(x):(y))
/* swap any objects which can be XORed */
#define swap(a,b) ((a)=(a)^((b)=(b)^((a)=(a)^(b))))
#endif /* __GNUC__ */
/* lo and hi byte of a word */
#define lobyte(x) (((unsigned char *)&(x))[1])
#define hibyte(x) (((unsigned char *)&(x))[0])
/* lo and hi word of a long */
#define loword(x) (((unsigned short *)&(x))[1])
#define hiword(x) (((unsigned short *)&(x))[0])
#endif /* _MACROS_H */