From c1f1aedcee3e24f96ec129105ae0119f3201d1cc Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 4 Oct 2023 15:12:47 -0400 Subject: cmStandardLevelResolver: Add method to look up standard level by name --- Source/cmStandardLevelResolver.cxx | 23 +++++++++++++++++++++++ Source/cmStandardLevelResolver.h | 3 +++ 2 files changed, 26 insertions(+) diff --git a/Source/cmStandardLevelResolver.cxx b/Source/cmStandardLevelResolver.cxx index 4a149e0..e814690 100644 --- a/Source/cmStandardLevelResolver.cxx +++ b/Source/cmStandardLevelResolver.cxx @@ -457,6 +457,19 @@ struct StandardLevelComputer return maxLevel; } + cm::optional LanguageStandardLevel( + std::string const& standardStr) const + { + cm::optional langLevel; + auto const& stds = this->Levels; + auto stdIt = + std::find(cm::cbegin(stds), cm::cend(stds), ParseStd(standardStr)); + if (stdIt != cm::cend(stds)) { + langLevel = cmStandardLevel(std::distance(cm::cbegin(stds), stdIt)); + } + return langLevel; + } + bool IsLaterStandard(int lhs, int rhs) const { auto rhsIt = @@ -661,6 +674,16 @@ cmStandardLevelResolver::CompileFeatureStandardLevel( return mapping->second.CompileFeatureStandardLevel(this->Makefile, feature); } +cm::optional cmStandardLevelResolver::LanguageStandardLevel( + std::string const& lang, std::string const& standardStr) const +{ + auto mapping = StandardComputerMapping.find(lang); + if (mapping == cm::cend(StandardComputerMapping)) { + return cm::nullopt; + } + return mapping->second.LanguageStandardLevel(standardStr); +} + cmValue cmStandardLevelResolver::CompileFeaturesAvailable( const std::string& lang, std::string* error) const { diff --git a/Source/cmStandardLevelResolver.h b/Source/cmStandardLevelResolver.h index 09989ba..29cab55 100644 --- a/Source/cmStandardLevelResolver.h +++ b/Source/cmStandardLevelResolver.h @@ -39,6 +39,9 @@ public: cm::optional CompileFeatureStandardLevel( std::string const& lang, std::string const& feature) const; + cm::optional LanguageStandardLevel( + std::string const& lang, std::string const& standardStr) const; + cmValue CompileFeaturesAvailable(const std::string& lang, std::string* error) const; -- cgit v0.12