Add prefix and postfix support for basetype.

This commit is contained in:
asuessenbach 2021-06-30 08:56:05 +02:00
parent 5002a06691
commit 5c3e410592
2 changed files with 39 additions and 36 deletions

View File

@ -766,7 +766,7 @@ std::string VulkanHppGenerator::generateBaseTypes() const
// filter out VkFlags and VkFlags64, as they are mapped to our own Flags class // filter out VkFlags and VkFlags64, as they are mapped to our own Flags class
if ( ( baseType.first != "VkFlags" ) && ( baseType.first != "VkFlags64" ) ) if ( ( baseType.first != "VkFlags" ) && ( baseType.first != "VkFlags64" ) )
{ {
str += " using " + stripPrefix( baseType.first, "Vk" ) + " = " + baseType.second.type + ";\n"; str += " using " + stripPrefix( baseType.first, "Vk" ) + " = " + baseType.second.typeInfo.compose() + ";\n";
} }
} }
return str; return str;
@ -9600,9 +9600,9 @@ void VulkanHppGenerator::checkCorrectness()
// baseType checks // baseType checks
for ( auto const & baseType : m_baseTypes ) for ( auto const & baseType : m_baseTypes )
{ {
check( m_types.find( baseType.second.type ) != m_types.end(), check( m_types.find( baseType.second.typeInfo.type ) != m_types.end(),
baseType.second.xmlLine, baseType.second.xmlLine,
"basetype type <" + baseType.second.type + "> not specified" ); "basetype type <" + baseType.second.typeInfo.type + "> not specified" );
} }
// bitmask checks // bitmask checks
@ -12303,18 +12303,21 @@ void VulkanHppGenerator::readBaseType( tinyxml2::XMLElement const *
TypeInfo typeInfo; TypeInfo typeInfo;
std::tie( nameData, typeInfo ) = readNameAndType( element ); std::tie( nameData, typeInfo ) = readNameAndType( element );
if ( typeInfo.prefix == "typedef" )
{
// remove redundant typeInfo.prefix "typedef"
typeInfo.prefix.clear();
}
check( nameData.arraySizes.empty(), line, "name <" + nameData.name + "> with unsupported arraySizes" ); check( nameData.arraySizes.empty(), line, "name <" + nameData.name + "> with unsupported arraySizes" );
check( typeInfo.type.empty() || ( typeInfo.prefix == "typedef" ), check( typeInfo.prefix.empty(), line, "unexpected type prefix <" + typeInfo.prefix + ">" );
check( typeInfo.postfix.empty() || ( typeInfo.postfix == "*" ),
line, line,
"unexpected type prefix <" + typeInfo.prefix + ">" ); "unexpected type postfix <" + typeInfo.postfix + ">" );
check( typeInfo.prefix.empty() || ( typeInfo.prefix == "typedef" ),
line,
"unexpected type prefix <" + typeInfo.prefix + ">" );
check( typeInfo.postfix.empty(), line, "unexpected type postfix <" + typeInfo.postfix + ">" );
if ( !typeInfo.type.empty() ) if ( !typeInfo.type.empty() )
{ {
check( m_baseTypes.insert( std::make_pair( nameData.name, BaseTypeData( typeInfo.type, line ) ) ).second, check( m_baseTypes.insert( std::make_pair( nameData.name, BaseTypeData( typeInfo, line ) ) ).second,
line, line,
"basetype <" + nameData.name + "> already specified" ); "basetype <" + nameData.name + "> already specified" );
} }

View File

@ -47,32 +47,6 @@ public:
std::string const & getVulkanLicenseHeader() const; std::string const & getVulkanLicenseHeader() const;
private: private:
struct BaseTypeData
{
BaseTypeData( std::string const & type_, int line ) : type( type_ ), xmlLine( line ) {}
std::string type;
int xmlLine;
};
struct BitmaskData
{
BitmaskData( std::string const & r, std::string const & t, int line )
: requirements( r ), type( t ), xmlLine( line )
{}
std::string requirements;
std::string type;
std::string alias;
int xmlLine;
};
struct NameData
{
std::string name;
std::vector<std::string> arraySizes;
};
struct TypeInfo struct TypeInfo
{ {
std::string compose( bool inNamespace = true ) const; std::string compose( bool inNamespace = true ) const;
@ -102,6 +76,32 @@ private:
std::string postfix; std::string postfix;
}; };
struct BaseTypeData
{
BaseTypeData( TypeInfo const & typeInfo_, int line ) : typeInfo( typeInfo_ ), xmlLine( line ) {}
TypeInfo typeInfo;
int xmlLine;
};
struct BitmaskData
{
BitmaskData( std::string const & r, std::string const & t, int line )
: requirements( r ), type( t ), xmlLine( line )
{}
std::string requirements;
std::string type;
std::string alias;
int xmlLine;
};
struct NameData
{
std::string name;
std::vector<std::string> arraySizes;
};
struct ParamData struct ParamData
{ {
ParamData( int line ) : optional( false ), xmlLine( line ) {} ParamData( int line ) : optional( false ), xmlLine( line ) {}