message: Support optional ArrayProxy as function arguments
diff: @@ -2745,45 +2745,39 @@ void VulkanHppGenerator::appendFunctionHeaderArgumentEnhancedVector( std::string
  bool withAllocator ) const
  {
  assert( param.type.postfix.back() == '*' );
  -
  // it's optional, if it's marked as optional and there's no size specified
  bool optional = param.optional && !hasSizeParam;
  - if ( param.type.type.find( "char" ) != std::string::npos )
  - {
  - // it's a char-vector -> use a std::string (either optional or a const-reference
  - if ( optional )
  +
  + bool useString = ( param.type.type.find( "char" ) != std::string::npos );
  + std::string optionalBegin = optional ? "Optional<" : "";
  + std::string optionalEnd = optional ? "> " : (useString ? " & " : "");
  +
  + if ( useString )
  {
  - str += "Optional<const std::string> " + strippedParameterName;
  - if ( withDefaults && !withAllocator )
  + // it's a char-vector -> use a std::string
  + assert( param.type.prefix.find( "const" ) != std::string::npos );
  + str += optionalBegin + "const std::string" + optionalEnd + strippedParameterName;
  + if ( optional && withDefaults && !withAllocator )
  {
  str += " = nullptr";
  }
  }
  - else
  - {
  - str += "const std::string & " + strippedParameterName;
  - }
  - }
  - else
  - {
  - // it's a non-char vector (they are never optional)
  - assert( !optional );
  - if ( singular )
  + else if ( singular )
  {
  // in singular case, change from pointer to reference
  - str += param.type.prefix + ( param.type.prefix.empty() ? "" : " " ) + stripPrefix( param.type.type, "Vk" ) +
  - " & " + stripPluralS( strippedParameterName );
  + assert( !optional ); // never encounterd such a case
  + str += param.type.prefix + ( param.type.prefix.empty() ? "" : " " ) + stripPrefix( param.type.type, "Vk" ) + " & " +
  + stripPluralS( strippedParameterName );
  }
  else
  {
  // otherwise, use our ArrayProxy
  bool isConst = ( param.type.prefix.find( "const" ) != std::string::npos );
  - str += "ArrayProxy<" +
  - ( isTemplateParam ? ( isConst ? "const T" : "T" ) : stripPostfix( param.type.compose(), "*" ) ) + "> " +
  + str += optionalBegin + "ArrayProxy<" +
  + ( isTemplateParam ? ( isConst ? "const T" : "T" ) : stripPostfix( param.type.compose(), "*" ) ) + "> " + optionalEnd +
  strippedParameterName;
  }
  }
  -}
  void VulkanHppGenerator::appendFunctionHeaderArguments( std::string & str,
  CommandData const & commandData,
  