32 #include <sys/socket.h> 35 #if !defined (__GNUC__) 36 #define __attribute__(X) 39 #if defined (__GNUC__) && defined (__GNUC_MINOR__) && defined (__GNUC_PATCHLEVEL__) 40 #define CUB_GCC_VERSION (__GNUC__ * 10000 \ 41 + __GNUC_MINOR__ * 100 \ 42 + __GNUC_PATCHLEVEL__) 46 #define IMPORT_VAR __declspec(dllimport) 47 #define EXPORT_VAR __declspec(dllexport) 50 #define IMPORT_VAR extern 64 #define ONE_G 1073741824 65 #define ONE_T 1099511627776LL 66 #define ONE_P 1125899906842624LL 70 #define ONE_HOUR 3600000 75 #define LLONG_MAX 9223372036854775807LL 78 #define LLONG_MIN (-LLONG_MAX - 1LL) 81 #define ULLONG_MAX 18446744073709551615ULL 85 #define MEM_SIZE_IS_VALID(size) \ 86 (((long long unsigned) (size) <= ULONG_MAX) \ 87 || (sizeof (long long unsigned) <= sizeof (size_t))) 89 #if defined (__cplusplus) 90 #include <type_traits> 98 #include <sys/timeb.h> 100 #include <sys/locking.h> 103 #include <sys/types.h> 104 #include <sys/stat.h> 108 #if !defined (ENOMSG) 113 #if !defined PATH_MAX 116 #if !defined NAME_MAX 120 #if !defined (_MSC_VER) || _MSC_VER < 1700 || (defined __cplusplus && _MSC_VER == 1700) 121 #define log2(x) (log ((double) x) / log ((double) 2)) 123 extern char *realpath (
const char *path,
char *resolved_path);
124 #define sleep(sec) Sleep(1000*(sec)) 125 #define usleep(usec) Sleep((usec)/1000) 127 #define mkdir(dir, mode) _mkdir(dir) 128 #define getpid() _getpid() 129 #define snprintf _sprintf_p 130 #define strcasecmp(str1, str2) _stricmp(str1, str2) 131 #define strncasecmp(str1, str2, size) _strnicmp(str1, str2, size) 132 #define lseek(fd, offset, origin) _lseeki64(fd, offset, origin) 133 #define fseek(fd, offset, origin) _fseeki64(fd, offset, origin) 134 #define ftruncate(fd, size) _chsize_s(fd, size) 135 #define strdup(src) _strdup(src) 136 #define getcwd(buffer, length) _getcwd(buffer, length) 138 #define pclose _pclose 139 #define strtok_r strtok_s 140 #define strtoll _strtoi64 141 #define strtoull _strtoui64 143 #define stat _stati64 144 #define fstat _fstati64 145 #define ftell _ftelli64 146 #define ftime _ftime_s 148 #define fileno _fileno 149 #define vsnprintf cub_vsnprintf 150 #define tempnam _tempnam 151 #define printf _printf_p 152 #define fprintf _fprintf_p 153 #define vfprintf _vfprintf_p 154 #define vprintf _vprintf_p 155 #define strtof strtof_win 157 #define mktime mktime_for_win32 159 #if (_WIN32_WINNT < 0x0600) 160 #define POLLRDNORM 0x0100 161 #define POLLRDBAND 0x0200 162 #define POLLIN (POLLRDNORM | POLLRDBAND) 163 #define POLLPRI 0x0400 165 #define POLLWRNORM 0x0010 166 #define POLLOUT (POLLWRNORM) 167 #define POLLWRBAND 0x0020 169 #define POLLERR 0x0001 170 #define POLLHUP 0x0002 171 #define POLLNVAL 0x0004 181 typedef unsigned long int nfds_t;
182 extern int poll (
struct pollfd *fds, nfds_t nfds,
int timeout);
185 #define O_RDONLY _O_RDONLY 197 #define O_CREAT _O_CREAT|_O_BINARY 198 #define O_RDWR _O_RDWR|_O_BINARY 199 #define O_RDONLY _O_RDONLY|_O_BINARY 200 #define O_TRUNC _O_TRUNC|_O_BINARY 201 #define O_EXCL _O_EXCL|_O_BINARY 211 #define S_IRWXU _S_IREAD | _S_IWRITE | _S_IEXEC 213 #define S_IRWXG S_IRWXU 215 #define S_IRWXO S_IRWXU 223 #define F_ULOCK _LK_UNLCK 224 #define F_LOCK _LK_LOCK 225 #define F_TLOCK _LK_NBLCK 229 #define _PC_NAME_MAX 4 230 #define _PC_PATH_MAX 5 231 #define _PC_NO_TRUNC 8 233 typedef char *caddr_t;
235 typedef SSIZE_T ssize_t;
242 unsigned short st_mode;
252 extern int stat (
const char *path,
struct stat *buf);
255 extern int gettimeofday (
struct timeval *tp,
void *tzp);
257 extern int lockf (
int fd,
int cmd,
long size);
259 extern char *cuserid (
char *
string);
261 extern int getlogin_r (
char *buf,
size_t bufsize);
263 extern struct tm *localtime_r (
const time_t * time,
struct tm *tm_val);
265 extern char *ctime_r (
const time_t * time,
char *time_buf);
268 extern int umask (
int mask);
270 int fsync (
int filedes);
272 long pathconf (
char *path,
int name);
277 typedef struct sigsettype
280 void (*abrt_state) (int);
281 void (*fpe_state) (int);
282 void (*ill_state) (int);
283 void (*int_state) (int);
284 void (*term_state) (int);
285 void (*sev_state) (int);
288 int sigfillset (sigset_t *
set);
290 int sigprocmask (
int how, sigset_t *
set, sigset_t * oldset);
295 extern void pc_init (
void);
296 extern void pc_final (
void);
297 #if defined (ENABLE_UNUSED_FUNCTION) 298 extern int lock_region (
int fd,
int cmd,
long offset,
long size);
300 extern int free_space (
const char *,
int);
302 #define _longjmp longjmp 308 #if !defined (HAVE_CTIME_R) 309 #error "HAVE_CTIME_R" 312 #if !defined (HAVE_LOCALTIME_R) 313 #error "HAVE_LOCALTIME_R" 316 #if !defined (HAVE_DRAND48_R) 317 #error "HAVE_DRAND48_R" 323 #define snprintf_dots_truncate(dest, max_len, ...) \ 324 if (snprintf (dest, max_len, __VA_ARGS__) < 0) \ 325 snprintf (dest + max_len - 4, 4, "...") 326 #define strncpy_size(buf, str, size) \ 327 strncpy (buf, str, size); buf[(size) - 1] = '\0' 328 #if defined (__cplusplus) 332 check_is_array (
const T & a)
334 static_assert (std::is_array<T>::value == 1,
"expected array");
336 #define strncpy_bufsize(buf, str) \ 337 strncpy_size (buf, str, sizeof (buf)); check_is_array (buf) 340 #define strncpy_bufsize(buf, str) \ 341 strncpy_size (buf, str, sizeof (buf)) 344 #if defined (WINDOWS) 345 #define PATH_SEPARATOR '\\' 347 #define PATH_SEPARATOR '/' 349 #define PATH_CURRENT '.' 351 #define IS_PATH_SEPARATOR(c) ((c) == PATH_SEPARATOR) 353 #if defined (WINDOWS) 354 #define IS_ABS_PATH(p) IS_PATH_SEPARATOR((p)[0]) \ 355 || (isalpha((p)[0]) && (p)[1] == ':' && IS_PATH_SEPARATOR((p)[2])) 357 #define IS_ABS_PATH(p) IS_PATH_SEPARATOR((p)[0]) 364 #if defined (SOLARIS) || defined (WINDOWS) 365 #define LONGJMP longjmp 366 #define SETJMP setjmp 368 #define LONGJMP _longjmp 369 #define SETJMP _setjmp 379 #define CUB_MAXHOSTNAMELEN 256 381 #define GETHOSTNAME(p, l) css_gethostname(p, l) 383 #if defined (WINDOWS) 384 #define FINITE(x) _finite(x) 386 #define FINITE(x) isfinite(x) 388 #define FINITE(x) finite(x) 391 #if defined (WINDOWS) 392 #define difftime64(time1, time2) _difftime64(time1, time2) 394 #define difftime64(time1, time2) difftime(time1, time2) 397 #if defined (WINDOWS) 399 #define wcswcs(ws1, ws2) wcsstr((ws1), (ws2)) 401 #define wcsspn(ws1, ws2) ((int) wcsspn((ws1), (ws2))) 404 #if defined (SOLARIS) 405 #define wcslen(ws) wslen((ws)) 406 #define wcschr(ws, wc) wschr((ws), (wc)) 407 #define wcsrchr(ws, wc) wsrchr((ws), (wc)) 408 #define wcstok(ws1, ws2) wstok((ws1), (ws2)) 409 #define wcscoll(ws1, ws2) wscoll((ws1), (ws2)) 410 #define wcsspn(ws1, ws2) wsspn((ws1), (ws2)) 411 #define wcscspn(ws1, ws2) wscspn((ws1), (ws2)) 412 #define wcscmp(ws1, ws2) wscmp((ws1), (ws2)) 413 #define wcsncmp(ws1, ws2, n) wsncmp((ws1), (ws2), (n)) 414 #define wcscpy(ws1, ws2) wscpy((ws1), (ws2)) 415 #define wcsncpy(ws1, ws2, n) wsncpy((ws1), (ws2), (n)) 418 #if !defined (HAVE_STRDUP) 419 extern char *
strdup (
const char *str);
422 #if !defined (HAVE_VASPRINTF) 423 extern int vasprintf (
char **ptr,
const char *format, va_list ap);
425 #if !defined (HAVE_ASPRINTF) 426 extern int asprintf (
char **ptr,
const char *format, ...);
428 #if defined (HAVE_ERR_H) 431 #define err(fd, ...) do { fprintf(stderr, __VA_ARGS__); exit(1); } while (0) 432 #define errx(fd, ...) do { fprintf(stderr, __VA_ARGS__); exit(1); } while (0) 434 extern int cub_dirname_r (
const char *path,
char *pathbuf,
size_t buflen);
436 double aix_ceil (
double x);
437 #define ceil(x) aix_ceil(x) 440 #if !defined (HAVE_DIRNAME) 441 char *
dirname (
const char *path);
443 extern int basename_r (
const char *path,
char *pathbuf,
size_t buflen);
444 #if !defined (HAVE_BASENAME) 445 extern char *
basename (
const char *path);
447 #if defined (WINDOWS) 448 #if !defined (HAVE_STRSEP) 449 extern char *strsep (
char **stringp,
const char *delim);
451 extern char *getpass (
const char *prompt);
454 #if defined (ENABLE_UNUSED_FUNCTION) 455 extern int utona (
unsigned int u,
char *s,
size_t n);
456 extern int itona (
int i,
char *s,
size_t n);
459 extern char *
stristr (
const char *s,
const char *find);
462 #define SUPPRESS_STRLEN_WARNING 468 #define strlen(s1) ((int) strlen(s1)) 470 #define CAST_STRLEN (int) 471 #define CAST_BUFLEN (int) 472 #if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 32 473 #define OFF_T_MAX INT_MAX 475 #define OFF_T_MAX LLONG_MAX 478 #if defined (WINDOWS) 479 #define IS_INVALID_SOCKET(socket) ((socket) == INVALID_SOCKET) 480 typedef int socklen_t;
483 #define INVALID_SOCKET (-1) 484 #define IS_INVALID_SOCKET(socket) ((socket) < 0) 490 extern char *
getuserid (
char *
string,
int size);
494 extern int os_rename_file (
const char *src_path,
const char *dest_path);
497 #if defined (WINDOWS) 498 #define os_send_kill() os_send_signal(SIGABRT) 500 #define os_send_kill() os_send_signal(SIGKILL) 506 #if defined (WINDOWS) 507 #define atoll(a) _atoi64((a)) 508 #if !defined(_MSC_VER) || _MSC_VER < 1800 510 #define llabs(a) _abs64((a)) 514 #if defined (AIX) && !defined (NAME_MAX) 515 #define NAME_MAX pathconf("/",_PC_NAME_MAX) 518 #if defined (AIX) && !defined (DONT_HOOK_MALLOC) 519 void *aix_malloc (
size_t size);
520 #define malloc(a) aix_malloc(a) 523 #if defined (AIX) && !defined (SOL_TCP) 524 #define SOL_TCP IPPROTO_TCP 527 #if defined (WINDOWS) 528 int setenv (
const char *name,
const char *value,
int overwrite);
529 int cub_vsnprintf (
char *buffer,
size_t count,
const char *format, va_list argptr);
532 #if defined (WINDOWS) 538 unsigned short _rand48_seed[3];
544 extern long lrand48 (
void);
545 extern void srand48 (
long seed);
546 extern double drand48 (
void);
547 extern int srand48_r (
long int seedval,
struct drand48_data *buffer);
548 extern int lrand48_r (
struct drand48_data *buffer,
long int *result);
549 extern int drand48_r (
struct drand48_data *buffer,
double *result);
550 extern int rand_r (
unsigned int *seedp);
552 #if !defined(_MSC_VER) || _MSC_VER < 1800 554 extern double round (
double d);
561 CRITICAL_SECTION *csp;
565 typedef HANDLE pthread_mutexattr_t;
568 #define WATERMARK_MUTEX_INITIALIZED 0x96438AF7 570 #define PTHREAD_MUTEX_INITIALIZER {{ NULL, 0, 0, NULL, NULL, 0 }, NULL, 0} 581 CONDITION_VARIABLE native_cond;
586 unsigned int waiting;
587 CRITICAL_SECTION lock_waiting;
588 HANDLE events[MAX_EVENTS];
589 HANDLE broadcast_block_event;
594 typedef HANDLE pthread_condattr_t;
596 #if !defined (ETIMEDOUT) 597 #define ETIMEDOUT WAIT_TIMEOUT 599 #define PTHREAD_COND_INITIALIZER { NULL } 601 #if defined(_MSC_VER) && _MSC_VER >= 1900 && !defined(_CRT_NO_TIME_T) 602 #define _TIMESPEC_DEFINED 604 #if !defined(_TIMESPEC_DEFINED) 605 #define _TIMESPEC_DEFINED 613 extern pthread_mutex_t css_Internal_mutex_for_mutex_initialize;
618 void port_win_mutex_init_and_lock (pthread_mutex_t *
mutex);
619 int port_win_mutex_init_and_trylock (pthread_mutex_t *
mutex);
624 if (mutex->csp == &mutex->cs && mutex->watermark == WATERMARK_MUTEX_INITIALIZED)
626 EnterCriticalSection (mutex->csp);
630 port_win_mutex_init_and_lock (mutex);
639 if (mutex->csp->LockCount == -1)
646 LeaveCriticalSection (mutex->csp);
653 if (mutex->csp == &mutex->cs && mutex->watermark == WATERMARK_MUTEX_INITIALIZED)
655 if (TryEnterCriticalSection (mutex->csp))
657 if (mutex->csp->RecursionCount > 1)
659 LeaveCriticalSection (mutex->csp);
670 return port_win_mutex_init_and_trylock (mutex);
676 int pthread_mutexattr_init (pthread_mutexattr_t * attr);
677 int pthread_mutexattr_settype (pthread_mutexattr_t * attr,
int type);
678 int pthread_mutexattr_destroy (pthread_mutexattr_t * attr);
680 int pthread_cond_init (pthread_cond_t * cond,
const pthread_condattr_t * attr);
681 int pthread_cond_wait (pthread_cond_t * cond, pthread_mutex_t * mutex);
682 int pthread_cond_timedwait (pthread_cond_t * cond, pthread_mutex_t * mutex,
struct timespec *ts);
683 int pthread_cond_destroy (pthread_cond_t * cond);
684 int pthread_cond_signal (pthread_cond_t * cond);
685 int pthread_cond_broadcast (pthread_cond_t * cond);
690 typedef HANDLE pthread_t;
691 typedef int pthread_attr_t;
692 typedef int pthread_key_t;
694 #define THREAD_RET_T unsigned int 695 #define THREAD_CALLING_CONVENTION __stdcall 697 int pthread_create (pthread_t * thread,
const pthread_attr_t * attr,
700 pthread_t pthread_self (
void);
701 int pthread_join (pthread_t thread,
void **value_ptr);
703 #define pthread_attr_init(dummy1) 0 704 #define pthread_attr_destroy(dummy1) 0 706 int pthread_key_create (pthread_key_t * key,
void (*destructor) (
void *));
707 int pthread_key_delete (pthread_key_t key);
708 int pthread_setspecific (pthread_key_t key,
const void *value);
709 void *pthread_getspecific (pthread_key_t key);
713 #define THREAD_RET_T void* 714 #define THREAD_CALLING_CONVENTION 718 #if (defined (WINDOWS) || defined (X86)) 719 #define COPYMEM(type,dst,src) do { \ 720 *((type *) (dst)) = *((type *) (src)); \ 723 #define COPYMEM(type,dst,src) do { \ 724 memcpy((dst), (src), sizeof(type)); \ 750 #if defined (WINDOWS) 751 #define MEMORY_BARRIER() \ 753 #define HAVE_ATOMIC_BUILTINS 755 #if defined (HAVE_GCC_ATOMIC_BUILTINS) 756 #define HAVE_ATOMIC_BUILTINS 757 #if defined (X86) && defined (CUB_GCC_VERSION) && (CUB_GCC_VERSION < 40400) 758 #define MEMORY_BARRIER() \ 760 asm volatile("mfence" ::: "memory"); \ 761 __sync_synchronize(); \ 764 #define MEMORY_BARRIER() \ 772 #if defined(HAVE_ATOMIC_BUILTINS) 774 #if defined (WINDOWS) 784 extern UINT64 win32_compare_exchange64 (UINT64
volatile *val_ptr, UINT64 swap_val, UINT64 cmp_val);
785 extern UINT64 win32_exchange_add64 (UINT64
volatile *ptr, UINT64 amount);
786 extern UINT64 win32_exchange64 (UINT64
volatile *ptr, UINT64 new_val);
792 #define static_assert(a, b) 796 template <
typename T,
typename V>
inline T ATOMIC_INC_32 (
volatile T *ptr, V amount)
798 static_assert (
sizeof (T) ==
sizeof (UINT32),
"Not 32bit");
799 static_assert (
sizeof (V) ==
sizeof (UINT32),
"Not 32bit");
800 #if defined (WINDOWS) 802 return InterlockedExchangeAdd (reinterpret_cast <volatile LONG *>(ptr), amount) + amount;
804 return InterlockedExchangeAdd (reinterpret_cast <volatile UINT32 *>(ptr), amount) + amount;
807 return __sync_add_and_fetch (ptr, amount);
811 template <
typename T,
typename V1,
typename V2>
inline bool ATOMIC_CAS_32 (
volatile T *ptr, V1 cmp_val, V2 swap_val)
813 static_assert (
sizeof (T) ==
sizeof (UINT32),
"Not 32bit");
814 static_assert (
sizeof (V1) ==
sizeof (UINT32),
"Not 32bit");
815 static_assert (
sizeof (V2) ==
sizeof (UINT32),
"Not 32bit");
816 #if defined (WINDOWS) 818 return InterlockedCompareExchange (reinterpret_cast <volatile LONG *>(ptr), swap_val, cmp_val) == cmp_val;
820 return InterlockedCompareExchange (reinterpret_cast <volatile UINT32 *>(ptr), swap_val, cmp_val) == cmp_val;
823 return __sync_bool_compare_and_swap (ptr, cmp_val, swap_val);
827 template <
typename T,
typename V>
inline T ATOMIC_TAS_32 (
volatile T *ptr, V amount)
829 static_assert (
sizeof (T) ==
sizeof (UINT32),
"Not 32bit");
830 static_assert (
sizeof (V) <=
sizeof (UINT32),
"Not 32bit");
831 #if defined (WINDOWS) 833 return InterlockedExchange (reinterpret_cast <volatile LONG *>(ptr), amount);
835 return InterlockedExchange (reinterpret_cast <volatile UINT32 *>(ptr), amount);
838 return __sync_lock_test_and_set (ptr, amount);
842 template <
typename T,
typename V>
inline T ATOMIC_INC_64 (
volatile T *ptr, V amount)
844 static_assert (
sizeof (T) ==
sizeof (UINT64),
"Not 64bit");
846 return (T) InterlockedExchangeAdd64 (reinterpret_cast <volatile INT64 *>(ptr), amount) + amount;
847 #elif defined(WINDOWS) 848 return win32_exchange_add64 (reinterpret_cast <volatile UINT64 *>(ptr), amount) + amount;
850 return __sync_add_and_fetch (ptr, amount);
854 template <
typename T,
typename V1,
typename V2>
inline bool ATOMIC_CAS_64 (
volatile T *ptr, V1 cmp_val, V2 swap_val)
856 static_assert (
sizeof (T) ==
sizeof (UINT64),
"Not 64bit");
858 return InterlockedCompareExchange64 (reinterpret_cast <volatile INT64 *>(ptr), swap_val, cmp_val) == cmp_val;
859 #elif defined(WINDOWS) 860 return win32_compare_exchange64 (reinterpret_cast <volatile UINT64 *>(ptr), swap_val, cmp_val) == cmp_val;
862 return __sync_bool_compare_and_swap (ptr, cmp_val, swap_val);
866 template <
typename T,
typename V>
inline T ATOMIC_TAS_64 (
volatile T *ptr, V amount)
868 static_assert (
sizeof (T) ==
sizeof (UINT64),
"Not 64bit");
870 return (T) InterlockedExchange64 (reinterpret_cast <volatile INT64 *>(ptr), (__int64) amount);
871 #elif defined(WINDOWS) 872 return win32_exchange64 (reinterpret_cast <volatile UINT64 *>(ptr), amount);
874 return __sync_lock_test_and_set (ptr, amount);
880 template <
bool B>
struct Bool2Type
885 template <
typename T,
typename V1,
typename V2>
inline bool atomic_cas (
volatile T *ptr, V1 cmp_val, V2 swap_val,
888 return ATOMIC_CAS_64 (ptr, cmp_val, swap_val);
891 template <
typename T,
typename V1,
typename V2>
inline bool atomic_cas (
volatile T *ptr, V1 cmp_val, V2 swap_val,
894 return ATOMIC_CAS_32 (ptr, cmp_val, swap_val);
897 template <
typename T,
typename V>
inline T atomic_tas (
volatile T *ptr, V amount, Bool2Type <true> )
899 return ATOMIC_TAS_64 (ptr, amount);
902 template <
typename T,
typename V>
inline T atomic_tas (
volatile T * ptr, V amount, Bool2Type <false> )
904 return ATOMIC_TAS_32 (ptr, amount);
907 template <
typename T,
typename V>
inline T atomic_inc (
volatile T *ptr, V amount, Bool2Type <true> )
909 return ATOMIC_INC_64 (ptr, amount);
912 template <
typename T,
typename V>
inline T atomic_inc (
volatile T * ptr, V amount, Bool2Type <false> )
914 return ATOMIC_INC_32 (ptr, amount);
918 template <
typename T,
typename V>
inline T ATOMIC_TAS (
volatile T *ptr, V amount)
920 return dispatch::atomic_tas (ptr, amount, dispatch::Bool2Type <
sizeof (T) ==
sizeof (UINT64)> ());
923 template <
typename T,
typename V1,
typename V2>
inline bool ATOMIC_CAS (
volatile T *ptr, V1 cmp_val, V2 swap_val)
925 return dispatch::atomic_cas (ptr, cmp_val, swap_val, dispatch::Bool2Type <
sizeof (T) ==
sizeof (UINT64)> ());
928 template <
typename T>
inline T *ATOMIC_TAS_ADDR (T *
volatile *ptr, T *new_val)
930 #if defined (WINDOWS) 931 return static_cast <T *>(InterlockedExchangePointer (reinterpret_cast <volatile PVOID *>(ptr), new_val));
933 return __sync_lock_test_and_set (ptr, new_val);
937 template <
typename T>
inline bool ATOMIC_CAS_ADDR (T *
volatile *ptr, T *cmp_val, T *swap_val)
939 #if defined (WINDOWS) 940 return InterlockedCompareExchangePointer (reinterpret_cast <volatile PVOID *>(ptr), swap_val, cmp_val) == cmp_val;
942 return __sync_bool_compare_and_swap (ptr, cmp_val, swap_val);
946 template <
typename T,
typename V>
inline T ATOMIC_INC (
volatile T *ptr, V amount)
948 return dispatch::atomic_inc (ptr, amount, dispatch::Bool2Type <
sizeof (T) ==
sizeof (UINT64)> ());
951 template <
typename T>
inline T ATOMIC_LOAD (
volatile T *ptr)
953 return ATOMIC_INC (ptr, 0);
956 template <
typename T,
typename V>
inline void ATOMIC_STORE (
volatile T *ptr, V amount)
958 (void) ATOMIC_TAS (ptr, amount);
963 #define ATOMIC_LOAD_64(ptr) ATOMIC_INC_64(ptr, 0) 964 #define ATOMIC_STORE_64(ptr, val) ATOMIC_TAS(ptr, val) 968 #if defined (WINDOWS) 969 extern double strtod_win (
const char *str,
char **end_ptr);
970 #define string_to_double(str, end_ptr) strtod_win((str), (end_ptr)); 972 #define string_to_double(str, end_ptr) strtod((str), (end_ptr)) 983 extern char *
trim (
char *str);
985 extern int parse_bigint (INT64 * ret_p,
const char *str_p,
int base);
987 extern int str_to_int32 (
int *ret_p,
char **end_p,
const char *str_p,
int base);
988 extern int str_to_uint32 (
unsigned int *ret_p,
char **end_p,
const char *str_p,
int base);
989 extern int str_to_int64 (INT64 * ret_p,
char **end_p,
const char *str_p,
int base);
990 extern int str_to_uint64 (UINT64 * ret_p,
char **end_p,
const char *str_p,
int base);
991 extern int str_to_double (
double *ret_p,
char **end_p,
const char *str_p);
992 extern int str_to_float (
float *ret_p,
char **end_p,
const char *str_p);
994 #if defined (WINDOWS) 995 extern float strtof_win (
const char *nptr,
char **endptr);
999 extern size_t strlcpy (
char *,
const char *,
size_t);
1002 #if (defined (WINDOWS) && defined (_WIN32)) 1003 extern time_t mktime_for_win32 (
struct tm *tm);
1006 #if (defined (WINDOWS) && !defined (PRId64)) 1007 #define PRId64 "lld" 1008 #define PRIx64 "llx" 1011 extern int msleep (
const long msec);
1017 extern int parse_int (
int *ret_p,
const char *str_p,
int base);
1022 #if defined (_MSC_VER) || defined (__GNUC__) 1023 #define PORTABLE_FUNC_NAME __func__ 1025 #define PORTABLE_FUNC_NAME "(unknown)" 1029 #define UNUSED(x) UNUSED_ ## x __attribute__((__unused__)) 1035 #define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x 1037 #define UNUSED_FUNCTION(x) x 1045 #error "STATIC_CAST definition conflict" 1048 #define STATIC_CAST(dest_type, expr) static_cast<dest_type>(expr) 1050 #define STATIC_CAST(dest_type, expr) ((dest_type) (expr)) 1055 #error "CONST_CAST definition conflict" 1058 #define CONST_CAST(dest_type, expr) const_cast<dest_type>(expr) 1060 #define CONST_CAST(dest_type, expr) ((dest_type) (expr)) 1065 #error "DYNAMIC_CAST definition conflict" 1068 #define DYNAMIC_CAST(dest_type, expr) dynamic_cast<dest_type>(expr) 1070 #define DYNAMIC_CAST(dest_type, expr) ((dest_type) (expr)) 1074 #ifdef REINTERPRET_CAST 1075 #error "REINTERPRET_CAST definition conflict" 1078 #define REINTERPRET_CAST(dest_type, expr) reinterpret_cast<dest_type>(expr) 1080 #define REINTERPRET_CAST(dest_type, expr) ((dest_type) (expr)) 1087 #error "REFP definition conflict" 1089 #define REFPTR(T, name) T *& name int str_to_int64(INT64 *ret_p, char **end_p, const char *str_p, int base)
#define COND_BROADCAST(a)
void os_send_signal(const int sig_no)
#define pthread_mutex_init(a, b)
#define pthread_mutex_unlock(a)
char * basename(const char *path)
FILE * port_open_memstream(char **ptr, size_t *sizeloc)
char * strdup(const char *str)
int str_to_uint64(UINT64 *ret_p, char **end_p, const char *str_p, int base)
int cub_dirname_r(const char *path, char *pathbuf, size_t buflen)
int vasprintf(char **ptr, const char *format, va_list ap)
int basename_r(const char *path, char *pathbuf, size_t buflen)
int os_rename_file(const char *src_path, const char *dest_path)
#define pthread_mutex_trylock(a)
int timeval_add_msec(struct timeval *added_time, const struct timeval *start_time, int msec)
char * getuserid(char *string, int size)
INT64 timeval_diff_in_msec(const struct timeval *end_time, const struct timeval *start_time)
char * stristr(const char *s, const char *find)
int parse_int(int *ret_p, const char *str_p, int base)
SIGNAL_HANDLER_FUNCTION os_set_signal_handler(const int sig_no, SIGNAL_HANDLER_FUNCTION sig_handler)
void port_close_memstream(FILE *fp, char **ptr, size_t *sizeloc)
static struct timeval start_time
int parse_bigint(INT64 *ret_p, const char *str_p, int base)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
int msleep(const long msec)
int str_to_float(float *ret_p, char **end_p, const char *str_p)
char * dirname(const char *path)
int str_to_double(double *ret_p, char **end_p, const char *str_p)
#define pthread_mutex_lock(a)
int timeval_to_timespec(struct timespec *to, const struct timeval *from)
size_t strlcpy(char *, const char *, size_t)
void(* SIGNAL_HANDLER_FUNCTION)(int sig_no)
int asprintf(char **ptr, const char *format,...)
int str_to_int32(int *ret_p, char **end_p, const char *str_p, int base)
#define THREAD_CALLING_CONVENTION
int str_to_uint32(unsigned int *ret_p, char **end_p, const char *str_p, int base)
#define pthread_mutex_destroy(a)