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
# define VULKAN_FROM_STRING_HPP
#include <string>
#include <unordered_map>
#include <optional>
#include <string_view>
#include <vulkan/${api}_enums.hpp>
namespace VULKAN_HPP_NAMESPACE
{
${enumsFromString}
template<typename TEnum>
extern std::optional<TEnum> from_string(std::string_view);
} // namespace VULKAN_HPP_NAMESPACE
#endif
)";
std::string str = replaceWithMap( vulkanHandlesHppTemplate,
{ { "api", m_api },
{ "enumsFromString", generateEnumsFromString() },
{ "licenseHeader", m_vulkanLicenseHeader } } );
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
{
std::string const vulkan_cppm = std::string( BASE_PATH ) + "/vulkan/" + m_api + ".cppm";
@ -6825,12 +6849,6 @@ ${functionBody}
std::string VulkanHppGenerator::generateEnumsFromString() const
{
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 ===
//=========================
@ -6839,10 +6857,8 @@ struct EnumFromStringMap
{
${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}
)";
@ -6918,7 +6934,7 @@ std::string VulkanHppGenerator::generateEnumFromString( std::pair<std::string, E
const std::string enumFromStringTemplate = R"(
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}
}
@ -6980,7 +6996,7 @@ std::string VulkanHppGenerator::generateEnumFromStringStorage( std::pair<std::st
entries += previousLeave;
const std::string enumToStringTemplate = R"(
std::unordered_map<std::string, ${enumName}> ${enumName}Entries =
std::unordered_map<std::string_view, ${enumName}> ${enumName}Entries =
{
${entries}
};
@ -15911,6 +15927,7 @@ int main( int argc, char ** argv )
generator.generateStructsHppFile();
generator.generateToStringHppFile();
generator.generateFromStringHppFile();
generator.generateFromStringInlFile();
generator.generateCppModuleFile();
#if !defined( CLANG_FORMAT_EXECUTABLE )

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff