#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 using Ref = std::shared_ptr; // Alias for make_shared template constexpr Ref MakeRef(Args&& ...args) { return std::make_shared(std::forward(args)...); } // Alias for unique ptr template using Scope = std::unique_ptr; // Alias for make_unique template constexpr Scope MakeScope(Args&& ...args) { return std::make_unique(std::forward(args)...); } }