@@ -1120,38 +1120,23 @@ bool VulkanHppGenerator::containsFuncPointer( std::string const & type ) const
11201120{
11211121 // a simple recursive check if a type contains a funcpointer
11221122 auto structureIt = m_structs.find( type );
1123- bool found = false;
1124- if ( structureIt != m_structs.end() )
1125- {
1126- for ( auto memberIt = structureIt->second.members.begin(); memberIt != structureIt->second.members.end() && !found; ++memberIt )
1127- {
1128- found = m_funcPointers.contains( memberIt->type.type ) || ( ( memberIt->type.type != type ) && containsFuncPointer( memberIt->type.type ) );
1129- }
1130- }
1131- return found;
1123+ return ( structureIt != m_structs.end() ) && std::ranges::any_of( structureIt->second.members,
1124+ [this, &type]( auto const & member ) {
1125+ return m_funcPointers.contains( member.type.type ) ||
1126+ ( ( member.type.type != type ) && containsFuncPointer( member.type.type ) );
1127+ } );
11321128}
11331129
11341130bool VulkanHppGenerator::containsFloatingPoints( std::vector<MemberData> const & members ) const
11351131{
1136- for ( auto const & m : members )
1137- {
1138- if ( m.type.isValue() )
1139- {
1140- if ( ( m.type.type == "float" ) || ( m.type.type == "double" ) )
1141- {
1142- return true;
1143- }
1144- else
1145- {
1146- auto structureIt = m_structs.find( m.type.type );
1147- if ( structureIt != m_structs.end() && containsFloatingPoints( structureIt->second.members ) )
1148- {
1149- return true;
1150- }
1151- }
1152- }
1153- }
1154- return false;
1132+ return std::ranges::any_of( members,
1133+ [this]( auto const & member )
1134+ {
1135+ auto structureIt = m_structs.find( member.type.type );
1136+ return member.type.isValue() &&
1137+ ( ( member.type.type == "float" ) || ( member.type.type == "double" ) ||
1138+ ( ( structureIt != m_structs.end() ) && containsFloatingPoints( structureIt->second.members ) ) );
1139+ } );
11551140}
11561141
11571142bool VulkanHppGenerator::containsName( std::vector<EnumValueData> const & enumValues, std::string const & name ) const
@@ -1165,33 +1150,25 @@ bool VulkanHppGenerator::containsUnion( std::string const & type ) const
11651150{
11661151 // a simple recursive check if a type is or contains a union
11671152 auto structureIt = m_structs.find( type );
1168- bool found = false;
1169- if ( structureIt != m_structs.end() )
1170- {
1171- found = structureIt->second.isUnion;
1172- for ( auto memberIt = structureIt->second.members.begin(); memberIt != structureIt->second.members.end() && !found; ++memberIt )
1173- {
1174- found = memberIt->type.isValue() && containsUnion( memberIt->type.type );
1175- }
1176- }
1177- return found;
1153+ return ( structureIt != m_structs.end() ) &&
1154+ ( structureIt->second.isUnion ||
1155+ std::ranges::any_of( structureIt->second.members,
1156+ [this]( auto const & member ) { return member.type.isValue() && containsUnion( member.type.type ); } ) );
11781157}
11791158
11801159bool VulkanHppGenerator::describesVector( StructureData const & structure, std::string const & type ) const
11811160{
1182- for ( auto const & member : structure.members )
1183- {
1184- if ( ( type.empty() ? true : ( member.type.type == type ) ) && member.type.isNonConstPointer() && ( member.lenMembers.size() == 1 ) )
1185- {
1186- assert( member.lenMembers[0].second < structure.members.size() );
1187- auto const & lenMember = structure.members[member.lenMembers[0].second];
1188- if ( lenMember.type.isValue() && ( ( lenMember.type.type == "size_t" ) || ( lenMember.type.type == "uint32_t" ) ) )
1189- {
1190- return true;
1191- }
1192- }
1193- }
1194- return false;
1161+ return std::ranges::any_of( structure.members,
1162+ [&structure, &type]( auto const & member )
1163+ {
1164+ if ( ( type.empty() || ( member.type.type == type ) ) && member.type.isNonConstPointer() && ( member.lenMembers.size() == 1 ) )
1165+ {
1166+ assert( member.lenMembers[0].second < structure.members.size() );
1167+ auto const & lenMember = structure.members[member.lenMembers[0].second];
1168+ return lenMember.type.isValue() && ( ( lenMember.type.type == "size_t" ) || ( lenMember.type.type == "uint32_t" ) );
1169+ }
1170+ return false;
1171+ } );
11951172}
11961173
11971174std::vector<size_t> VulkanHppGenerator::determineChainedReturnParams( std::vector<ParamData> const & params, std::vector<size_t> const & returnParams ) const
@@ -8847,8 +8824,15 @@ std::string VulkanHppGenerator::generateRAIIHandle( std::pair<std::string, Handl
88478824
88488825 auto [singularConstructors, arrayConstructors] = generateRAIIHandleConstructors( handle );
88498826
8850- auto [clearMembers, getConstructorSuccessCode, memberVariables, rawConstructorParams, rawConstructorInitializerList, moveConstructorInitializerList, moveAssignmentInstructions, swapMembers, releaseMembers] =
8851- generateRAIIHandleDetails( handle );
8827+ auto [clearMembers,
8828+ getConstructorSuccessCode,
8829+ memberVariables,
8830+ rawConstructorParams,
8831+ rawConstructorInitializerList,
8832+ moveConstructorInitializerList,
8833+ moveAssignmentInstructions,
8834+ swapMembers,
8835+ releaseMembers] = generateRAIIHandleDetails( handle );
88528836
88538837 std::string declarations = generateRAIIHandleCommandDeclarations( handle, specialFunctions );
88548838
@@ -8906,15 +8890,16 @@ std::string VulkanHppGenerator::generateRAIIHandle( std::pair<std::string, Handl
89068890 }
89078891
89088892 std::string rawConstructor;
8909- if ( ( handle.first == "VkBuffer" ) || ( handle.first == "VkImage" ) ) {
8893+ if ( ( handle.first == "VkBuffer" ) || ( handle.first == "VkImage" ) )
8894+ {
89108895 std::string const rawConstructorTemplate = R"(protected:
89118896 ${handleType}( ${rawConstructorParams} ) VULKAN_HPP_NOEXCEPT
89128897 : ${rawConstructorInitializerList}
89138898 {})";
89148899 rawConstructor += replaceWithMap( rawConstructorTemplate,
8915- { { "handleType", handleType },
8916- { "rawConstructorParams", rawConstructorParams },
8917- { "rawConstructorInitializerList", rawConstructorInitializerList } } );
8900+ { { "handleType", handleType },
8901+ { "rawConstructorParams", rawConstructorParams },
8902+ { "rawConstructorInitializerList", rawConstructorInitializerList } } );
89188903 }
89198904
89208905 const std::string handleTemplate = R"(
@@ -10214,7 +10199,8 @@ std::tuple<std::string, std::string, std::string, std::string, std::string, std:
1021410199
1021510200 std::string handleName = startLowerCase( stripPrefix( handle.first, "Vk" ) );
1021610201
10217- std::string clearMembers, moveConstructorInitializerList, rawConstructorInitializerList, rawConstructorParams, moveAssignmentInstructions, memberVariables, swapMembers, releaseMembers;
10202+ std::string clearMembers, moveConstructorInitializerList, rawConstructorInitializerList, rawConstructorParams, moveAssignmentInstructions, memberVariables,
10203+ swapMembers, releaseMembers;
1021810204
1021910205 if ( handle.second.destructorIt != m_commands.end() )
1022010206 {
@@ -10283,9 +10269,9 @@ std::tuple<std::string, std::string, std::string, std::string, std::string, std:
1028310269 moveConstructorInitializerList = "m_" + frontName + "( exchange( rhs.m_" + frontName + ", {} ) ), ";
1028410270 rawConstructorInitializerList += "m_" + frontName + "( exchange( " + frontName + ", {} ) ), ";
1028510271 rawConstructorParams += "VULKAN_HPP_NAMESPACE::" + stripPrefix( frontType, "Vk" ) + " " + frontName + ", ";
10286- moveAssignmentInstructions = "\n std::swap( m_" + frontName + ", rhs.m_" + frontName + " );";
10287- memberVariables = "\n VULKAN_HPP_NAMESPACE::" + stripPrefix( frontType, "Vk" ) + " m_" + frontName + " = {};";
10288- swapMembers = "\n std::swap( m_" + frontName + ", rhs.m_" + frontName + " );";
10272+ moveAssignmentInstructions = "\n std::swap( m_" + frontName + ", rhs.m_" + frontName + " );";
10273+ memberVariables = "\n VULKAN_HPP_NAMESPACE::" + stripPrefix( frontType, "Vk" ) + " m_" + frontName + " = {};";
10274+ swapMembers = "\n std::swap( m_" + frontName + ", rhs.m_" + frontName + " );";
1028910275 releaseMembers += "\n m_" + frontName + " = nullptr;";
1029010276 }
1029110277 clearMembers += "\n m_" + handleName + " = nullptr;";
@@ -10346,8 +10332,15 @@ std::tuple<std::string, std::string, std::string, std::string, std::string, std:
1034610332 rawConstructorInitializerList += "m_dispatcher( exchange( dispatcher, nullptr ) )";
1034710333 moveAssignmentInstructions += "\n std::swap( m_dispatcher, rhs.m_dispatcher );";
1034810334
10349- return std::make_tuple(
10350- clearMembers, getConstructorSuccessCode, memberVariables, rawConstructorParams, rawConstructorInitializerList, moveConstructorInitializerList, moveAssignmentInstructions, swapMembers, releaseMembers );
10335+ return std::make_tuple( clearMembers,
10336+ getConstructorSuccessCode,
10337+ memberVariables,
10338+ rawConstructorParams,
10339+ rawConstructorInitializerList,
10340+ moveConstructorInitializerList,
10341+ moveAssignmentInstructions,
10342+ swapMembers,
10343+ releaseMembers );
1035110344}
1035210345
1035310346std::string VulkanHppGenerator::generateRAIIHandleForwardDeclarations( std::vector<RequireData> const & requireData, std::string const & title ) const
0 commit comments