#ifndef BOO_SYSTEM_HPP #define BOO_SYSTEM_HPP #ifdef _WIN32 #include #if defined(WINAPI_FAMILY) && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP #define WINDOWS_STORE 1 #else #define WINDOWS_STORE 0 #endif #include #include #include template using ComPtr = Microsoft::WRL::ComPtr; template static inline ComPtr* ReferenceComPtr(ComPtr& ptr) { return reinterpret_cast*>(ptr.GetAddressOf()); } #endif #include #include #ifndef ENABLE_BITWISE_ENUM #define ENABLE_BITWISE_ENUM(type)\ constexpr type operator|(type a, type b)\ {\ using T = std::underlying_type_t;\ return type(static_cast(a) | static_cast(b));\ }\ constexpr type operator&(type a, type b)\ {\ using T = std::underlying_type_t;\ return type(static_cast(a) & static_cast(b));\ }\ inline type& operator|=(type& a, const type& b)\ {\ using T = std::underlying_type_t;\ a = type(static_cast(a) | static_cast(b));\ return a;\ }\ inline type& operator&=(type& a, const type& b)\ {\ using T = std::underlying_type_t;\ a = type(static_cast(a) & static_cast(b));\ return a;\ }\ inline type operator~(const type& key)\ {\ using T = std::underlying_type_t;\ return type(~static_cast(key));\ } #endif namespace boo { #ifdef _WIN32 using SystemString = std::wstring; using SystemStringView = std::wstring_view; using SystemChar = wchar_t; # ifndef _S # define _S(val) L ## val # endif #else using SystemString = std::string; using SystemStringView = std::string_view; using SystemChar = char; # ifndef _S # define _S(val) val # endif #endif #ifndef NDEBUG #define __BooTraceArgs , const char* file, int line #define __BooTraceArgsUse , file, line #define __BooTraceInitializer , m_file(file), m_line(line) #define __BooTraceFields const char* m_file; int m_line; #define BooTrace , __FILE__, __LINE__ #else #define __BooTraceArgs #define __BooTraceArgsUse #define __BooTraceInitializer #define __BooTraceFields #define BooTrace #endif } #endif