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

Method generateConstexprDefines

generator/VulkanHppGenerator.cpp:4734–4894  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4732}
4733
4734std::string VulkanHppGenerator::generateConstexprDefines() const
4735{
4736 auto const constexprFunctionTemplate = std::string{ R"( template <typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type>
4737 VULKAN_HPP_CONSTEXPR uint32_t ${constName}( ${arguments} )
4738 {
4739 return ${implementation};
4740 }
4741)" };
4742 auto const constexprCallTemplate = std::string{ R"( VULKAN_HPP_CONSTEXPR_INLINE auto ${constName} = ${callee}( ${arguments} );
4743)" };
4744 auto const constexprValueTemplate = std::string{ R"( VULKAN_HPP_CONSTEXPR_INLINE ${type} ${constName} = ${value};
4745)" };
4746
4747 // handle the value and callee macros first so they are visible for use in functions below.
4748
4749 auto constexprDefines = std::string{ R"(
4750 //===========================
4751 //=== CONSTEXPR CONSTANTs ===
4752 //===========================
4753)" };
4754
4755 {
4756 auto const generateConstantsAndProtection =
4757 [&constexprValueTemplate, this]( std::vector<RequireData> const & requireData, std::string const & title, std::set<std::string> & listedConstants )
4758 {
4759 std::string constants;
4760 forEachRequiredConstant( requireData,
4761 listedConstants,
4762 [&constants, &constexprValueTemplate, this]( std::pair<std::string, Constant> const & constantData )
4763 {
4764 constants += replaceWithMap( constexprValueTemplate,
4765 { { "type", constantData.second.type },
4766 { "constName", generateTaggedCamelCase( constantData.first ) },
4767 { "value", constantData.first } } );
4768 } );
4769 return addTitleAndProtection( title, constants );
4770 };
4771
4772 std::set<std::string> listedConstants;
4773 for ( auto const & feature : m_features )
4774 {
4775 constexprDefines += generateConstantsAndProtection( feature.requireData, feature.name, listedConstants );
4776 }
4777 for ( auto const & extension : m_extensions )
4778 {
4779 constexprDefines += generateConstantsAndProtection( extension.requireData, extension.name, listedConstants );
4780 }
4781 }
4782
4783 // values
4784 constexprDefines += R"(
4785 //========================
4786 //=== CONSTEXPR VALUEs ===
4787 //========================
4788)";
4789 for ( auto const & [macro, data] : m_definesPartition.values )
4790 {
4791 // make `macro` PascalCase and strip the `Vk` prefix

Callers

nothing calls this directly

Calls 4

replaceWithMapFunction · 0.85
stripPrefixFunction · 0.85
toCamelCaseFunction · 0.85
startLowerCaseFunction · 0.85

Tested by

no test coverage detected