From f2476fe77fe49511a4c22544bf2cbccbc5cfd6cb Mon Sep 17 00:00:00 2001 From: Ciaran McCreesh Date: Sat, 4 Dec 2010 21:30:35 +0000 Subject: Add ExactlyOneDepSpec --- paludis/dep_spec-fwd.hh | 1 + paludis/dep_spec.cc | 17 +++++++++++++++++ paludis/dep_spec.hh | 24 ++++++++++++++++++++++++ 3 files changed, 42 insertions(+) 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 +ExactlyOneDepSpec::clone() const +{ + std::shared_ptr result(std::make_shared()); + 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 @@ -151,6 +151,30 @@ namespace paludis virtual std::shared_ptr clone() const PALUDIS_ATTRIBUTE((warn_unused_result)); }; + /** + * 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 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). -- cgit v1.2.3