2007-01-26 19:36:29 +03:00
|
|
|
/*
|
2009-11-24 22:44:07 +03:00
|
|
|
* Copyright 2004-2009, Haiku, Inc. All Rights Reserved.
|
2007-01-26 19:36:29 +03:00
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*
|
|
|
|
* Author:
|
|
|
|
* Erik Jaesler (erik@cgsoftware.com)
|
|
|
|
*/
|
2002-07-09 16:24:59 +04:00
|
|
|
#ifndef _SUPPORT_DEFS_H
|
|
|
|
#define _SUPPORT_DEFS_H
|
|
|
|
|
2007-01-26 19:36:29 +03:00
|
|
|
|
2002-07-09 16:24:59 +04:00
|
|
|
#include <BeBuild.h>
|
2003-05-14 21:21:46 +04:00
|
|
|
#include <Errors.h>
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2009-11-24 22:44:07 +03:00
|
|
|
#include <inttypes.h>
|
2007-01-26 19:36:29 +03:00
|
|
|
#include <sys/types.h>
|
|
|
|
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2009-11-24 22:44:07 +03:00
|
|
|
/* fixed-size integer types */
|
|
|
|
typedef __haiku_int8 int8;
|
|
|
|
typedef __haiku_uint8 uint8;
|
|
|
|
typedef __haiku_int16 int16;
|
|
|
|
typedef __haiku_uint16 uint16;
|
|
|
|
typedef __haiku_int32 int32;
|
|
|
|
typedef __haiku_uint32 uint32;
|
|
|
|
typedef __haiku_int64 int64;
|
|
|
|
typedef __haiku_uint64 uint64;
|
|
|
|
|
|
|
|
/* shorthand types */
|
|
|
|
typedef volatile int8 vint8;
|
|
|
|
typedef volatile uint8 vuint8;
|
|
|
|
typedef volatile int16 vint16;
|
|
|
|
typedef volatile uint16 vuint16;
|
|
|
|
typedef volatile int32 vint32;
|
|
|
|
typedef volatile uint32 vuint32;
|
|
|
|
typedef volatile int64 vint64;
|
|
|
|
typedef volatile uint64 vuint64;
|
2002-07-09 16:24:59 +04:00
|
|
|
|
|
|
|
typedef volatile long vlong;
|
|
|
|
typedef volatile int vint;
|
|
|
|
typedef volatile short vshort;
|
|
|
|
typedef volatile char vchar;
|
|
|
|
|
|
|
|
typedef volatile unsigned long vulong;
|
|
|
|
typedef volatile unsigned int vuint;
|
|
|
|
typedef volatile unsigned short vushort;
|
|
|
|
typedef volatile unsigned char vuchar;
|
|
|
|
|
|
|
|
typedef unsigned char uchar;
|
|
|
|
typedef unsigned short unichar;
|
|
|
|
|
2009-11-24 22:44:07 +03:00
|
|
|
/* descriptive types */
|
2002-07-09 16:24:59 +04:00
|
|
|
typedef int32 status_t;
|
|
|
|
typedef int64 bigtime_t;
|
|
|
|
typedef uint32 type_code;
|
|
|
|
typedef uint32 perform_code;
|
|
|
|
|
|
|
|
|
2009-11-24 22:44:07 +03:00
|
|
|
/* printf()/scanf() format strings for [u]int* types */
|
2009-11-24 23:30:01 +03:00
|
|
|
#define B_PRId8 "d"
|
|
|
|
#define B_PRIi8 "i"
|
|
|
|
#define B_PRId16 "d"
|
|
|
|
#define B_PRIi16 "i"
|
|
|
|
#define B_PRId32 __HAIKU_PRI_PREFIX_32 "d"
|
|
|
|
#define B_PRIi32 __HAIKU_PRI_PREFIX_32 "i"
|
|
|
|
#define B_PRId64 __HAIKU_PRI_PREFIX_64 "d"
|
|
|
|
#define B_PRIi64 __HAIKU_PRI_PREFIX_64 "i"
|
|
|
|
#define B_PRIu8 "u"
|
|
|
|
#define B_PRIo8 "o"
|
|
|
|
#define B_PRIx8 "x"
|
|
|
|
#define B_PRIX8 "X"
|
|
|
|
#define B_PRIu16 "u"
|
|
|
|
#define B_PRIo16 "o"
|
|
|
|
#define B_PRIx16 "x"
|
|
|
|
#define B_PRIX16 "X"
|
|
|
|
#define B_PRIu32 __HAIKU_PRI_PREFIX_32 "u"
|
|
|
|
#define B_PRIo32 __HAIKU_PRI_PREFIX_32 "o"
|
|
|
|
#define B_PRIx32 __HAIKU_PRI_PREFIX_32 "x"
|
|
|
|
#define B_PRIX32 __HAIKU_PRI_PREFIX_32 "X"
|
|
|
|
#define B_PRIu64 __HAIKU_PRI_PREFIX_64 "u"
|
|
|
|
#define B_PRIo64 __HAIKU_PRI_PREFIX_64 "o"
|
|
|
|
#define B_PRIx64 __HAIKU_PRI_PREFIX_64 "x"
|
|
|
|
#define B_PRIX64 __HAIKU_PRI_PREFIX_64 "X"
|
2009-11-24 22:44:07 +03:00
|
|
|
|
2009-11-24 23:30:01 +03:00
|
|
|
#define B_SCNd8 "hhd"
|
|
|
|
#define B_SCNi8 "hhi"
|
|
|
|
#define B_SCNd16 "hd"
|
|
|
|
#define B_SCNi16 "hi"
|
|
|
|
#define B_SCNd32 __HAIKU_PRI_PREFIX_32 "d"
|
|
|
|
#define B_SCNi32 __HAIKU_PRI_PREFIX_32 "i"
|
|
|
|
#define B_SCNd64 __HAIKU_PRI_PREFIX_64 "d"
|
|
|
|
#define B_SCNi64 __HAIKU_PRI_PREFIX_64 "i"
|
|
|
|
#define B_SCNu8 "hhu"
|
|
|
|
#define B_SCNo8 "hho"
|
|
|
|
#define B_SCNx8 "hhx"
|
|
|
|
#define B_SCNu16 "hu"
|
|
|
|
#define B_SCNo16 "ho"
|
|
|
|
#define B_SCNx16 "hx"
|
|
|
|
#define B_SCNu32 __HAIKU_PRI_PREFIX_32 "u"
|
|
|
|
#define B_SCNo32 __HAIKU_PRI_PREFIX_32 "o"
|
|
|
|
#define B_SCNx32 __HAIKU_PRI_PREFIX_32 "x"
|
|
|
|
#define B_SCNu64 __HAIKU_PRI_PREFIX_64 "u"
|
|
|
|
#define B_SCNo64 __HAIKU_PRI_PREFIX_64 "o"
|
|
|
|
#define B_SCNx64 __HAIKU_PRI_PREFIX_64 "x"
|
2009-11-24 22:44:07 +03:00
|
|
|
|
|
|
|
/* printf() format strings for some standard types */
|
|
|
|
/* size_t */
|
|
|
|
#define B_PRIuSIZE __HAIKU_PRI_PREFIX_ADDR "u"
|
|
|
|
#define B_PRIoSIZE __HAIKU_PRI_PREFIX_ADDR "o"
|
|
|
|
#define B_PRIxSIZE __HAIKU_PRI_PREFIX_ADDR "x"
|
|
|
|
#define B_PRIXSIZE __HAIKU_PRI_PREFIX_ADDR "X"
|
|
|
|
/* ssize_t */
|
|
|
|
#define B_PRIdSSIZE __HAIKU_PRI_PREFIX_ADDR "d"
|
|
|
|
#define B_PRIiSSIZE __HAIKU_PRI_PREFIX_ADDR "i"
|
|
|
|
/* addr_t */
|
|
|
|
#define B_PRIuADDR __HAIKU_PRI_PREFIX_ADDR "u"
|
|
|
|
#define B_PRIoADDR __HAIKU_PRI_PREFIX_ADDR "o"
|
|
|
|
#define B_PRIxADDR __HAIKU_PRI_PREFIX_ADDR "x"
|
|
|
|
#define B_PRIXADDR __HAIKU_PRI_PREFIX_ADDR "X"
|
|
|
|
/* off_t */
|
|
|
|
#define B_PRIdOFF B_PRId64
|
|
|
|
#define B_PRIiOFF B_PRIi64
|
|
|
|
/* dev_t */
|
|
|
|
#define B_PRIdDEV B_PRId32
|
|
|
|
#define B_PRIiDEV B_PRIi32
|
|
|
|
/* ino_t */
|
|
|
|
#define B_PRIdINO B_PRId64
|
|
|
|
#define B_PRIiINO B_PRIi64
|
2009-11-25 15:02:20 +03:00
|
|
|
/* time_t */
|
|
|
|
#define B_PRIdTIME B_PRId32
|
|
|
|
#define B_PRIiTIME B_PRIi32
|
2009-11-24 22:44:07 +03:00
|
|
|
|
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
/* Empty string ("") */
|
2002-07-09 16:24:59 +04:00
|
|
|
#ifdef __cplusplus
|
2007-01-26 19:36:29 +03:00
|
|
|
extern const char *B_EMPTY_STRING;
|
2002-07-09 16:24:59 +04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
/* min and max comparisons */
|
2002-07-09 16:24:59 +04:00
|
|
|
#ifndef __cplusplus
|
2005-03-26 21:01:40 +03:00
|
|
|
# ifndef min
|
|
|
|
# define min(a,b) ((a)>(b)?(b):(a))
|
|
|
|
# endif
|
|
|
|
# ifndef max
|
|
|
|
# define max(a,b) ((a)>(b)?(a):(b))
|
|
|
|
# endif
|
2009-11-24 22:44:07 +03:00
|
|
|
#endif
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2009-11-24 22:44:07 +03:00
|
|
|
/* min() and max() are functions in C++ */
|
2007-01-26 19:36:29 +03:00
|
|
|
#define min_c(a,b) ((a)>(b)?(b):(a))
|
|
|
|
#define max_c(a,b) ((a)>(b)?(a):(b))
|
|
|
|
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
/* Grandfathering */
|
2005-03-26 21:01:40 +03:00
|
|
|
#ifndef __cplusplus
|
|
|
|
# include <stdbool.h>
|
2009-11-24 22:44:07 +03:00
|
|
|
#endif
|
2002-07-09 16:24:59 +04:00
|
|
|
|
|
|
|
#ifndef NULL
|
2005-03-26 21:01:40 +03:00
|
|
|
# define NULL (0)
|
2002-07-09 16:24:59 +04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
/* Atomic functions; previous value is returned */
|
2007-01-26 19:36:29 +03:00
|
|
|
extern int32 atomic_set(vint32 *value, int32 newValue);
|
|
|
|
extern int32 atomic_test_and_set(vint32 *value, int32 newValue, int32 testAgainst);
|
|
|
|
extern int32 atomic_add(vint32 *value, int32 addValue);
|
|
|
|
extern int32 atomic_and(vint32 *value, int32 andValue);
|
2009-11-24 22:44:07 +03:00
|
|
|
extern int32 atomic_or(vint32 *value, int32 orValue);
|
2007-01-26 19:36:29 +03:00
|
|
|
extern int32 atomic_get(vint32 *value);
|
2003-08-20 06:08:13 +04:00
|
|
|
|
2007-01-26 19:36:29 +03:00
|
|
|
extern int64 atomic_set64(vint64 *value, int64 newValue);
|
|
|
|
extern int64 atomic_test_and_set64(vint64 *value, int64 newValue, int64 testAgainst);
|
|
|
|
extern int64 atomic_add64(vint64 *value, int64 addValue);
|
|
|
|
extern int64 atomic_and64(vint64 *value, int64 andValue);
|
2009-11-24 22:44:07 +03:00
|
|
|
extern int64 atomic_or64(vint64 *value, int64 orValue);
|
2007-01-26 19:36:29 +03:00
|
|
|
extern int64 atomic_get64(vint64 *value);
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
/* Other stuff */
|
2007-01-26 19:36:29 +03:00
|
|
|
extern void* get_stack_frame(void);
|
2002-07-09 16:24:59 +04:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
/* Obsolete or discouraged API */
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
/* use 'true' and 'false' */
|
2002-07-09 16:24:59 +04:00
|
|
|
#ifndef FALSE
|
2005-03-26 21:01:40 +03:00
|
|
|
# define FALSE 0
|
2002-07-09 16:24:59 +04:00
|
|
|
#endif
|
|
|
|
#ifndef TRUE
|
2005-03-26 21:01:40 +03:00
|
|
|
# define TRUE 1
|
2002-07-09 16:24:59 +04:00
|
|
|
#endif
|
|
|
|
|
2008-11-11 02:50:42 +03:00
|
|
|
#endif /* _SUPPORT_DEFS_H */
|