| 12496 | } |
| 12497 | |
| 12498 | std::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 | |
| 12552 | void VulkanHppGenerator::handleRemoval( RemoveData const & removeData ) |
| 12553 | { |
nothing calls this directly
no test coverage detected