| @@ -36,8 +36,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{1AFD58 | |||||
| msbuild\config-build.xml = msbuild\config-build.xml | msbuild\config-build.xml = msbuild\config-build.xml | ||||
| EndProjectSection | EndProjectSection | ||||
| EndProject | EndProject | ||||
| Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{3D341D8A-E400-4B1D-BC05-B5C35487D9B5}" | |||||
| EndProject | |||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "btphystest", "..\doc\samples\btphystest.vcxproj", "{EE203B88-44CF-4859-9D42-7A1F43FECB52}" | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "btphystest", "..\doc\samples\btphystest.vcxproj", "{EE203B88-44CF-4859-9D42-7A1F43FECB52}" | ||||
| EndProject | EndProject | ||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "08_fbo", "..\doc\tutorial\08_fbo.vcxproj", "{BCEE0132-8E24-49BE-AFEB-96DAD14396BA}" | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "08_fbo", "..\doc\tutorial\08_fbo.vcxproj", "{BCEE0132-8E24-49BE-AFEB-96DAD14396BA}" | ||||
| @@ -320,7 +318,6 @@ Global | |||||
| {5A27FF18-A1EC-49BE-9455-415F1C701153} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | {5A27FF18-A1EC-49BE-9455-415F1C701153} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | ||||
| {D7F6C2CA-5A13-4FD0-8468-1833923E3EE3} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | {D7F6C2CA-5A13-4FD0-8468-1833923E3EE3} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | ||||
| {B1E10086-A1DA-401A-834D-969C9DBB5CC1} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | {B1E10086-A1DA-401A-834D-969C9DBB5CC1} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | ||||
| {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||||
| {B92ABADC-45BE-4CC5-B724-9426053123A1} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {B92ABADC-45BE-4CC5-B724-9426053123A1} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| {7B083DA2-FE08-4F6D-BFDD-195D5C2783EB} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {7B083DA2-FE08-4F6D-BFDD-195D5C2783EB} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| {1C5B8702-290C-42DA-AA9E-671348F5B747} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {1C5B8702-290C-42DA-AA9E-671348F5B747} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| @@ -333,9 +330,7 @@ Global | |||||
| {6BF81B39-EDC2-4227-9982-C2D8ABEA95AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {6BF81B39-EDC2-4227-9982-C2D8ABEA95AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| {572E5B9C-7E19-489C-BD8A-E8401CFBBC47} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {572E5B9C-7E19-489C-BD8A-E8401CFBBC47} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| {E05E23A5-67DE-42B5-98A3-E63CCE0CC0AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {E05E23A5-67DE-42B5-98A3-E63CCE0CC0AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||||
| {F59FA82C-DDB9-4EE2-80AE-CB0E4C6567A4} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {F59FA82C-DDB9-4EE2-80AE-CB0E4C6567A4} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||||
| {81C83B42-D00A-4FA3-9A3D-80F9D46524BF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {81C83B42-D00A-4FA3-9A3D-80F9D46524BF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| {31B96262-1C41-43B9-BA38-27AA385B05DB} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | {31B96262-1C41-43B9-BA38-27AA385B05DB} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | ||||
| EndGlobalSection | EndGlobalSection | ||||
| @@ -38,7 +38,7 @@ | |||||
| /* | /* | ||||
| * Check for C++11 features. | |||||
| * Check for C++11 and later features. | |||||
| */ | */ | ||||
| /* These features aren't necessarily supported by all compilers */ | /* These features aren't necessarily supported by all compilers */ | ||||
| @@ -51,10 +51,13 @@ | |||||
| #undef LOL_FEATURE_CXX11_TEMPLATE_ALIASES | #undef LOL_FEATURE_CXX11_TEMPLATE_ALIASES | ||||
| #undef LOL_FEATURE_CXX11_SFINAE_FOR_CTORS | #undef LOL_FEATURE_CXX11_SFINAE_FOR_CTORS | ||||
| #undef LOL_FEATURE_CXX17_ATTRIBUTE_NODISCARD | |||||
| /* Features supported by GCC */ | /* Features supported by GCC */ | ||||
| #if defined __GNUC__ | #if defined __GNUC__ | ||||
| # define LOL_FEATURE_CXX11_UNRESTRICTED_UNIONS 1 | # define LOL_FEATURE_CXX11_UNRESTRICTED_UNIONS 1 | ||||
| # define LOL_FEATURE_CXX11_INHERIT_CONSTRUCTORS 1 | # define LOL_FEATURE_CXX11_INHERIT_CONSTRUCTORS 1 | ||||
| # define LOL_FEATURE_CXX17_ATTRIBUTE_NODISCARD 1 | |||||
| # if defined(__GXX_EXPERIMENTAL_CXX0X) || __cplusplus >= 201103L | # if defined(__GXX_EXPERIMENTAL_CXX0X) || __cplusplus >= 201103L | ||||
| # define LOL_FEATURE_CXX11_CONSTEXPR 1 | # define LOL_FEATURE_CXX11_CONSTEXPR 1 | ||||
| # define LOL_FEATURE_CXX11_ISNAN 1 | # define LOL_FEATURE_CXX11_ISNAN 1 | ||||
| @@ -72,6 +75,7 @@ | |||||
| # define LOL_FEATURE_CXX11_UNRESTRICTED_UNIONS 1 | # define LOL_FEATURE_CXX11_UNRESTRICTED_UNIONS 1 | ||||
| # define LOL_FEATURE_CXX11_INHERIT_CONSTRUCTORS 1 | # define LOL_FEATURE_CXX11_INHERIT_CONSTRUCTORS 1 | ||||
| # define LOL_FEATURE_CXX11_ARRAY_INITIALIZERS 1 | # define LOL_FEATURE_CXX11_ARRAY_INITIALIZERS 1 | ||||
| # define LOL_FEATURE_CXX17_ATTRIBUTE_NODISCARD 1 | |||||
| # if __has_feature(cxx_constexpr) | # if __has_feature(cxx_constexpr) | ||||
| # define LOL_FEATURE_CXX11_CONSTEXPR 1 | # define LOL_FEATURE_CXX11_CONSTEXPR 1 | ||||
| # endif | # endif | ||||
| @@ -97,9 +101,27 @@ | |||||
| # endif | # endif | ||||
| /* Supported in VS 2015 but causes massive warning output */ | /* Supported in VS 2015 but causes massive warning output */ | ||||
| # undef LOL_FEATURE_CXX11_UNRESTRICTED_UNIONS | # undef LOL_FEATURE_CXX11_UNRESTRICTED_UNIONS | ||||
| /* Still unsupported as of VS 2015 */ | |||||
| /* Still unsupported as of VS 2015 (TODO: check VS2017) */ | |||||
| # undef LOL_FEATURE_CXX11_ARRAY_INITIALIZERS | # undef LOL_FEATURE_CXX11_ARRAY_INITIALIZERS | ||||
| # undef LOL_FEATURE_CXX11_CONSTEXPR | # undef LOL_FEATURE_CXX11_CONSTEXPR | ||||
| # undef LOL_FEATURE_CXX17_ATTRIBUTE_NODISCARD | |||||
| #endif | |||||
| /* | |||||
| * Define some attribute macros. | |||||
| */ | |||||
| #ifdef __GNUC__ | |||||
| # define LOL_ATTR_FORMAT(n, p) __attribute__((format(printf, n, p))) | |||||
| #else | |||||
| # define LOL_ATTR_FORMAT(n, p) | |||||
| #endif | |||||
| #ifdef LOL_FEATURE_CXX17_ATTRIBUTE_NODISCARD | |||||
| # define LOL_ATTR_NODISCARD [[nodiscard]] | |||||
| #else | |||||
| # define LOL_ATTR_NODISCARD /* */ | |||||
| #endif | #endif | ||||
| @@ -27,16 +27,10 @@ namespace lol | |||||
| class msg | class msg | ||||
| { | { | ||||
| public: | public: | ||||
| #ifdef __GNUC__ | |||||
| # define LOL_FMT_ATTR(n, p) __attribute__((format(printf, n, p))) | |||||
| #else | |||||
| # define LOL_FMT_ATTR(n, p) | |||||
| #endif | |||||
| static void debug(char const *format, ...) LOL_FMT_ATTR(1, 2); | |||||
| static void info(char const *format, ...) LOL_FMT_ATTR(1, 2); | |||||
| static void warn(char const *format, ...) LOL_FMT_ATTR(1, 2); | |||||
| static void error(char const *format, ...) LOL_FMT_ATTR(1, 2); | |||||
| #undef LOL_FMT_ATTR | |||||
| static void debug(char const *format, ...) LOL_ATTR_FORMAT(1, 2); | |||||
| static void info(char const *format, ...) LOL_ATTR_FORMAT(1, 2); | |||||
| static void warn(char const *format, ...) LOL_ATTR_FORMAT(1, 2); | |||||
| static void error(char const *format, ...) LOL_ATTR_FORMAT(1, 2); | |||||
| private: | private: | ||||
| enum class MessageType | enum class MessageType | ||||
| @@ -34,13 +34,13 @@ private: | |||||
| typedef array<char> super; | typedef array<char> super; | ||||
| public: | public: | ||||
| inline String() | |||||
| inline LOL_ATTR_NODISCARD String() | |||||
| : super() | : super() | ||||
| { | { | ||||
| push('\0'); | push('\0'); | ||||
| } | } | ||||
| inline String(char const *str) | |||||
| inline LOL_ATTR_NODISCARD String(char const *str) | |||||
| : super() | : super() | ||||
| { | { | ||||
| using namespace std; | using namespace std; | ||||
| @@ -49,7 +49,7 @@ public: | |||||
| memcpy(&(*this)[0], str, count() + 1); | memcpy(&(*this)[0], str, count() + 1); | ||||
| } | } | ||||
| inline String(char const *str, int item_count) | |||||
| inline LOL_ATTR_NODISCARD String(char const *str, int item_count) | |||||
| : super() | : super() | ||||
| { | { | ||||
| using namespace std; | using namespace std; | ||||
| @@ -59,7 +59,7 @@ public: | |||||
| ((super &)*this)[item_count] = '\0'; | ((super &)*this)[item_count] = '\0'; | ||||
| } | } | ||||
| inline String(String const &s) | |||||
| inline LOL_ATTR_NODISCARD String(String const &s) | |||||
| : super((super const &)s) | : super((super const &)s) | ||||
| { | { | ||||
| } | } | ||||
| @@ -268,13 +268,13 @@ public: | |||||
| return true; | return true; | ||||
| } | } | ||||
| inline String operator +(String const &s) const | |||||
| inline LOL_ATTR_NODISCARD String operator +(String const &s) const | |||||
| { | { | ||||
| String ret(*this); | String ret(*this); | ||||
| return ret += s; | return ret += s; | ||||
| } | } | ||||
| inline String operator +(char c) const | |||||
| inline LOL_ATTR_NODISCARD String operator +(char c) const | |||||
| { | { | ||||
| String ret(*this); | String ret(*this); | ||||
| return ret += c; | return ret += c; | ||||
| @@ -334,22 +334,16 @@ public: | |||||
| return res < 0; | return res < 0; | ||||
| } | } | ||||
| #ifdef __GNUC__ | |||||
| # define LOL_FMT_ATTR(n, p) __attribute__((format(printf, n, p))) | |||||
| #else | |||||
| # define LOL_FMT_ATTR(n, p) | |||||
| #endif | |||||
| static String format(char const *format, ...) LOL_FMT_ATTR(1, 2); | |||||
| #undef LOL_FMT_ATTR | |||||
| static String format(char const *format, ...) LOL_ATTR_FORMAT(1, 2); | |||||
| static String vformat(char const *format, va_list ap); | static String vformat(char const *format, va_list ap); | ||||
| }; | }; | ||||
| inline String operator +(char c, String const &s) | |||||
| inline LOL_ATTR_NODISCARD String operator +(char c, String const &s) | |||||
| { | { | ||||
| return String() + c + s; | return String() + c + s; | ||||
| } | } | ||||
| inline String operator +(char const *sz, String const &s) | |||||
| inline LOL_ATTR_NODISCARD String operator +(char const *sz, String const &s) | |||||
| { | { | ||||
| return String(sz) + s; | return String(sz) + s; | ||||
| } | } | ||||
| @@ -204,18 +204,21 @@ public: | |||||
| static Real<N> const& R_MAX(); | static Real<N> const& R_MAX(); | ||||
| private: | private: | ||||
| uint32_t *m_mantissa; | |||||
| uint32_t m_signexp; | |||||
| typedef uint32_t bigit_t; | |||||
| typedef uint32_t signexp_t; | |||||
| bigit_t *m_mantissa; | |||||
| signexp_t m_signexp; | |||||
| public: | public: | ||||
| /* XXX: changing this requires tuning real::fres (the number of | /* XXX: changing this requires tuning real::fres (the number of | ||||
| * Newton-Raphson iterations) and real::print (the number of printed | * Newton-Raphson iterations) and real::print (the number of printed | ||||
| * digits) */ | * digits) */ | ||||
| static int const BIGIT_COUNT = N; | static int const BIGIT_COUNT = N; | ||||
| static int const BIGIT_BITS = 8 * sizeof(*m_mantissa); | |||||
| static int const BIGIT_BITS = 8 * sizeof(bigit_t); | |||||
| static int const TOTAL_BITS = BIGIT_COUNT * BIGIT_BITS; | static int const TOTAL_BITS = BIGIT_COUNT * BIGIT_BITS; | ||||
| static int const EXPONENT_BITS = 8 * sizeof(m_signexp) - 1; | |||||
| static int const EXPONENT_BITS = 8 * sizeof(signexp_t) - 1; | |||||
| static int const EXPONENT_BIAS = (1 << (EXPONENT_BITS - 1)) - 1; | static int const EXPONENT_BIAS = (1 << (EXPONENT_BITS - 1)) - 1; | ||||
| }; | }; | ||||