1#ifndef SLANG_CPP_PRELUDE_H
2#define SLANG_CPP_PRELUDE_H
11#if SLANG_GCC_FAMILY && __GNUC__ < 6
13#define SLANG_PRELUDE_STD std::
16#define SLANG_PRELUDE_STD
27#define SLANG_INTPTR_TYPE_IS_DISTINCT 1
29#define SLANG_INTPTR_TYPE_IS_DISTINCT 0
33#define SLANG_PRELUDE_SHARED_LIB_EXPORT __declspec(dllexport)
35#define SLANG_PRELUDE_SHARED_LIB_EXPORT __attribute__((__visibility__("default")))
41#define SLANG_PRELUDE_EXTERN_C extern "C"
42#define SLANG_PRELUDE_EXTERN_C_START \
45#define SLANG_PRELUDE_EXTERN_C_END }
47#define SLANG_PRELUDE_EXTERN_C
48#define SLANG_PRELUDE_EXTERN_C_START
49#define SLANG_PRELUDE_EXTERN_C_END
52#define SLANG_PRELUDE_EXPORT SLANG_PRELUDE_EXTERN_C SLANG_PRELUDE_SHARED_LIB_EXPORT
53#define SLANG_PRELUDE_EXPORT_START SLANG_PRELUDE_EXTERN_C_START SLANG_PRELUDE_SHARED_LIB_EXPORT
54#define SLANG_PRELUDE_EXPORT_END SLANG_PRELUDE_EXTERN_C_END
58#define INFINITY float(1e+300 * 1e+300)
62#define SLANG_INFINITY INFINITY
86#error "unknown version of Visual C++ compiler"
88#elif defined(__clang__)
94#elif defined(__GNUC__)
97#error "unknown compiler"
128#ifndef SLANG_PLATFORM
129#define SLANG_PLATFORM
133#if defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_PARTITION_APP
135#elif defined(XBOXONE)
136#define SLANG_XBOXONE 1
143#elif defined(__ANDROID__)
144#define SLANG_ANDROID 1
145#elif defined(__linux__) || defined(__CYGWIN__)
147#elif defined(__APPLE__) && !defined(SLANG_LLVM)
148#include "TargetConditionals.h"
154#elif defined(__APPLE__)
158#elif defined(__CELLOS_LV2__)
160#elif defined(__ORBIS__)
162#elif defined(__SNC__) && defined(__arm__)
164#elif defined(__ghs__)
167#error "unknown target platform"
178#define SLANG_XBOXONE 0
190#define SLANG_ANDROID 0
216#define SLANG_GCC_FAMILY (SLANG_CLANG || SLANG_SNC || SLANG_GHS || SLANG_GCC)
217#define SLANG_WINDOWS_FAMILY (SLANG_WINRT || SLANG_WIN32 || SLANG_WIN64)
218#define SLANG_MICROSOFT_FAMILY (SLANG_XBOXONE || SLANG_X360 || SLANG_WINDOWS_FAMILY)
219#define SLANG_LINUX_FAMILY (SLANG_LINUX || SLANG_ANDROID)
220#define SLANG_APPLE_FAMILY (SLANG_IOS || SLANG_OSX)
221#define SLANG_UNIX_FAMILY \
222 (SLANG_LINUX_FAMILY || SLANG_APPLE_FAMILY)
227#if INTPTR_MAX == INT64_MAX
233#define SLANG_BREAKPOINT(id) __builtin_trap()
237#define SLANG_OFFSET_OF(T, ELEMENT) (size_t(&((T*)1)->ELEMENT) - 1)
243#define SLANG_BREAKPOINT(id) __debugbreak();
249#ifndef SLANG_OFFSET_OF
250#define SLANG_OFFSET_OF(X, Y) offsetof(X, Y)
253#ifndef SLANG_BREAKPOINT
255#define SLANG_BREAKPOINT(id) (*((int*)0) = int(id));
262#ifndef SLANG_NO_THROW
263#if SLANG_WINDOWS_FAMILY && !defined(SLANG_DISABLE_EXCEPTIONS)
264#define SLANG_NO_THROW __declspec(nothrow)
267#ifndef SLANG_NO_THROW
268#define SLANG_NO_THROW
275#if SLANG_MICROSOFT_FAMILY
276#define SLANG_STDCALL __stdcall
282#define SLANG_MCALL SLANG_STDCALL
285#ifndef SLANG_FORCE_INLINE
286#define SLANG_FORCE_INLINE inline
310#define SLANG_COM_INTERFACE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
312 SLANG_FORCE_INLINE static const SlangUUID& getTypeGuid() \
314 static const SlangUUID guid = {a, b, c, d0, d1, d2, d3, d4, d5, d6, d7}; \
341 "_InterlockedExchangeAdd uses `long`; MSVC LLP64 requires sizeof(long)==4");
345 return static_cast<uint32_t
>(
346 _InterlockedExchangeAdd(
reinterpret_cast<volatile long*
>(ptr),
static_cast<long>(val)));
350 return static_cast<int32_t
>(
351 _InterlockedExchangeAdd(
reinterpret_cast<volatile long*
>(ptr),
static_cast<long>(val)));
353#elif SLANG_GCC || SLANG_CLANG
356 return __atomic_fetch_add(ptr, val, __ATOMIC_RELAXED);
360 return __atomic_fetch_add(ptr, val, __ATOMIC_RELAXED);
383#pragma warning(disable : 4700)
int32_t SlangResult
Definition slang-cpp-prelude.h:300
static int32_t _slang_atomic_add_i32(int32_t *ptr, int32_t val)
Definition slang-cpp-prelude.h:373
static uint32_t _slang_atomic_add_u32(uint32_t *ptr, uint32_t val)
Definition slang-cpp-prelude.h:367
int32_t SlangResult
Definition slang.h:1243
#define SLANG_NO_THROW
Definition slang.h:212
#define SLANG_MCALL
Definition slang.h:226
Definition slang-cpp-prelude.h:303
void ** outObject
Definition slang.h:1406
virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef()=0
virtual SLANG_NO_THROW SlangResult SLANG_MCALL queryInterface(SlangUUID const &uuid, void **outObject)=0
virtual SLANG_NO_THROW uint32_t SLANG_MCALL release()=0
Definition slang-cpp-prelude.h:293
uint16_t data3
Definition slang-cpp-prelude.h:296
uint32_t data1
Definition slang-cpp-prelude.h:294
uint16_t data2
Definition slang-cpp-prelude.h:295
uint8_t data4[8]
Definition slang-cpp-prelude.h:297