2017-11-13 15:06:08 +00:00
# ifndef _WDLTYPES_
# define _WDLTYPES_
# ifdef _MSC_VER
typedef __int64 WDL_INT64 ;
typedef unsigned __int64 WDL_UINT64 ;
# else
typedef long long WDL_INT64 ;
typedef unsigned long long WDL_UINT64 ;
# endif
# ifdef _MSC_VER
# define WDL_UINT64_CONST(x) (x##ui64)
# define WDL_INT64_CONST(x) (x##i64)
# else
# define WDL_UINT64_CONST(x) (x##ULL)
# define WDL_INT64_CONST(x) (x##LL)
# endif
# if !defined(_MSC_VER) || _MSC_VER > 1200
# define WDL_DLGRET INT_PTR CALLBACK
# else
# define WDL_DLGRET BOOL CALLBACK
# endif
# ifdef _WIN32
2022-04-14 20:31:54 +00:00
// hacks so it builds with juce
# define NOGDI
# define NOMINMAX
2017-11-13 15:06:08 +00:00
# include <windows.h>
# else
# include <stdint.h>
typedef intptr_t INT_PTR ;
typedef uintptr_t UINT_PTR ;
# endif
# if defined(__ppc__) || !defined(__cplusplus)
typedef char WDL_bool ;
# else
typedef bool WDL_bool ;
# endif
# ifndef GWLP_USERDATA
# define GWLP_USERDATA GWL_USERDATA
# define GWLP_WNDPROC GWL_WNDPROC
# define GWLP_HINSTANCE GWL_HINSTANCE
# define GWLP_HWNDPARENT GWL_HWNDPARENT
# define DWLP_USER DWL_USER
# define DWLP_DLGPROC DWL_DLGPROC
# define DWLP_MSGRESULT DWL_MSGRESULT
# define SetWindowLongPtr(a,b,c) SetWindowLong(a,b,c)
# define GetWindowLongPtr(a,b) GetWindowLong(a,b)
# define SetWindowLongPtrW(a,b,c) SetWindowLongW(a,b,c)
# define GetWindowLongPtrW(a,b) GetWindowLongW(a,b)
# define SetWindowLongPtrA(a,b,c) SetWindowLongA(a,b,c)
# define GetWindowLongPtrA(a,b) GetWindowLongA(a,b)
# define GCLP_WNDPROC GCL_WNDPROC
# define GCLP_HICON GCL_HICON
# define GCLP_HICONSM GCL_HICONSM
# define SetClassLongPtr(a,b,c) SetClassLong(a,b,c)
# define GetClassLongPtr(a,b) GetClassLong(a,b)
# endif
# ifdef __GNUC__
// for structures that contain doubles, or doubles in structures that are after stuff of questionable alignment (for OSX/linux)
# define WDL_FIXALIGN __attribute__ ((aligned (8)))
// usage: void func(int a, const char *fmt, ...) WDL_VARARG_WARN(printf,2,3); // note: if member function, this pointer is counted as well, so as member function that would be 3,4
# define WDL_VARARG_WARN(x,n,s) __attribute__ ((format (x,n,s)))
# define WDL_STATICFUNC_UNUSED __attribute__((unused))
# else
# define WDL_FIXALIGN
# define WDL_VARARG_WARN(x,n,s)
# define WDL_STATICFUNC_UNUSED
# endif
# ifndef WDL_WANT_NEW_EXCEPTIONS
# if defined(__cplusplus)
# include <new>
# define WDL_NEW (std::nothrow)
# endif
# else
# define WDL_NEW
# endif
# if !defined(max) && defined(WDL_DEFINE_MINMAX)
# define max(x,y) ((x)<(y)?(y):(x))
# define min(x,y) ((x)<(y)?(x):(y))
# endif
# ifndef wdl_max
# define wdl_max(x,y) ((x)<(y)?(y):(x))
# define wdl_min(x,y) ((x)<(y)?(x):(y))
# define wdl_abs(x) ((x)<0 ? -(x) : (x))
# endif
# ifndef _WIN32
# ifndef strnicmp
# define strnicmp(x,y,z) strncasecmp(x,y,z)
# endif
# ifndef stricmp
# define stricmp(x,y) strcasecmp(x,y)
# endif
# endif
# ifdef WDL_BACKSLASHES_ARE_ORDINARY
# define WDL_IS_DIRCHAR(x) ((x) == ' / ')
# else
// for multi-platform applications it seems better to treat backslashes as directory separators even if it
// isn't supported by the underying system (for resolving filenames, etc)
# ifdef _WIN32
# define WDL_IS_DIRCHAR(x) ((x) == '\\' || (x) == ' / ')
# else
# define WDL_IS_DIRCHAR(x) ((x) == ' / ' || (x) == '\\')
# endif
# endif
# if defined(_WIN32) && !defined(WDL_BACKSLASHES_ARE_ORDINARY)
# define WDL_DIRCHAR '\\'
# define WDL_DIRCHAR_STR "\\"
# else
# define WDL_DIRCHAR ' / '
# define WDL_DIRCHAR_STR " / "
# endif
# if defined(_WIN32) || defined(__APPLE__)
// on __APPLE__ we should ideally check the filesystem for case-sensitivity, assuming a case-insensitive-only match
# define wdl_filename_cmp(x,y) stricmp(x,y)
# define wdl_filename_cmpn(x,y,n) strnicmp(x,y,n)
# else
# define wdl_filename_cmp(x,y) strcmp(x,y)
# define wdl_filename_cmpn(x,y,n) strncmp(x,y,n)
# endif
# if defined(__GNUC__) || defined(__INTEL_COMPILER)
# define WDL_likely(x) __builtin_expect(!!(x),1)
# define WDL_unlikely(x) __builtin_expect(!!(x),0)
# else
# define WDL_likely(x) (!!(x))
# define WDL_unlikely(x) (!!(x))
# endif
# if defined(_DEBUG) || defined(DEBUG)
# include <assert.h>
# define WDL_ASSERT(x) assert(x)
# define WDL_NORMALLY(x) (assert(x),1)
# define WDL_NOT_NORMALLY(x) (assert(!(x)),0)
# else
# define WDL_ASSERT(x)
# define WDL_NORMALLY(x) WDL_likely(x)
# define WDL_NOT_NORMALLY(x) WDL_unlikely(x)
# endif
# endif