mirror of
https://github.com/Ed94/metadesk.git
synced 2026-07-12 04:31:24 -07:00
126 lines
2.5 KiB
C++
126 lines
2.5 KiB
C++
#if MD_INTELLISENSE_DIRECTIVES
|
|
#include "cstd.h"
|
|
#endif
|
|
|
|
#ifndef MD_API
|
|
#if MD_COMPILER_MSVC
|
|
# ifdef MD_DYN_LINK
|
|
# ifdef MD_DYN_EXPORT
|
|
# define MD_API __declspec(dllexport)
|
|
# else
|
|
# define MD_API __declspec(dllimport)
|
|
# endif
|
|
# else
|
|
# define MD_API // Empty for static builds
|
|
# endif
|
|
#else
|
|
# ifdef MD_DYN_LINK
|
|
# define MD_API __attribute__((visibility("default")))
|
|
# else
|
|
# define MD_API // Empty for static builds
|
|
# endif
|
|
#endif
|
|
#endif // GEN_API
|
|
|
|
#ifndef internal
|
|
#define internal static
|
|
#endif
|
|
|
|
#ifndef local_persist
|
|
#define local_persist static
|
|
#endif
|
|
|
|
#if MD_COMPILER_CPP
|
|
# ifndef ccast
|
|
# define ccast( type, value ) ( const_cast< type >( (value) ) )
|
|
# endif
|
|
# ifndef pcast
|
|
# define pcast( type, value ) ( * reinterpret_cast< type* >( & ( value ) ) )
|
|
# endif
|
|
# ifndef rcast
|
|
# define rcast( type, value ) reinterpret_cast< type >( value )
|
|
# endif
|
|
# ifndef scast
|
|
# define scast( type, value ) static_cast< type >( value )
|
|
# endif
|
|
#else
|
|
# ifndef ccast
|
|
# define ccast( type, value ) ( (type)(value) )
|
|
# endif
|
|
# ifndef pcast
|
|
# define pcast( type, value ) ( * (type*)(& value) )
|
|
# endif
|
|
# ifndef rcast
|
|
# define rcast( type, value ) ( (type)(value) )
|
|
# endif
|
|
# ifndef scast
|
|
# define scast( type, value ) ( (type)(value) )
|
|
# endif
|
|
#endif
|
|
|
|
#if ! defined(typeof) && (!MD_COMPILER_C || __STDC_VERSION__ < 202311L)
|
|
# if ! MD_COMPILER_C
|
|
# define typeof decltype
|
|
# elif defined(_MSC_VER)
|
|
# define typeof __typeof__
|
|
# elif defined(__GNUC__) || defined(__clang__)
|
|
# define typeof __typeof__
|
|
# else
|
|
# error "Compiler not supported"
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef MD_API_C_BEGIN
|
|
# if MD_COMPILER_C
|
|
# define MD_API_C_BEGIN
|
|
# define MD_API_C_END
|
|
# else
|
|
# define MD_API_C_BEGIN extern "C" {
|
|
# define MD_API_C_END }
|
|
# endif
|
|
#endif
|
|
|
|
#if MD_COMPILER_C
|
|
# if __STDC_VERSION__ >= 202311L
|
|
# define enum_underlying(type) : type
|
|
# else
|
|
# define enum_underlying(type)
|
|
# endif
|
|
#else
|
|
# define enum_underlying(type) : type
|
|
#endif
|
|
|
|
#if MD_COMPILER_C
|
|
# ifndef nullptr
|
|
# define nullptr NULL
|
|
# endif
|
|
|
|
# ifndef MD_REMOVE_PTR
|
|
# define MD_REMOVE_PTR(type) typeof(* ( (type) NULL) )
|
|
# endif
|
|
#endif
|
|
|
|
#if ! defined(MD_PARAM_DEFAULT) && MD_COMPILER_CPP
|
|
# define MD_PARAM_DEFAULT = {}
|
|
#else
|
|
# define MD_PARAM_DEFAULT
|
|
#endif
|
|
|
|
#if MD_DONT_USE_NAMESPACE || MD_COMPILER_C
|
|
# if MD_COMPILER_C
|
|
# define MD_NS
|
|
# define MD_NS_BEGIN
|
|
# define MD_NS_END
|
|
# else
|
|
# define MD_NS ::
|
|
# define MD_NS_BEGIN
|
|
# define MD_NS_END
|
|
# endif
|
|
#else
|
|
namespace MD {}
|
|
namespace md = MD;
|
|
# define MD_NS MD::
|
|
# define MD_NS_BEGIN namespace MD {
|
|
# define MD_NS_END }
|
|
#endif
|