Merge pull request #660 from asuessenbach/setter

Simplified struct setter functions on a union.
This commit is contained in:
Andreas Süßenbach 2020-07-06 16:46:48 +02:00 committed by GitHub
commit 29e270c5d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 451 additions and 457 deletions

View File

@ -3746,7 +3746,6 @@ void VulkanHppGenerator::appendStructs( std::string & str ) const
void VulkanHppGenerator::appendStructSetter( std::string & str, void VulkanHppGenerator::appendStructSetter( std::string & str,
std::string const & structureName, std::string const & structureName,
bool isUnion,
std::vector<MemberData> const & memberData, std::vector<MemberData> const & memberData,
size_t index ) const size_t index ) const
{ {
@ -3769,10 +3768,6 @@ void VulkanHppGenerator::appendStructSetter( std::string & str
{ {
assignment = member.name + " = " + "*reinterpret_cast<" + member.type.type + "*>(&" + member.name + "_)"; assignment = member.name + " = " + "*reinterpret_cast<" + member.type.type + "*>(&" + member.name + "_)";
} }
else if ( isUnion && holdsSType( member.type.type ) )
{
assignment = "memcpy( &" + member.name + ", &" + member.name + "_, sizeof(" + memberType + "))";
}
else else
{ {
assignment = member.name + " = " + member.name + "_"; assignment = member.name + " = " + member.name + "_";
@ -3803,12 +3798,12 @@ void VulkanHppGenerator::appendStructSetter( std::string & str
if ( member.len[0] == R"(latexmath:[\textrm{codeSize} \over 4])" ) if ( member.len[0] == R"(latexmath:[\textrm{codeSize} \over 4])" )
{ {
lenName = "codeSize"; lenName = "codeSize";
lenValue = arrayName + ".size() * 4"; lenValue = arrayName + "_.size() * 4";
} }
else else
{ {
lenName = member.len[0]; lenName = member.len[0];
lenValue = arrayName + ".size()"; lenValue = arrayName + "_.size()";
} }
assert( memberType.back() == '*' ); assert( memberType.back() == '*' );
@ -3835,10 +3830,10 @@ void VulkanHppGenerator::appendStructSetter( std::string & str
} }
static const std::string setArrayTemplate = R"( static const std::string setArrayTemplate = R"(
${templateHeader}${structureName} & set${ArrayName}( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<${memberType}> const & ${arrayName} ) VULKAN_HPP_NOEXCEPT ${templateHeader}${structureName} & set${ArrayName}( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<${memberType}> const & ${arrayName}_ ) VULKAN_HPP_NOEXCEPT
{ {
${lenName} = ${lenValue}; ${lenName} = ${lenValue};
${memberName} = ${arrayName}.data(); ${memberName} = ${arrayName}_.data();
return *this; return *this;
} }
)"; )";
@ -3917,8 +3912,7 @@ void VulkanHppGenerator::appendStructure( std::string &
// only structs that are not returnedOnly get setters! // only structs that are not returnedOnly get setters!
for ( size_t i = 0; i < structure.second.members.size(); i++ ) for ( size_t i = 0; i < structure.second.members.size(); i++ )
{ {
appendStructSetter( appendStructSetter( constructorAndSetters, stripPrefix( structure.first, "Vk" ), structure.second.members, i );
constructorAndSetters, stripPrefix( structure.first, "Vk" ), false, structure.second.members, i );
} }
} }
@ -4134,7 +4128,7 @@ void VulkanHppGenerator::appendUnion( std::string & str, std::pair<std::string,
// one setter per union element // one setter per union element
for ( size_t i = 0; i < structure.second.members.size(); i++ ) for ( size_t i = 0; i < structure.second.members.size(); i++ )
{ {
appendStructSetter( str, stripPrefix( structure.first, "Vk" ), true, structure.second.members, i ); appendStructSetter( str, stripPrefix( structure.first, "Vk" ), structure.second.members, i );
} }
// assignment operator // assignment operator

View File

@ -484,7 +484,6 @@ private:
std::string const & prefix ) const; std::string const & prefix ) const;
void appendStructSetter( std::string & str, void appendStructSetter( std::string & str,
std::string const & structureName, std::string const & structureName,
bool isUnion,
std::vector<MemberData> const & memberData, std::vector<MemberData> const & memberData,
size_t index ) const; size_t index ) const;
void appendStructSubConstructor( std::string & str, void appendStructSubConstructor( std::string & str,

File diff suppressed because it is too large Load Diff