From 623e10839e0e1aed104fb7e99e9a804fd91c301a Mon Sep 17 00:00:00 2001 From: Arthur LAURENT Date: Mon, 28 Oct 2024 16:56:22 +0100 Subject: [PATCH] add C++20 module --- tinyxml2.cppm | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++ tinyxml2.h | 17 ++++++++++--- 2 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 tinyxml2.cppm diff --git a/tinyxml2.cppm b/tinyxml2.cppm new file mode 100644 index 00000000..83702e1f --- /dev/null +++ b/tinyxml2.cppm @@ -0,0 +1,69 @@ +/* +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +module; + +#include + +export module tinyxml2; + +export using ::TIXML2_MAJOR_VERSION; +export using ::TIXML2_MINOR_VERSION; +export using ::TIXML2_PATCH_VERSION; + +#pragma push_macro("TINYXML2_MAJOR_VERSION") +#undef TINYXML2_MAJOR_VERSION +export inline constexpr auto TINYXML2_MAJOR_VERSION = +#pragma pop_macro("TINYXML2_MAJOR_VERSION") + TINYXML2_MAJOR_VERSION; + +#pragma push_macro("TINYXML2_MINOR_VERSION") +#undef TINYXML2_MINOR_VERSION +export inline constexpr auto TINYXML2_MINOR_VERSION = +#pragma pop_macro("TINYXML2_MINOR_VERSION") + TINYXML2_MINOR_VERSION; + +#pragma push_macro("TINYXML2_PATCH_VERSION") +#undef TINYXML2_PATCH_VERSION +export inline constexpr auto TINYXML2_PATCH_VERSION = +#pragma pop_macro("TINYXML2_PATCH_VERSION") + TINYXML2_PATCH_VERSION; + +export namespace tinyxml2 { +using tinyxml2::Whitespace; +using tinyxml2::XMLAttribute; +using tinyxml2::XMLComment; +using tinyxml2::XMLConstHandle; +using tinyxml2::XMLDeclaration; +using tinyxml2::XMLDocument; +using tinyxml2::XMLElement; +using tinyxml2::XMLError; +using tinyxml2::XMLHandle; +using tinyxml2::XMLNode; +using tinyxml2::XMLPrinter; +using tinyxml2::XMLText; +using tinyxml2::XMLUnknown; +using tinyxml2::XMLUtil; +using tinyxml2::XMLVisitor; +using tinyxml2::DynArray; +} // namespace tinyxml2 diff --git a/tinyxml2.h b/tinyxml2.h index 599397ca..6deea4ce 100644 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -93,12 +93,21 @@ distribution. #endif #endif +#if defined(__cplusplus) && __cplusplus >= 201703L +#define TINYXML2_CPP17_CONSTANT inline constexpr +#elif defined(__cplusplus) && __cplusplus >= 201103L +#define TINYXML2_CPP17_CONSTANT static constexpr +#else +#define TINYXML2_CPP17_CONSTANT static const +#endif + + /* Versioning, past 1.0.14: http://semver.org/ */ -static const int TIXML2_MAJOR_VERSION = 10; -static const int TIXML2_MINOR_VERSION = 0; -static const int TIXML2_PATCH_VERSION = 0; +TINYXML2_CPP17_CONSTANT int TIXML2_MAJOR_VERSION = 10; +TINYXML2_CPP17_CONSTANT int TIXML2_MINOR_VERSION = 0; +TINYXML2_CPP17_CONSTANT int TIXML2_PATCH_VERSION = 0; #define TINYXML2_MAJOR_VERSION 10 #define TINYXML2_MINOR_VERSION 0 @@ -109,7 +118,7 @@ static const int TIXML2_PATCH_VERSION = 0; // system, and the capacity of the stack. On the other hand, it's a trivial // attack that can result from ill, malicious, or even correctly formed XML, // so there needs to be a limit in place. -static const int TINYXML2_MAX_ELEMENT_DEPTH = 500; +TINYXML2_CPP17_CONSTANT int TINYXML2_MAX_ELEMENT_DEPTH = 500; namespace tinyxml2 {