2025-02-19 19:30:16 +01:00

77 lines
1.2 KiB
C++

#pragma once
// TODO: Refactor documentation
#ifdef P_WIN_BUILD
#ifdef P_BUILD_LIB
#define PHANES_CORE __declspec(dllexport)
#else
#define PHANES_CORE __declspec(dllimport)
#endif
#ifdef P_DEBUG
#define P_DEBUGBREAK DebugBreak();
#else
#define P_DEBUGBREAK
#endif // P_DEBUG
#define FORCEINLINE __forceinline
#elif defined(P_LINUX_BUILD)
#ifdef P_DEBUG
#define P_DEBUGBREAK __builtin_trap();
#else
#define P_DEBUGBREAK
#endif
#define FORCEINLINE inline
#elif defined(P_ARM_BUILD)
#error Only Windows is supported at the moment.
#else
#error The target system must be defined. (See https://github.com/thoehne/PhanesEngine for more information)
#endif // P_WIN_BUILD
namespace Phanes
{
// Alias for shared_ptr
template<typename T>
using Ref = std::shared_ptr<T>;
// Alias for make_shared
template<typename T, typename ...Args>
constexpr Ref<T> MakeRef(Args&& ...args)
{
return std::make_shared<T>(std::forward<Args>(args)...);
}
// Alias for unique ptr
template<typename T>
using Scope = std::unique_ptr<T>;
// Alias for make_unique
template<typename T, typename ...Args>
constexpr Scope<T> MakeScope(Args&& ...args)
{
return std::make_unique<T>(std::forward<Args>(args)...);
}
}