Moved from_string functions and the mappings to an inl file so they don't horribly slow down the compilation on every file.

This commit is contained in:
Patrick 2023-12-30 22:49:34 +01:00
parent 3898cc8725
commit 9b36e3d1ab
4 changed files with 7788 additions and 7772 deletions

View File

@ -789,25 +789,49 @@ void VulkanHppGenerator::generateFromStringHppFile() const
#ifndef VULKAN_FROM_STRING_HPP #ifndef VULKAN_FROM_STRING_HPP
# define VULKAN_FROM_STRING_HPP # define VULKAN_FROM_STRING_HPP
#include <string> #include <optional>
#include <unordered_map> #include <string_view>
#include <vulkan/${api}_enums.hpp> #include <vulkan/${api}_enums.hpp>
namespace VULKAN_HPP_NAMESPACE namespace VULKAN_HPP_NAMESPACE
{ {
${enumsFromString} template<typename TEnum>
extern std::optional<TEnum> from_string(std::string_view);
} // namespace VULKAN_HPP_NAMESPACE } // namespace VULKAN_HPP_NAMESPACE
#endif #endif
)"; )";
std::string str = replaceWithMap( vulkanHandlesHppTemplate, std::string str = replaceWithMap( vulkanHandlesHppTemplate,
{ { "api", m_api }, { { "api", m_api },
{ "enumsFromString", generateEnumsFromString() },
{ "licenseHeader", m_vulkanLicenseHeader } } ); { "licenseHeader", m_vulkanLicenseHeader } } );
writeToFile( str, vulkan_from_string_hpp ); writeToFile( str, vulkan_from_string_hpp );
} }
void VulkanHppGenerator::generateFromStringInlFile() const
{
std::string const vulkan_from_string_inl = std::string( BASE_PATH ) + "/vulkan/" + m_api + "_from_string.inl";
std::cout << "VulkanHppGenerator: Generating " << vulkan_from_string_inl << "..." << std::endl;
std::string const vulkanHandlesInlTemplate = R"(${licenseHeader}
#include <unordered_map>
#include <vulkan/${api}_from_string.hpp>
namespace VULKAN_HPP_NAMESPACE
{
${enumsFromString}
} // namespace VULKAN_HPP_NAMESPACE
)";
std::string str = replaceWithMap( vulkanHandlesInlTemplate,
{ { "api", m_api },
{ "enumsFromString", generateEnumsFromString() },
{ "licenseHeader", m_vulkanLicenseHeader } } );
writeToFile( str, vulkan_from_string_inl );
}
void VulkanHppGenerator::generateCppModuleFile() const void VulkanHppGenerator::generateCppModuleFile() const
{ {
std::string const vulkan_cppm = std::string( BASE_PATH ) + "/vulkan/" + m_api + ".cppm"; std::string const vulkan_cppm = std::string( BASE_PATH ) + "/vulkan/" + m_api + ".cppm";
@ -6825,12 +6849,6 @@ ${functionBody}
std::string VulkanHppGenerator::generateEnumsFromString() const std::string VulkanHppGenerator::generateEnumsFromString() const
{ {
const std::string enumsFromStringTemplate = R"( const std::string enumsFromStringTemplate = R"(
#define VULKAN_HPP_ENUM_FROM_STRING_STORAGE \
namespace VULKAN_HPP_NAMESPACE \
{ \
VULKAN_HPP_STORAGE_API const ::VULKAN_HPP_NAMESPACE::EnumFromStringMap enumFromStringMap; \
}
//========================= //=========================
//=== ENUMs from_string === //=== ENUMs from_string ===
//========================= //=========================
@ -6839,10 +6857,8 @@ struct EnumFromStringMap
{ {
${enumsFromStringStorage} ${enumsFromStringStorage}
}; };
VULKAN_HPP_STORAGE_API extern const EnumFromStringMap enumFromStringMap; static const EnumFromStringMap enumFromStringMap;
template<typename TEnum>
std::optional<TEnum> from_string(const std::string&);
${enumsFromString} ${enumsFromString}
)"; )";
@ -6918,7 +6934,7 @@ std::string VulkanHppGenerator::generateEnumFromString( std::pair<std::string, E
const std::string enumFromStringTemplate = R"( const std::string enumFromStringTemplate = R"(
template<> template<>
VULKAN_HPP_INLINE std::optional<${enumName}> from_string<${enumName}>( const std::string& ${argument} ) std::optional<${enumName}> from_string<${enumName}>( std::string_view ${argument} )
{ {
${functionBody} ${functionBody}
} }
@ -6980,7 +6996,7 @@ std::string VulkanHppGenerator::generateEnumFromStringStorage( std::pair<std::st
entries += previousLeave; entries += previousLeave;
const std::string enumToStringTemplate = R"( const std::string enumToStringTemplate = R"(
std::unordered_map<std::string, ${enumName}> ${enumName}Entries = std::unordered_map<std::string_view, ${enumName}> ${enumName}Entries =
{ {
${entries} ${entries}
}; };
@ -15911,6 +15927,7 @@ int main( int argc, char ** argv )
generator.generateStructsHppFile(); generator.generateStructsHppFile();
generator.generateToStringHppFile(); generator.generateToStringHppFile();
generator.generateFromStringHppFile(); generator.generateFromStringHppFile();
generator.generateFromStringInlFile();
generator.generateCppModuleFile(); generator.generateCppModuleFile();
#if !defined( CLANG_FORMAT_EXECUTABLE ) #if !defined( CLANG_FORMAT_EXECUTABLE )

View File

@ -102,6 +102,7 @@ public:
void generateStructsHppFile() const; void generateStructsHppFile() const;
void generateToStringHppFile() const; void generateToStringHppFile() const;
void generateFromStringHppFile() const; void generateFromStringHppFile() const;
void generateFromStringInlFile() const;
void generateCppModuleFile() const; void generateCppModuleFile() const;
void prepareRAIIHandles(); void prepareRAIIHandles();
void prepareVulkanFuncs(); void prepareVulkanFuncs();

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff