From 434c0326f4f38e523b9917a6fe9c86d95fa3dedb Mon Sep 17 00:00:00 2001 From: asuessenbach Date: Tue, 10 Mar 2020 09:47:59 +0100 Subject: [PATCH] Support arrays of enums in structures. --- VulkanHppGenerator.cpp | 34 +++++++++++++++++++++++++++------- VulkanHppGenerator.hpp | 1 + 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index eacc84a..0442ddf 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -1477,6 +1477,29 @@ void VulkanHppGenerator::appendEnums(std::string & str) const } } +void VulkanHppGenerator::appendEnumInitializer(std::string& str, TypeData const& type, std::vector const& arraySizes, std::vector const& values) const +{ + // enum arguments might need special initialization + assert(type.prefix.empty() && !values.empty()); + std::string value = "VULKAN_HPP_NAMESPACE::" + stripPrefix(type.type, "Vk") + "::" + values.front().vkValue; + if (arraySizes.empty()) + { + str += value; + } + else + { + assert(arraySizes.size() == 1); + int count = std::stoi(arraySizes[0]); + assert(1 < count); + str += "{ " + value; + for (int i = 1; i < count; i++) + { + str += ", " + value; + } + str += " }"; + } +} + void VulkanHppGenerator::appendEnumToString(std::string & str, std::pair const& enumData) const { std::string enumName = stripPrefix(enumData.first, "Vk"); @@ -2915,9 +2938,7 @@ bool VulkanHppGenerator::appendStructConstructorArgument(std::string & str, bool auto enumIt = m_enums.find(memberData.type.type); if (enumIt != m_enums.end() && memberData.type.postfix.empty()) { - // enum arguments might need special initialization - assert(memberData.type.prefix.empty() && memberData.arraySizes.empty() && !enumIt->second.values.empty()); - str += "VULKAN_HPP_NAMESPACE::" + stripPrefix(memberData.type.type, "Vk") + "::" + enumIt->second.values.front().vkValue; + appendEnumInitializer(str, memberData.type, memberData.arraySizes, enumIt->second.values); } else { @@ -2993,16 +3014,15 @@ void VulkanHppGenerator::appendStructMembers(std::string & str, std::pairsecond.values.front().vkValue; + appendEnumInitializer(str, member.type, member.arraySizes, enumIt->second.values); } else { - str += constructCArraySizes(member.arraySizes) + " = {}"; + str += "{}"; } } } diff --git a/VulkanHppGenerator.hpp b/VulkanHppGenerator.hpp index 5010cfe..4b99814 100644 --- a/VulkanHppGenerator.hpp +++ b/VulkanHppGenerator.hpp @@ -227,6 +227,7 @@ class VulkanHppGenerator void appendCall(std::string &str, std::pair const& commandData, size_t returnParamIndex, size_t templateParamIndex, std::map const& vectorParamIndices, bool twoStep, bool firstCall, bool singular) const; void appendCommand(std::string & str, std::string const& indentation, std::string const& name, std::pair const& commandData, bool definition) const; void appendEnum(std::string & str, std::pair const& enumData) const; + void appendEnumInitializer(std::string& str, TypeData const& type, std::vector const& arraySizes, std::vector const& values) const; void appendEnumToString(std::string & str, std::pair const& enumData) const; void appendFunction(std::string & str, std::string const& indentation, std::string const& name, std::pair const& commandData, size_t returnParamIndex, size_t templateParamIndex, std::map const& vectorParamIndices, bool twoStep, std::string const& enhancedReturnType, bool definition, bool enhanced, bool singular, bool unique, bool isStructureChain, bool withAllocator) const; void appendFunctionBodyEnhanced(std::string & str, std::string const& indentation, std::string const& commandName, std::pair const& commandData, size_t returnParamIndex, size_t templateParamIndex, std::map const& vectorParamIndices, bool twoStep, std::string const& enhancedReturnType, bool singular, bool unique, bool isStructureChain, bool withAllocator) const;