From 49a2fc679ac5f43bb7347143abfb5de4cfab255d Mon Sep 17 00:00:00 2001 From: asuessenbach Date: Mon, 4 Jul 2022 18:02:22 +0200 Subject: [PATCH] Add support for comma-separated list of names for attribute "extension" of element in element . --- VulkanHppGenerator.cpp | 18 ++++++++++++++---- VulkanHppGenerator.hpp | 4 ++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index f5c4775..57b3aa5 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -1681,9 +1681,15 @@ void VulkanHppGenerator::checkExtensionCorrectness() const // check for existence of any requirement for ( auto const & require : extension.second.requireData ) { - check( require.title.empty() || ( m_features.find( require.title ) != m_features.end() ) || ( m_extensions.find( require.title ) != m_extensions.end() ), - require.xmlLine, - "extension <" + extension.first + "> lists an unknown require <" + require.title + ">" ); + if ( !require.titles.empty() ) + { + for ( auto const & title : require.titles ) + { + check( ( m_features.find( title ) != m_features.end() ) || ( m_extensions.find( title ) != m_extensions.end() ), + require.xmlLine, + "extension <" + extension.first + "> lists an unknown require <" + title + ">" ); + } + } } } } @@ -11062,7 +11068,9 @@ void VulkanHppGenerator::readExtensionsExtensionRequire( tinyxml2::XMLElement co requireTitle = attribute.second; check( std::find_if( extensionIt->second.requireData.begin(), extensionIt->second.requireData.end(), - [&requireTitle]( RequireData const & rd ) { return rd.title == requireTitle; } ) == extensionIt->second.requireData.end(), + [&requireTitle]( RequireData const & rd ) { + return std::find( rd.titles.begin(), rd.titles.end(), requireTitle ) != rd.titles.end(); + } ) == extensionIt->second.requireData.end(), line, "required extension <" + requireTitle + "> already listed" ); } @@ -12910,6 +12918,8 @@ std::string VulkanHppGenerator::TypeInfo::compose( std::string const & nameSpace ( postfix.empty() ? "" : " " ) + postfix; } +VulkanHppGenerator::RequireData::RequireData( int line, std::string const & titles_ ) : titles( tokenize( titles_, "," ) ), xmlLine( line ) {} + // // VulkanHppGenerator local functions // diff --git a/VulkanHppGenerator.hpp b/VulkanHppGenerator.hpp index e6fc5ee..71525f3 100644 --- a/VulkanHppGenerator.hpp +++ b/VulkanHppGenerator.hpp @@ -177,9 +177,9 @@ private: struct RequireData { - RequireData( int line, std::string const & title_ ) : title( title_ ), xmlLine( line ) {} + RequireData( int line, std::string const & titles_ ); - std::string title; + std::vector titles; std::vector commands; std::vector types; int xmlLine;