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

Method getVectorSize

generator/VulkanHppGenerator.cpp:12498–12550  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12496}
12497
12498std::string VulkanHppGenerator::getVectorSize( std::vector<ParamData> const & params,
12499 std::map<size_t, VectorParamData> const & vectorParams,
12500 size_t returnParam,
12501 std::string const & returnParamType,
12502 std::set<size_t> const & templatedParams ) const
12503{
12504 std::string vectorSize;
12505 auto returnVectorIt = vectorParams.find( returnParam );
12506 assert( returnVectorIt != vectorParams.end() );
12507 if ( returnVectorIt->second.byStructure )
12508 {
12509 auto structIt = m_structs.find( params[returnParam].type.name );
12510 assert( structIt != m_structs.end() );
12511 vectorSize = startLowerCase( stripPrefix( params[returnParam].name, "p" ) ) + "." + structIt->second.members[returnVectorIt->second.lenParam].name;
12512 }
12513 else
12514 {
12515 std::vector<std::string> lenParts = tokenize( params[returnParam].lenExpression, "->" );
12516 switch ( lenParts.size() )
12517 {
12518 case 1:
12519 {
12520 std::string const & len = lenParts[0];
12521 size_t lenIdx = std::distance( params.begin(), std::ranges::find_if( params, [&len]( ParamData const & pd ) { return pd.name == len; } ) );
12522 assert( lenIdx < params.size() );
12523 // look for the len, not being the len of the return param, but of an other vector param
12524 auto lenVectorParamIt = std::ranges::find_if(
12525 vectorParams, [&lenIdx, &returnParam]( auto const & vpi ) { return ( vpi.first != returnParam ) && ( vpi.second.lenParam == lenIdx ); } );
12526 if ( lenVectorParamIt == vectorParams.end() )
12527 {
12528 vectorSize = lenParts[0];
12529 if ( templatedParams.contains( returnParam ) )
12530 {
12531 vectorSize += " / sizeof( " + returnParamType + " )";
12532 }
12533 }
12534 else
12535 {
12536 assert( !templatedParams.contains( returnParam ) );
12537 vectorSize = startLowerCase( stripPrefix( params[lenVectorParamIt->first].name, "p" ) ) + ".size()";
12538 }
12539 }
12540 break;
12541 case 2:
12542 assert( vectorParams.contains( returnParam ) );
12543 vectorSize = startLowerCase( stripPrefix( lenParts[0], "p" ) ) + "." + lenParts[1];
12544 break;
12545 default: assert( false ); break;
12546 }
12547 }
12548 assert( !vectorSize.empty() );
12549 return vectorSize;
12550}
12551
12552void VulkanHppGenerator::handleRemoval( RemoveData const & removeData )
12553{

Callers

nothing calls this directly

Calls 3

startLowerCaseFunction · 0.85
stripPrefixFunction · 0.85
tokenizeFunction · 0.85

Tested by

no test coverage detected