#ifndef XNA_TYPES_HPP #define XNA_TYPES_HPP #include #include #include #include #include #include #include #include namespace xna { // // C# standard types // using Sbyte = int8_t; using Byte = uint8_t; using Short = int16_t; using Ushort = uint16_t; using Int = int32_t; using Uint = uint32_t; using Long = int64_t; using Ulong = uint64_t; using Char = char16_t; // // C# Min and Max Value // constexpr Sbyte SbyteMaxValue = (std::numeric_limits::max)(); constexpr Sbyte SbyteMinValue = (std::numeric_limits::min)(); constexpr Byte ByteMaxValue = (std::numeric_limits::max)(); constexpr Byte ByteMinValue = (std::numeric_limits::min)(); constexpr Short ShortMaxValue = (std::numeric_limits::max)(); constexpr Short ShortMinValue = (std::numeric_limits::min)(); constexpr Ushort UshortMaxValue = (std::numeric_limits::max)(); constexpr Ushort UshortMinValue = (std::numeric_limits::min)(); constexpr Int IntMaxValue = (std::numeric_limits::max)(); constexpr Int IntMinValue = (std::numeric_limits::min)(); constexpr Uint UintMaxValue = (std::numeric_limits::max)(); constexpr Uint UintMinValue = (std::numeric_limits::min)(); constexpr Long LongMaxValue = (std::numeric_limits::max)(); constexpr Long LongMinValue = (std::numeric_limits::min)(); constexpr Ulong UlongMaxValue = (std::numeric_limits::max)(); constexpr Ulong UlongMinValue = (std::numeric_limits::min)(); constexpr Char CharMaxValue = (std::numeric_limits::max)(); constexpr Char CharMinValue = (std::numeric_limits::min)(); constexpr float FloatMaxValue = (std::numeric_limits::max)(); constexpr float FloatMinValue = (std::numeric_limits::min)(); constexpr double DoubleMaxValue = (std::numeric_limits::max)(); constexpr double DoubleMinValue = (std::numeric_limits::min)(); // // About strings: https://stackoverflow.com/questions/402283/stdwstring-vs-stdstring // //Same as std::string using String = std::string; //Same as std::wstring using WString = std::wstring; //Same as std::shared_ptr template using sptr = std::shared_ptr; //Same as std::weak_ptr template using wptr = std::weak_ptr; //Same as std::unique_ptr template using uptr = std::unique_ptr; //Same as std::make_shared template inline std::shared_ptr<_Ty> snew(_Types&&... _Args) { return std::make_shared<_Ty>(std::forward<_Types>(_Args)...); } //Same as std::make_unique template inline std::unique_ptr<_Ty> unew(_Types&&... _Args) { return std::make_unique<_Ty>(std::forward<_Types>(_Args)...); } //See ref: https://en.cppreference.com/w/cpp/error/assert #define assertm(exp, msg) assert(((void)msg, exp)) } #endif