diff options
-rw-r--r-- | paludis/dep_spec-fwd.hh | 1 | ||||
-rw-r--r-- | paludis/dep_spec.cc | 17 | ||||
-rw-r--r-- | paludis/dep_spec.hh | 24 |
3 files changed, 42 insertions, 0 deletions
diff --git a/paludis/dep_spec-fwd.hh b/paludis/dep_spec-fwd.hh index fb968411b..f8f152b28 100644 --- a/paludis/dep_spec-fwd.hh +++ b/paludis/dep_spec-fwd.hh @@ -42,6 +42,7 @@ namespace paludis class FetchableURIDepSpec; class SimpleURIDepSpec; class AllDepSpec; + class ExactlyOneDepSpec; class AnyDepSpec; class ConditionalDepSpec; class BlockDepSpec; diff --git a/paludis/dep_spec.cc b/paludis/dep_spec.cc index 84a2fb731..602646997 100644 --- a/paludis/dep_spec.cc +++ b/paludis/dep_spec.cc @@ -125,6 +125,23 @@ AllDepSpec::clone() const return result; } +ExactlyOneDepSpec::ExactlyOneDepSpec() +{ +} + +void +ExactlyOneDepSpec::need_keys_added() const +{ +} + +std::shared_ptr<DepSpec> +ExactlyOneDepSpec::clone() const +{ + std::shared_ptr<ExactlyOneDepSpec> result(std::make_shared<ExactlyOneDepSpec>()); + result->set_annotations_key(annotations_key()); + return result; +} + namespace paludis { template <> diff --git a/paludis/dep_spec.hh b/paludis/dep_spec.hh index 0b99291be..fc3584cf5 100644 --- a/paludis/dep_spec.hh +++ b/paludis/dep_spec.hh @@ -152,6 +152,30 @@ namespace paludis }; /** + * Represents a ^^ ( first second third ) group of requirements. + * + * \ingroup g_dep_spec + * \nosubgrouping + * \since 0.56 + */ + class PALUDIS_VISIBLE ExactlyOneDepSpec : + public DepSpec + { + protected: + virtual void need_keys_added() const; + + public: + ///\name Basic operations + ///\{ + + ExactlyOneDepSpec(); + + ///\} + + virtual std::shared_ptr<DepSpec> clone() const PALUDIS_ATTRIBUTE((warn_unused_result)); + }; + + /** * Represents a dependency spec whose children should only be considered * upon a certain condition (for example, a use dependency block). * |