// Copyright (c) 1999-2012 by Digital Mars // All Rights Reserved // written by Walter Bright // http://www.digitalmars.com #ifndef PORT_H #define PORT_H // Portable wrapper around compiler/system specific things. // The idea is to minimize #ifdef's in the app code. #if defined(IN_LLVM) && (LDC_LLVM_VER >= 303) #include "llvm/Config/config.h" #endif #include "longdouble.h" #if _MSC_VER #include // for _isnan #include // for alloca #define strtof strtod #define isnan _isnan typedef __int64 longlong; typedef unsigned __int64 ulonglong; #else typedef long long longlong; typedef unsigned long long ulonglong; #endif typedef double d_time; struct Port { static double nan; static double infinity; static double dbl_max; static double dbl_min; static longdouble ldbl_max; static int isNan(double); static int isNan(longdouble); static int isSignallingNan(double); static int isSignallingNan(longdouble); static int isFinite(double); static int isInfinity(double); static int Signbit(double); static double floor(double); static double pow(double x, double y); static longdouble fmodl(longdouble x, longdouble y); static ulonglong strtoull(const char *p, char **pend, int base); static char *ull_to_string(char *buffer, ulonglong ull); static wchar_t *ull_to_string(wchar_t *buffer, ulonglong ull); // Convert ulonglong to double static double ull_to_double(ulonglong ull); // Get locale-dependent list separator static const char *list_separator(); static const wchar_t *wlist_separator(); static char *strupr(char *); static int memicmp(const char *s1, const char *s2, int n); static int stricmp(const char *s1, const char *s2); static longdouble strtold(const char *p, char **endp); }; #endif