MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-Hpp / generateStructSetter

Method generateStructSetter

generator/VulkanHppGenerator.cpp:11492–11722  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11490}
11491
11492std::string VulkanHppGenerator::generateStructSetter( std::string const & structureName, std::vector<MemberData> const & memberData, size_t index ) const
11493{
11494 std::string str;
11495 MemberData const & member = memberData[index];
11496 if ( member.type.name != "VkStructureType" ) // filter out StructureType, which is supposed to be immutable !
11497 {
11498 static std::string const templateString = R"(
11499 ${deprecated}${constexpr}${structureName} & set${MemberName}( ${memberType} ${reference}${memberName}_ ) & VULKAN_HPP_NOEXCEPT
11500 {
11501 ${assignment};
11502 return *this;
11503 }
11504
11505 ${deprecated}${constexpr}${structureName} && set${MemberName}( ${memberType} ${reference}${memberName}_ ) && VULKAN_HPP_NOEXCEPT
11506 {
11507 ${assignment};
11508 return std::move( *this );
11509 }
11510)";
11511
11512 std::string memberType =
11513 member.type.name.starts_with( "PFN_vk" )
11514 ? "PFN_" + stripPrefix( member.type.name, "PFN_vk" )
11515 : ( member.arraySizes.empty() ? member.type.compose( "Vk" ) : generateStandardArray( member.type.compose( "Vk" ), member.arraySizes ) );
11516 bool const isReinterpretation = !member.bitCount.empty() && member.type.name.starts_with( "Vk" );
11517 std::string assignment;
11518 if ( member.deprecated.empty() )
11519 {
11520 if ( isReinterpretation )
11521 {
11522 assignment = member.name + " = " + "*reinterpret_cast<" + member.type.name + "*>(&" + member.name + "_)";
11523 }
11524 else
11525 {
11526 assignment = member.name + " = " + member.name + "_";
11527 }
11528 }
11529 else
11530 {
11531 assignment = "detail::ignore( " + member.name + "_ )";
11532 }
11533
11534 str += replaceWithMap( templateString,
11535 { { "assignment", assignment },
11536 { "constexpr", isReinterpretation ? "" : "VULKAN_HPP_CONSTEXPR_14 " },
11537 { "deprecated", member.deprecated.empty() ? "" : "VULKAN_HPP_DEPRECATED( \"" + member.deprecated + "\" ) " },
11538 { "memberName", member.name },
11539 { "MemberName", startUpperCase( member.name ) },
11540 { "memberType", memberType },
11541 { "reference", ( member.type.postfix.empty() && m_structs.contains( member.type.name ) ) ? "const & " : "" },
11542 { "structureName", structureName } } );
11543
11544 if ( hasLen( member, memberData ) )
11545 {
11546 assert( member.type.isPointer() || !member.arraySizes.empty() );
11547 std::string arrayName = member.type.isPointer() ? startLowerCase( stripPrefix( member.name, "p" ) ) : member.name;
11548
11549 if ( member.lenExpressions[0] == "null-terminated" )

Callers

nothing calls this directly

Calls 10

stripPrefixFunction · 0.85
generateStandardArrayFunction · 0.85
replaceWithMapFunction · 0.85
startUpperCaseFunction · 0.85
startLowerCaseFunction · 0.85
trimEndFunction · 0.85
stripPostfixFunction · 0.85
findByNameFunction · 0.85
composeMethod · 0.80
isPointerMethod · 0.80

Tested by

no test coverage detected