| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #include <memory> | |
| #include "cmCMakePresetsFile.h" | |
| #define CHECK_OK(expr) \ | |
| { \ | |
| auto _result = expr; \ | |
| if (_result != ReadFileResult::READ_OK) \ | |
| return _result; \ | |
| } | |
| namespace cmCMakePresetsFileInternal { | |
| enum class ExpandMacroResult | |
| { | |
| Ok, | |
| Ignore, | |
| Error, | |
| }; | |
| using MacroExpander = std::function<ExpandMacroResult( | |
| const std::string&, const std::string&, std::string&, int version)>; | |
| } | |
| class cmCMakePresetsFile::Condition | |
| { | |
| public: | |
| virtual ~Condition() = default; | |
| virtual bool Evaluate( | |
| const std::vector<cmCMakePresetsFileInternal::MacroExpander>& expanders, | |
| int version, cm::optional<bool>& out) const = 0; | |
| virtual bool IsNull() const { return false; } | |
| }; | |
| namespace cmCMakePresetsFileInternal { | |
| class NullCondition : public cmCMakePresetsFile::Condition | |
| { | |
| bool Evaluate(const std::vector<MacroExpander>& /*expanders*/, | |
| int /*version*/, cm::optional<bool>& out) const override | |
| { | |
| out = true; | |
| return true; | |
| } | |
| bool IsNull() const override { return true; } | |
| }; | |
| class ConstCondition : public cmCMakePresetsFile::Condition | |
| { | |
| public: | |
| bool Evaluate(const std::vector<MacroExpander>& /*expanders*/, | |
| int /*version*/, cm::optional<bool>& out) const override | |
| { | |
| out = this->Value; | |
| return true; | |
| } | |
| bool Value; | |
| }; | |
| class EqualsCondition : public cmCMakePresetsFile::Condition | |
| { | |
| public: | |
| bool Evaluate(const std::vector<MacroExpander>& expanders, int version, | |
| cm::optional<bool>& out) const override; | |
| std::string Lhs; | |
| std::string Rhs; | |
| }; | |
| class InListCondition : public cmCMakePresetsFile::Condition | |
| { | |
| public: | |
| bool Evaluate(const std::vector<MacroExpander>& expanders, int version, | |
| cm::optional<bool>& out) const override; | |
| std::string String; | |
| std::vector<std::string> List; | |
| }; | |
| class MatchesCondition : public cmCMakePresetsFile::Condition | |
| { | |
| public: | |
| bool Evaluate(const std::vector<MacroExpander>& expanders, int version, | |
| cm::optional<bool>& out) const override; | |
| std::string String; | |
| std::string Regex; | |
| }; | |
| class AnyAllOfCondition : public cmCMakePresetsFile::Condition | |
| { | |
| public: | |
| bool Evaluate(const std::vector<MacroExpander>& expanders, int version, | |
| cm::optional<bool>& out) const override; | |
| std::vector<std::unique_ptr<Condition>> Conditions; | |
| bool StopValue; | |
| }; | |
| class NotCondition : public cmCMakePresetsFile::Condition | |
| { | |
| public: | |
| bool Evaluate(const std::vector<MacroExpander>& expanders, int version, | |
| cm::optional<bool>& out) const override; | |
| std::unique_ptr<Condition> SubCondition; | |
| }; | |
| } |