cmCMakePresetsGraphInternal.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include <memory>
  4. #include "cmCMakePresetsGraph.h"
  5. #define CHECK_OK(expr) \
  6. do { \
  7. auto _result = expr; \
  8. if (_result != ReadFileResult::READ_OK) \
  9. return _result; \
  10. } while (false)
  11. namespace cmCMakePresetsGraphInternal {
  12. enum class ExpandMacroResult
  13. {
  14. Ok,
  15. Ignore,
  16. Error,
  17. };
  18. using MacroExpander = std::function<ExpandMacroResult(
  19. const std::string&, const std::string&, std::string&, int version)>;
  20. }
  21. class cmCMakePresetsGraph::Condition
  22. {
  23. public:
  24. virtual ~Condition() = default;
  25. virtual bool Evaluate(
  26. const std::vector<cmCMakePresetsGraphInternal::MacroExpander>& expanders,
  27. int version, cm::optional<bool>& out) const = 0;
  28. virtual bool IsNull() const { return false; }
  29. };
  30. namespace cmCMakePresetsGraphInternal {
  31. class NullCondition : public cmCMakePresetsGraph::Condition
  32. {
  33. bool Evaluate(const std::vector<MacroExpander>& /*expanders*/,
  34. int /*version*/, cm::optional<bool>& out) const override
  35. {
  36. out = true;
  37. return true;
  38. }
  39. bool IsNull() const override { return true; }
  40. };
  41. class ConstCondition : public cmCMakePresetsGraph::Condition
  42. {
  43. public:
  44. bool Evaluate(const std::vector<MacroExpander>& /*expanders*/,
  45. int /*version*/, cm::optional<bool>& out) const override
  46. {
  47. out = this->Value;
  48. return true;
  49. }
  50. bool Value;
  51. };
  52. class EqualsCondition : public cmCMakePresetsGraph::Condition
  53. {
  54. public:
  55. bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
  56. cm::optional<bool>& out) const override;
  57. std::string Lhs;
  58. std::string Rhs;
  59. };
  60. class InListCondition : public cmCMakePresetsGraph::Condition
  61. {
  62. public:
  63. bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
  64. cm::optional<bool>& out) const override;
  65. std::string String;
  66. std::vector<std::string> List;
  67. };
  68. class MatchesCondition : public cmCMakePresetsGraph::Condition
  69. {
  70. public:
  71. bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
  72. cm::optional<bool>& out) const override;
  73. std::string String;
  74. std::string Regex;
  75. };
  76. class AnyAllOfCondition : public cmCMakePresetsGraph::Condition
  77. {
  78. public:
  79. bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
  80. cm::optional<bool>& out) const override;
  81. std::vector<std::unique_ptr<Condition>> Conditions;
  82. bool StopValue;
  83. };
  84. class NotCondition : public cmCMakePresetsGraph::Condition
  85. {
  86. public:
  87. bool Evaluate(const std::vector<MacroExpander>& expanders, int version,
  88. cm::optional<bool>& out) const override;
  89. std::unique_ptr<Condition> SubCondition;
  90. };
  91. }