| 4732 | } |
| 4733 | |
| 4734 | std::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 |
nothing calls this directly
no test coverage detected