📄 acc_lib.h
字号:
ACCLIB_EXTERN(int, acc_closedir) (acc_dir_p);/*************************************************************************// wrap misc**************************************************************************/#if (ACC_CC_GNUC) && (defined(__CYGWIN__) || defined(__MINGW32__))# define acc_alloca(x) __builtin_alloca((x))#elif (ACC_CC_BORLANDC) && defined(__linux__) /* FIXME: alloca does not work */#elif (HAVE_ALLOCA)# define acc_alloca(x) alloca((x))#endif#if (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)# define acc_stackavail() stackavail()#elif (ACC_ARCH_IA16 && ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0410))# define acc_stackavail() stackavail()#elif (ACC_ARCH_IA16 && ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0400))# if (ACC_OS_WIN16) && (ACC_MM_TINY || ACC_MM_SMALL || ACC_MM_MEDIUM)# else# define acc_stackavail() stackavail()# endif#elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && (ACC_CC_DMC || ACC_CC_SYMANTECC))# define acc_stackavail() stackavail()#elif ((ACC_ARCH_IA16) && ACC_CC_MSC && (_MSC_VER >= 700))# define acc_stackavail() _stackavail()#elif ((ACC_ARCH_IA16) && ACC_CC_MSC)# define acc_stackavail() stackavail()#elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && ACC_CC_TURBOC && (__TURBOC__ >= 0x0450))# define acc_stackavail() stackavail()#elif (ACC_ARCH_IA16 && ACC_CC_TURBOC && (__TURBOC__ >= 0x0400)) ACC_EXTERN_C size_t __cdecl stackavail(void);# define acc_stackavail() stackavail()#elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && (ACC_CC_WATCOMC))# define acc_stackavail() stackavail()#elif (ACC_ARCH_IA16 && ACC_CC_ZORTECHC)# define acc_stackavail() _chkstack()#endifACCLIB_EXTERN(acclib_handle_t, acc_get_osfhandle) (int);ACCLIB_EXTERN(int, acc_isatty) (int);ACCLIB_EXTERN(int, acc_mkdir) (const char*, unsigned);ACCLIB_EXTERN(int, acc_response) (int*, char***);ACCLIB_EXTERN(int, acc_set_binmode) (int, int);ACCLIB_EXTERN(acc_int32l_t, acc_muldiv32) (acc_int32l_t, acc_int32l_t, acc_int32l_t);ACCLIB_EXTERN(acc_uint32l_t, acc_umuldiv32) (acc_uint32l_t, acc_uint32l_t, acc_uint32l_t);/*************************************************************************// uclock (real, i.e. "wall" clock)**************************************************************************/#if defined(acc_int32e_t)ACCLIB_EXTERN(int, acc_tsc_read) (acc_uint32e_t*);ACCLIB_EXTERN(int, acc_tsc_read_add) (acc_uint32e_t*);#endiftypedef struct { /* all private */ acclib_handle_t h; int mode;#if (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t) double qpf;#endif} acc_uclock_handle_t;typedef struct { /* all private */ union { acc_uint32l_t t32;#if !(ACC_OS_DOS16 || ACC_OS_WIN16) double td;# if defined(acc_int64l_t) acc_int64l_t t64;# endif#endif } ticks;#if (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t) acc_int64l_t qpc;#endif} acc_uclock_t;#ifndef acc_uclock_handle_p#define acc_uclock_handle_p acc_uclock_handle_t *#endif#ifndef acc_uclock_p#define acc_uclock_p acc_uclock_t *#endifACCLIB_EXTERN(int, acc_uclock_open) (acc_uclock_handle_p);ACCLIB_EXTERN(int, acc_uclock_close) (acc_uclock_handle_p);ACCLIB_EXTERN(void, acc_uclock_read) (acc_uclock_handle_p, acc_uclock_p);ACCLIB_EXTERN(double, acc_uclock_get_elapsed) (acc_uclock_handle_p, const acc_uclock_p, const acc_uclock_p);/*************************************************************************// performance counters (virtual clock)**************************************************************************/#if defined(acc_int64l_t)typedef struct { /* all private */#if (ACC_OS_POSIX_LINUX) void* h; unsigned cpu_type, cpu_features, cpu_khz, cpu_nrctrs; const char* cpu_name;#else void* h;#endif} acc_perfctr_handle_t;typedef struct { acc_uint64l_t tsc;#if (ACC_OS_POSIX_LINUX) acc_uint64l_t pmc[18];#else acc_uint64l_t pmc[1];#endif} acc_perfctr_clock_t;#ifndef acc_perfctr_handle_p#define acc_perfctr_handle_p acc_perfctr_handle_t *#endif#ifndef acc_perfctr_clock_p#define acc_perfctr_clock_p acc_perfctr_clock_t *#endifACCLIB_EXTERN(int, acc_perfctr_open) (acc_perfctr_handle_p);ACCLIB_EXTERN(int, acc_perfctr_close) (acc_perfctr_handle_p);ACCLIB_EXTERN(void, acc_perfctr_read) (acc_perfctr_handle_p, acc_perfctr_clock_p);ACCLIB_EXTERN(double, acc_perfctr_get_elapsed) (acc_perfctr_handle_p, const acc_perfctr_clock_p, const acc_perfctr_clock_p);ACCLIB_EXTERN(double, acc_perfctr_get_elapsed_tsc) (acc_perfctr_handle_p, acc_uint64l_t);#endif/*************************************************************************// Big Endian / Little Endian**************************************************************************/ACCLIB_EXTERN(unsigned, acc_get_be16) (const acc_hvoid_p);ACCLIB_EXTERN(acc_uint32l_t, acc_get_be24) (const acc_hvoid_p);ACCLIB_EXTERN(acc_uint32l_t, acc_get_be32) (const acc_hvoid_p);ACCLIB_EXTERN(void, acc_set_be16) (acc_hvoid_p, unsigned);ACCLIB_EXTERN(void, acc_set_be24) (acc_hvoid_p, acc_uint32l_t);ACCLIB_EXTERN(void, acc_set_be32) (acc_hvoid_p, acc_uint32l_t);ACCLIB_EXTERN(unsigned, acc_get_le16) (const acc_hvoid_p);ACCLIB_EXTERN(acc_uint32l_t, acc_get_le24) (const acc_hvoid_p);ACCLIB_EXTERN(acc_uint32l_t, acc_get_le32) (const acc_hvoid_p);ACCLIB_EXTERN(void, acc_set_le16) (acc_hvoid_p, unsigned);ACCLIB_EXTERN(void, acc_set_le24) (acc_hvoid_p, acc_uint32l_t);ACCLIB_EXTERN(void, acc_set_le32) (acc_hvoid_p, acc_uint32l_t);#if defined(acc_uint64l_t)ACCLIB_EXTERN(acc_uint64l_t, acc_get_be64) (const acc_hvoid_p);ACCLIB_EXTERN(void, acc_set_be64) (acc_hvoid_p, acc_uint64l_t);ACCLIB_EXTERN(acc_uint64l_t, acc_get_le64) (const acc_hvoid_p);ACCLIB_EXTERN(void, acc_set_le64) (acc_hvoid_p, acc_uint64l_t);#endif/* inline versions */#if (ACC_ARCH_AMD64 || ACC_ARCH_IA32)# define ACC_GET_LE16(p) (* (const unsigned short *) (p))# define ACC_GET_LE32(p) (* (const acc_uint32e_t *) (p))# define ACC_SET_LE16(p,v) (* (unsigned short *) (p) = (unsigned short) (v))# define ACC_SET_LE32(p,v) (* (acc_uint32e_t *) (p) = (acc_uint32e_t) (v))#endif#if (ACC_ARCH_AMD64)# define ACC_GET_LE64(p) (* (const acc_uint64l_t *) (p))# define ACC_SET_LE64(p,v) (* (acc_uint64l_t *) (p) = (acc_uint64l_t) (v))#endif/*************************************************************************// getopt**************************************************************************/typedef struct { const char* name; int has_arg; int* flag; int val;} acc_getopt_longopt_t;#ifndef acc_getopt_longopt_p#define acc_getopt_longopt_p acc_getopt_longopt_t *#endiftypedef struct { int go_argc; char** go_argv; const char* go_shortopts; const acc_getopt_longopt_p longopts;#if (ACC_BROKEN_CDECL_ALT_SYNTAX) int __acc_cdecl_va (*go_error)(const char *, ...);#else int (__acc_cdecl_va *go_error)(const char *, ...);#endif} acc_getopt_t;#ifndef acc_getopt_p#define acc_getopt_p acc_getopt_t *#endifACCLIB_EXTERN(void, acc_getopt_init) (acc_getopt_p);ACCLIB_EXTERN(int, acc_getopt) (acc_getopt_p);ACCLIB_EXTERN(void, acc_getopt_close)(acc_getopt_p);/*************************************************************************// rand**************************************************************************/typedef struct { /* all private */ acc_uint32l_t seed;} acc_rand31_t;#ifndef acc_rand31_p#define acc_rand31_p acc_rand31_t *#endifACCLIB_EXTERN(void, acc_srand31) (acc_rand31_p, acc_uint32l_t);ACCLIB_EXTERN(acc_uint32l_t, acc_rand31) (acc_rand31_p);#if defined(acc_uint64l_t)typedef struct { /* all private */ acc_uint64l_t seed;} acc_rand48_t;#ifndef acc_rand48_p#define acc_rand48_p acc_rand48_t *#endifACCLIB_EXTERN(void, acc_srand48) (acc_rand48_p, acc_uint32l_t);ACCLIB_EXTERN(acc_uint32l_t, acc_rand48) (acc_rand48_p);ACCLIB_EXTERN(acc_uint32l_t, acc_rand48_r32) (acc_rand48_p);#endif#if defined(acc_uint64l_t)typedef struct { /* all private */ acc_uint64l_t seed;} acc_rand64_t;#ifndef acc_rand64_p#define acc_rand64_p acc_rand64_t *#endifACCLIB_EXTERN(void, acc_srand64) (acc_rand64_p, acc_uint64l_t);ACCLIB_EXTERN(acc_uint32l_t, acc_rand64) (acc_rand64_p);ACCLIB_EXTERN(acc_uint32l_t, acc_rand64_r32) (acc_rand64_p);#endiftypedef struct { /* all private */ unsigned n; acc_uint32l_t s[624];} acc_randmt_t;#ifndef acc_randmt_p#define acc_randmt_p acc_randmt_t *#endifACCLIB_EXTERN(void, acc_srandmt) (acc_randmt_p, acc_uint32l_t);ACCLIB_EXTERN(acc_uint32l_t, acc_randmt) (acc_randmt_p);ACCLIB_EXTERN(acc_uint32l_t, acc_randmt_r32) (acc_randmt_p);#endif /* already included *//*vi:ts=4:et*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -