From 8be828245811e09da1a4c852466288d626c621d9 Mon Sep 17 00:00:00 2001 From: asuessenbach Date: Tue, 10 Mar 2020 15:40:05 +0100 Subject: [PATCH] Add support of array-sized function arguments --- VulkanHppGenerator.cpp | 16 ++++++++-------- VulkanHppGenerator.hpp | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index e7293da..5ff7944 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -796,9 +796,9 @@ void VulkanHppGenerator::appendArgumentVector(std::string & str, size_t paramInd void VulkanHppGenerator::appendArgumentVulkanType(std::string & str, ParamData const& paramData) const { // this parameter is a vulkan type - if (!paramData.type.postfix.empty()) + if (!paramData.type.postfix.empty() || !paramData.arraySizes.empty()) { - assert(paramData.type.postfix.back() == '*'); + assert((paramData.type.postfix.empty() || (paramData.type.postfix.back() == '*')) && (paramData.arraySizes.empty() || (paramData.arraySizes.size() == 1))); // it's a pointer -> needs a reinterpret cast to the vulkan type std::string parameterName = startLowerCase(stripPrefix(paramData.name, "p")); appendReinterpretCast(str, paramData.type.prefix.find("const") != std::string::npos, paramData.type.type, false); @@ -811,7 +811,7 @@ void VulkanHppGenerator::appendArgumentVulkanType(std::string & str, ParamData c else { // other parameters can just use the pointer - str += "&" + parameterName; + str += (paramData.arraySizes.empty() ? "&" : "") + parameterName; } str += " )"; } @@ -2040,25 +2040,25 @@ void VulkanHppGenerator::appendFunctionBodyStandard(std::string & str, std::stri { str += ", "; } - appendFunctionBodyStandardArgument(str, commandData.second.params[i].type, commandData.second.params[i].name); + appendFunctionBodyStandardArgument(str, commandData.second.params[i].type, commandData.second.params[i].name, commandData.second.params[i].arraySizes); } str += std::string(" )") + (returnData.first ? " )" : "") + ";\n"; } -void VulkanHppGenerator::appendFunctionBodyStandardArgument(std::string & str, TypeData const& typeData, std::string const& name) const +void VulkanHppGenerator::appendFunctionBodyStandardArgument(std::string & str, TypeData const& typeData, std::string const& name, std::vector const& arraySizes) const { if (beginsWith(typeData.type, "Vk")) { // the parameter is a vulkan type - if (!typeData.postfix.empty()) + if (!typeData.postfix.empty() || !arraySizes.empty()) { - assert(typeData.postfix.back() == '*'); + assert((typeData.postfix.empty() || (typeData.postfix.back() == '*')) && (arraySizes.empty() || (arraySizes.size() == 1))); // it's a pointer -> need to reinterpret_cast it appendReinterpretCast(str, typeData.prefix.find("const") == 0, typeData.type, typeData.postfix.find("* const") != std::string::npos); } else { - // it's a value -> need to static_cast ist + // it's a value -> need to static_cast it str += "static_cast<" + typeData.type + ">"; } str += "( " + name + " )"; diff --git a/VulkanHppGenerator.hpp b/VulkanHppGenerator.hpp index 9702147..a6b72d3 100644 --- a/VulkanHppGenerator.hpp +++ b/VulkanHppGenerator.hpp @@ -240,7 +240,7 @@ class VulkanHppGenerator void appendFunctionBodyEnhancedVectorOfStructureChain(std::string & str, std::string const& indentation, std::pair const& commandData, size_t returnParamIndex, std::map const& vectorParamIndices, bool withAllocator) const; void appendFunctionBodyEnhancedVectorOfUniqueHandles(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, bool singular, bool withAllocator) const; void appendFunctionBodyStandard(std::string & str, std::string const& indentation, std::pair const& commandData) const; - void appendFunctionBodyStandardArgument(std::string & str, TypeData const& typeData, std::string const& name) const; + void appendFunctionBodyStandardArgument(std::string & str, TypeData const& typeData, std::string const& name, std::vector const& arraySizes) const; bool appendFunctionHeaderArgumentEnhanced(std::string & str, ParamData const& param, size_t paramIndex, std::map const& vectorParamIndices, bool skip, bool argEncountered, bool isTemplateParam, bool isLastArgument, bool singular, bool withDefaults, bool withAllocator) const; void appendFunctionHeaderArgumentEnhancedPointer(std::string & str, ParamData const& param, std::string const& strippedParameterName, bool withDefaults, bool withAllocator) const; void appendFunctionHeaderArgumentEnhancedSimple(std::string & str, ParamData const& param, bool lastArgument, bool withDefaults, bool withAllocator) const;