76 lines
3.1 KiB
C++
76 lines
3.1 KiB
C++
|
/***
|
||
|
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||
|
|
||
|
File: AuroraMacros.hpp
|
||
|
Date: 2021-6-10
|
||
|
Author: Reece
|
||
|
***/
|
||
|
#pragma once
|
||
|
#define AU_NO_COPY(type) type(type&) = delete;
|
||
|
#define AU_NO_MOVE(type) type(type&&) = delete;
|
||
|
#define AU_NO_COPY_NO_MOVE(type) AU_NO_COPY(type) AU_NO_MOVE(type)
|
||
|
|
||
|
#define AU_STRINGIFY_(in) #in
|
||
|
#define AU_STRINGIFY(in) AU_STRINGIFY_(in)
|
||
|
|
||
|
/// @hideinitializer
|
||
|
#define _AUKCON_STRINGIFY_X(in) AU_STRINGIFY(in)
|
||
|
|
||
|
#define AU_SHARED_API_EX(vis, name, type, ...) \
|
||
|
\
|
||
|
vis type *name ## New(__VA_ARGS__); \
|
||
|
vis void name ## Release(type *); \
|
||
|
static inline void name ## Destroy(type *val) \
|
||
|
{ \
|
||
|
name ## Release(val); \
|
||
|
} \
|
||
|
\
|
||
|
struct CppDeleter ## name \
|
||
|
{ \
|
||
|
void operator()(type *t) \
|
||
|
{ \
|
||
|
name ## Release(t); \
|
||
|
} \
|
||
|
}; \
|
||
|
\
|
||
|
using name ## Unique_t = std::unique_ptr<type, CppDeleter ## name>; \
|
||
|
template<typename ... T> \
|
||
|
name ## Unique_t name ## Unique(T... args) \
|
||
|
{ \
|
||
|
return name ## Unique_t(name ## New(args...)); \
|
||
|
} \
|
||
|
\
|
||
|
using name ## Shared_t = std::shared_ptr<type>; \
|
||
|
template<typename ... T> \
|
||
|
name ## Shared_t name ## Shared(T... args) \
|
||
|
{ \
|
||
|
return name ## Shared_t(name ## New(args...), name ## Release); \
|
||
|
}
|
||
|
|
||
|
#define AU_SHARED_API(name, type, ...) AU_SHARED_API_EX(, name, type, AU_VA_ALL_OPT)
|
||
|
|
||
|
#if defined(AURORA_COMPILER_MSVC)
|
||
|
#define AU_NOINLINE __declspec(noinline)
|
||
|
#else
|
||
|
#define AU_NOINLINE __attribute__((noinline))
|
||
|
#endif
|
||
|
|
||
|
#if defined(AURORA_COMPILER_MSVC)
|
||
|
#define AU_NORETURN __declspec(noreturn)
|
||
|
#else
|
||
|
#define AU_NORETURN [[noreturn]]
|
||
|
#endif
|
||
|
|
||
|
#if defined(AURORA_PLATFORM_WIN32)
|
||
|
#define AU_ALLOC __declspec(allocator)
|
||
|
#elif defined(AURORA_COMPILER_CLANG)
|
||
|
#define AU_ALLOC __declspec(allocator)
|
||
|
#elif defined(AURORA_COMPILER_COMMUNISM)
|
||
|
#define AU_ALLOC __attribute__((malloc))
|
||
|
#else
|
||
|
#define AU_ALLOC
|
||
|
#endif
|
||
|
|
||
|
#if !defined(NO__NEW)
|
||
|
#define _new new (std::nothrow)
|
||
|
#endif
|