diff options
19 files changed, 240 insertions, 65 deletions
diff --git a/misc/make_sr.bash b/misc/make_sr.bash index 7193bce38..20c7b7558 100755 --- a/misc/make_sr.bash +++ b/misc/make_sr.bash @@ -40,6 +40,7 @@ while read a ; do want_visible= want_keys=( ) want_key_types=( ) + want_inherit=( ) want_comparison_operators= want_comparison_fields=( ) @@ -68,6 +69,11 @@ while read a ; do : } + inherit() + { + want_inherit=( "${want_inherit[@]}" "$1" ) + } + key() { want_keys=( "${want_keys[@]}" "$1" ) @@ -102,6 +108,11 @@ while read a ; do : } + inherit() + { + : + } + comparison_operators() { : @@ -130,10 +141,25 @@ while read a ; do if [[ "${what_to_make}" == "--header" ]] ; then if [[ -z ${want_visible} ]] ; then - echo "class ${a}" + echo -n "class ${a}" + else + echo -n "class PALUDIS_VISIBLE ${a}" + fi + + if [[ 0 != "${#want_inherit[@]}" ]] ; then + echo " :" + for (( k = 0 ; k < ${#want_inherit[@]} ; k++ )) ; do + echo -n " ${want_inherit[${k}]}" + if [[ ${k} == $(( ${#want_inherit[@]} - 1 )) ]] ; then + echo + else + echo "," + fi + done else - echo "class PALUDIS_VISIBLE ${a}" + echo fi + echo "{" echo " public:" echo @@ -282,7 +308,7 @@ while read a ; do echo " */" echo " template <" for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do - echo -n " bool has_${want_keys[${k}]}_" + echo -n " bool has_${want_keys[${k}]}_ = true" if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then echo "," else @@ -381,21 +407,6 @@ while read a ; do echo " {" echo " }" echo - echo " operator ${a} () const" - echo " {" - echo " return ${a}(" - for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do - echo -n " this->${want_keys[${k}]}" - if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then - echo ", " - else - echo - fi - done - - echo " );" - echo " }" - echo echo " ///\}" echo echo " };" @@ -414,6 +425,29 @@ while read a ; do echo "#endif" fi + if [[ -n "${want_named_args}" ]] ; then + echo " ${a}(const Params<" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " true" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo "> & params) :" + fi + done + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " ${want_keys[${k}]}(params.${want_keys[${k}]})" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo + fi + done + echo " {" + echo " }" + echo + fi + echo "};" elif [[ "${what_to_make}" == "--source" ]] ; then diff --git a/paludis/dep_list/dep_list.cc b/paludis/dep_list/dep_list.cc index 077ab4ab7..41b4c8f28 100644 --- a/paludis/dep_list/dep_list.cc +++ b/paludis/dep_list/dep_list.cc @@ -113,12 +113,18 @@ namespace { class FakedVirtualVersionMetadata : public VersionMetadata, - public VersionMetadataVirtualInterface + public VersionMetadataVirtualInterface, + public virtual VersionMetadataHasInterfaces { public: FakedVirtualVersionMetadata(const SlotName & s, const PackageDatabaseEntry & e) : VersionMetadata( - VersionMetadataBase(s, "", "", "paludis-1", false), + VersionMetadataBase::create() + .slot(s) + .homepage("") + .description("") + .eapi("paludis-1") + .interactive(false), VersionMetadataCapabilities::create() .cran_interface(0) .virtual_interface(this) @@ -130,6 +136,11 @@ namespace VersionMetadataVirtualInterface(e) { } + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; struct GenerationGreaterThan diff --git a/paludis/repositories/cran/cran_version_metadata.cc b/paludis/repositories/cran/cran_version_metadata.cc index fc8b4c93c..9f94fed2f 100644 --- a/paludis/repositories/cran/cran_version_metadata.cc +++ b/paludis/repositories/cran/cran_version_metadata.cc @@ -24,25 +24,27 @@ using namespace paludis; CRANVersionMetadata::CRANVersionMetadata(bool want_origins) : VersionMetadata( - VersionMetadataBase(SlotName("unset"), "", "", "UNKNOWN", false), + VersionMetadataBase::create() + .slot(SlotName("unset")) + .homepage("") + .description("") + .eapi("UNKNOWN") + .interactive(false), VersionMetadataCapabilities::create() .cran_interface(this) .ebuild_interface(0) .license_interface(0) .virtual_interface(0) - .origins_interface(want_origins ? _origins : 0) + .origins_interface(want_origins ? this : 0) .deps_interface(this) .ebin_interface(0) ), VersionMetadataCRANInterface("", "", "", false, false), - VersionMetadataDepsInterface(CRANDepParser::parse), - _origins(want_origins ? new VersionMetadataOriginsInterface : 0) + VersionMetadataDepsInterface(CRANDepParser::parse) { } CRANVersionMetadata::~CRANVersionMetadata() { - if (_origins) - delete _origins; } diff --git a/paludis/repositories/cran/cran_version_metadata.hh b/paludis/repositories/cran/cran_version_metadata.hh index f7bc9ba01..24eabeb97 100644 --- a/paludis/repositories/cran/cran_version_metadata.hh +++ b/paludis/repositories/cran/cran_version_metadata.hh @@ -27,14 +27,18 @@ namespace paludis class CRANVersionMetadata : public VersionMetadata, public VersionMetadataCRANInterface, - public VersionMetadataDepsInterface + public VersionMetadataDepsInterface, + public VersionMetadataOriginsInterface, + public virtual VersionMetadataHasInterfaces { - private: - VersionMetadataOriginsInterface * _origins; - public: CRANVersionMetadata(bool want_origins); virtual ~CRANVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; } diff --git a/paludis/repositories/fake/fake_repository_base.cc b/paludis/repositories/fake/fake_repository_base.cc index 8dc1d55de..2169f24d8 100644 --- a/paludis/repositories/fake/fake_repository_base.cc +++ b/paludis/repositories/fake/fake_repository_base.cc @@ -304,7 +304,12 @@ FakeRepositoryBase::environment() const FakeVersionMetadata::FakeVersionMetadata() : VersionMetadata( - VersionMetadataBase(SlotName("0"), "", "", "paludis-1", false), + VersionMetadataBase::create() + .slot(SlotName("0")) + .homepage("") + .description("") + .eapi("paludis-1") + .interactive(false), VersionMetadataCapabilities::create() .ebuild_interface(this) .deps_interface(this) @@ -327,7 +332,12 @@ FakeVersionMetadata::~FakeVersionMetadata() FakeVirtualVersionMetadata::FakeVirtualVersionMetadata(const SlotName & s, const PackageDatabaseEntry & p) : VersionMetadata( - VersionMetadataBase(s, "", "", "paludis-1", false), + VersionMetadataBase::create() + .slot(s) + .homepage("") + .description("") + .eapi("paludis-1") + .interactive(false), VersionMetadataCapabilities::create() .ebuild_interface(0) .deps_interface(this) diff --git a/paludis/repositories/fake/fake_repository_base.hh b/paludis/repositories/fake/fake_repository_base.hh index 5c271701e..ad8c9cad3 100644 --- a/paludis/repositories/fake/fake_repository_base.hh +++ b/paludis/repositories/fake/fake_repository_base.hh @@ -43,11 +43,17 @@ namespace paludis public VersionMetadata, public VersionMetadataEbuildInterface, public VersionMetadataDepsInterface, - public VersionMetadataLicenseInterface + public VersionMetadataLicenseInterface, + public virtual VersionMetadataHasInterfaces { public: FakeVersionMetadata(); virtual ~FakeVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; /** @@ -60,11 +66,17 @@ namespace paludis class FakeVirtualVersionMetadata : public VersionMetadata, public VersionMetadataDepsInterface, - public VersionMetadataVirtualInterface + public VersionMetadataVirtualInterface, + public virtual VersionMetadataHasInterfaces { public: FakeVirtualVersionMetadata(const SlotName &, const PackageDatabaseEntry &); virtual ~FakeVirtualVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; /** diff --git a/paludis/repositories/gems/gems_version_metadata.cc b/paludis/repositories/gems/gems_version_metadata.cc index 40ffcdddf..4676f1f88 100644 --- a/paludis/repositories/gems/gems_version_metadata.cc +++ b/paludis/repositories/gems/gems_version_metadata.cc @@ -24,7 +24,12 @@ using namespace paludis; GemsVersionMetadata::GemsVersionMetadata(const VersionSpec & v) : VersionMetadata( - VersionMetadataBase(SlotName(stringify(v)), "", "", "paludis-1", false), + VersionMetadataBase::create() + .slot(SlotName(stringify(v))) + .homepage("") + .description("") + .eapi("paludis-1") + .interactive(false), VersionMetadataCapabilities::create() .deps_interface(this) .ebuild_interface(0) diff --git a/paludis/repositories/gems/gems_version_metadata.hh b/paludis/repositories/gems/gems_version_metadata.hh index cd141b81a..9fadb3cbb 100644 --- a/paludis/repositories/gems/gems_version_metadata.hh +++ b/paludis/repositories/gems/gems_version_metadata.hh @@ -33,11 +33,17 @@ namespace paludis */ class GemsVersionMetadata : public VersionMetadata, - public VersionMetadataDepsInterface + public VersionMetadataDepsInterface, + public virtual VersionMetadataHasInterfaces { public: GemsVersionMetadata(const VersionSpec &); virtual ~GemsVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; } diff --git a/paludis/repositories/gentoo/ebin.cc b/paludis/repositories/gentoo/ebin.cc index 9a2411f63..bbd579662 100644 --- a/paludis/repositories/gentoo/ebin.cc +++ b/paludis/repositories/gentoo/ebin.cc @@ -32,7 +32,12 @@ using namespace paludis; EbinVersionMetadata::EbinVersionMetadata(const SlotName & s) : VersionMetadata( - VersionMetadataBase(s, "", "", "paludis-1", false), + VersionMetadataBase::create() + .slot(s) + .homepage("") + .description("") + .eapi("paludis-1") + .interactive(false), VersionMetadataCapabilities::create() .ebin_interface(this) .ebuild_interface(this) diff --git a/paludis/repositories/gentoo/ebin.hh b/paludis/repositories/gentoo/ebin.hh index a471cf8a2..1ebacd099 100644 --- a/paludis/repositories/gentoo/ebin.hh +++ b/paludis/repositories/gentoo/ebin.hh @@ -40,11 +40,17 @@ namespace paludis public VersionMetadataEbinInterface, public VersionMetadataDepsInterface, public VersionMetadataLicenseInterface, - public VersionMetadataOriginsInterface + public VersionMetadataOriginsInterface, + public virtual VersionMetadataHasInterfaces { public: EbinVersionMetadata(const SlotName &); virtual ~EbinVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; class EbinCommand : diff --git a/paludis/repositories/gentoo/ebuild.cc b/paludis/repositories/gentoo/ebuild.cc index 72aff1963..6069aedd9 100644 --- a/paludis/repositories/gentoo/ebuild.cc +++ b/paludis/repositories/gentoo/ebuild.cc @@ -449,7 +449,12 @@ EbuildUninstallCommand::EbuildUninstallCommand(const EbuildCommandParams & p, EbuildVersionMetadata::EbuildVersionMetadata() : VersionMetadata( - VersionMetadataBase(SlotName("unset"), "", "", "UNKNOWN", false), + VersionMetadataBase::create() + .slot(SlotName("UNSET")) + .homepage("") + .description("") + .eapi("UNKNOWN") + .interactive(false), VersionMetadataCapabilities::create() .ebuild_interface(this) .cran_interface(0) diff --git a/paludis/repositories/gentoo/ebuild.hh b/paludis/repositories/gentoo/ebuild.hh index eae7764b9..f775a7f49 100644 --- a/paludis/repositories/gentoo/ebuild.hh +++ b/paludis/repositories/gentoo/ebuild.hh @@ -65,11 +65,17 @@ namespace paludis public VersionMetadata, public VersionMetadataEbuildInterface, public VersionMetadataDepsInterface, - public VersionMetadataLicenseInterface + public VersionMetadataLicenseInterface, + public virtual VersionMetadataHasInterfaces { public: EbuildVersionMetadata(); virtual ~EbuildVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; /** diff --git a/paludis/repositories/gentoo/portage_virtual_version_metadata.cc b/paludis/repositories/gentoo/portage_virtual_version_metadata.cc index 5e4ff7d26..f5a0dfda9 100644 --- a/paludis/repositories/gentoo/portage_virtual_version_metadata.cc +++ b/paludis/repositories/gentoo/portage_virtual_version_metadata.cc @@ -25,7 +25,12 @@ using namespace paludis; PortageVirtualVersionMetadata::PortageVirtualVersionMetadata(const SlotName & s, const PackageDatabaseEntry & e) : VersionMetadata( - VersionMetadataBase(s, "", "", "paludis-1", false), + VersionMetadataBase::create() + .slot(s) + .homepage("") + .description("") + .eapi("paludis-1") + .interactive(false), VersionMetadataCapabilities::create() .virtual_interface(this) .ebuild_interface(0) diff --git a/paludis/repositories/gentoo/portage_virtual_version_metadata.hh b/paludis/repositories/gentoo/portage_virtual_version_metadata.hh index 79e602821..eb412c8ca 100644 --- a/paludis/repositories/gentoo/portage_virtual_version_metadata.hh +++ b/paludis/repositories/gentoo/portage_virtual_version_metadata.hh @@ -27,11 +27,17 @@ namespace paludis class PortageVirtualVersionMetadata : public VersionMetadata, public VersionMetadataVirtualInterface, - public VersionMetadataDepsInterface + public VersionMetadataDepsInterface, + public virtual VersionMetadataHasInterfaces { public: PortageVirtualVersionMetadata(const SlotName &, const PackageDatabaseEntry &); virtual ~PortageVirtualVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; } diff --git a/paludis/repositories/gentoo/vdb_version_metadata.cc b/paludis/repositories/gentoo/vdb_version_metadata.cc index 3ced16c20..be2026a1b 100644 --- a/paludis/repositories/gentoo/vdb_version_metadata.cc +++ b/paludis/repositories/gentoo/vdb_version_metadata.cc @@ -24,16 +24,21 @@ using namespace paludis; VDBVersionMetadata::VDBVersionMetadata() : VersionMetadata( - VersionMetadataBase(SlotName("unset"), "", "", "UNKNOWN", false), - VersionMetadataCapabilities::create() - .deps_interface(this) - .origins_interface(this) - .ebuild_interface(this) - .license_interface(this) - .virtual_interface(0) - .cran_interface(0) - .ebin_interface(0) - ), + VersionMetadataBase::create() + .slot(SlotName("UNSET")) + .homepage("") + .description("") + .eapi("UNKNOWN") + .interactive(false), + VersionMetadataCapabilities::create() + .deps_interface(this) + .origins_interface(this) + .ebuild_interface(this) + .license_interface(this) + .virtual_interface(0) + .cran_interface(0) + .ebin_interface(0) + ), VersionMetadataDepsInterface(&PortageDepParser::parse_depend), VersionMetadataLicenseInterface(&PortageDepParser::parse_license) { @@ -46,15 +51,20 @@ VDBVersionMetadata::~VDBVersionMetadata() VDBVirtualVersionMetadata::VDBVirtualVersionMetadata(const SlotName & s, const PackageDatabaseEntry & e) : VersionMetadata( - VersionMetadataBase(s, "", "", "UNKNOWN", false), - VersionMetadataCapabilities::create() - .deps_interface(this) - .origins_interface(0) - .ebuild_interface(0) - .license_interface(0) - .virtual_interface(this) - .cran_interface(0) - .ebin_interface(0) + VersionMetadataBase::create() + .slot(s) + .homepage("") + .description("") + .eapi("UNKNOWN") + .interactive(false), + VersionMetadataCapabilities::create() + .deps_interface(this) + .origins_interface(0) + .ebuild_interface(0) + .license_interface(0) + .virtual_interface(this) + .cran_interface(0) + .ebin_interface(0) ), VersionMetadataDepsInterface(&PortageDepParser::parse_depend), VersionMetadataVirtualInterface(e) diff --git a/paludis/repositories/gentoo/vdb_version_metadata.hh b/paludis/repositories/gentoo/vdb_version_metadata.hh index f22721bda..e2063a3a0 100644 --- a/paludis/repositories/gentoo/vdb_version_metadata.hh +++ b/paludis/repositories/gentoo/vdb_version_metadata.hh @@ -29,21 +29,33 @@ namespace paludis public VersionMetadataDepsInterface, public VersionMetadataOriginsInterface, public VersionMetadataEbuildInterface, - public VersionMetadataLicenseInterface + public VersionMetadataLicenseInterface, + public virtual VersionMetadataHasInterfaces { public: VDBVersionMetadata(); virtual ~VDBVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; class VDBVirtualVersionMetadata : public VersionMetadata, public VersionMetadataDepsInterface, - public VersionMetadataVirtualInterface + public VersionMetadataVirtualInterface, + public virtual VersionMetadataHasInterfaces { public: VDBVirtualVersionMetadata(const SlotName &, const PackageDatabaseEntry &); virtual ~VDBVirtualVersionMetadata(); + + virtual const VersionMetadata * version_metadata() const + { + return this; + } }; } diff --git a/paludis/version_metadata.cc b/paludis/version_metadata.cc index 49c7f5e0b..f2cdd0870 100644 --- a/paludis/version_metadata.cc +++ b/paludis/version_metadata.cc @@ -66,7 +66,7 @@ VersionMetadata::~VersionMetadata() { } -VersionMetadata::VersionMetadata(const VersionMetadataBase & base, const VersionMetadataCapabilities & caps) : +VersionMetadata::VersionMetadata(const VersionMetadataBase::Params<> & base, const VersionMetadataCapabilities & caps) : VersionMetadataBase(base), VersionMetadataCapabilities(caps) { @@ -102,3 +102,11 @@ VersionMetadataEbinInterface::VersionMetadataEbinInterface() { } +VersionMetadataHasInterfaces::VersionMetadataHasInterfaces() +{ +} + +VersionMetadataHasInterfaces::~VersionMetadataHasInterfaces() +{ +} + diff --git a/paludis/version_metadata.hh b/paludis/version_metadata.hh index 2d9b63ed6..3995f3540 100644 --- a/paludis/version_metadata.hh +++ b/paludis/version_metadata.hh @@ -43,6 +43,18 @@ namespace paludis class VersionMetadataOriginsInterface; class VersionMetadataVirtualInterface; class VersionMetadataLicenseInterface; + class VersionMetadata; + + class VersionMetadataHasInterfaces + { + protected: + VersionMetadataHasInterfaces(); + + public: + virtual ~VersionMetadataHasInterfaces(); + + virtual const VersionMetadata * version_metadata() const = 0; + }; /** * A pointer to a parse function. @@ -67,7 +79,7 @@ namespace paludis virtual ~VersionMetadata(); protected: - VersionMetadata(const VersionMetadataBase &, const VersionMetadataCapabilities &); + VersionMetadata(const VersionMetadataBase::Params<> &, const VersionMetadataCapabilities &); }; } diff --git a/paludis/version_metadata.sr b/paludis/version_metadata.sr index e4b9cd03c..00e4d8dcd 100644 --- a/paludis/version_metadata.sr +++ b/paludis/version_metadata.sr @@ -26,6 +26,8 @@ END make_class_VersionMetadataDepsInterface() { + inherit "public virtual VersionMetadataHasInterfaces" + key parser ParserFunction key build_depend_string std::string @@ -71,6 +73,8 @@ END make_class_VersionMetadataLicenseInterface() { + inherit "public virtual VersionMetadataHasInterfaces" + key parser ParserFunction key license_string std::string @@ -98,6 +102,8 @@ END make_class_VersionMetadataOriginsInterface() { + inherit "public virtual VersionMetadataHasInterfaces" + key "source" "std::tr1::shared_ptr<PackageDatabaseEntry>" key "binary" "std::tr1::shared_ptr<PackageDatabaseEntry>" @@ -117,6 +123,8 @@ END make_class_VersionMetadataBase() { + inherit "public virtual VersionMetadataHasInterfaces" + key slot SlotName key homepage std::string key description std::string @@ -137,6 +145,8 @@ END make_class_VersionMetadataEbuildInterface() { + inherit "public virtual VersionMetadataHasInterfaces" + key provide_string std::string key src_uri std::string key restrict_string std::string @@ -170,6 +180,8 @@ END make_class_VersionMetadataEbinInterface() { + inherit "public virtual VersionMetadataHasInterfaces" + key bin_uri std::string extra_constructors <<END @@ -190,6 +202,8 @@ END make_class_VersionMetadataCRANInterface() { + inherit "public virtual VersionMetadataHasInterfaces" + key keywords std::string key package std::string key version std::string @@ -210,6 +224,8 @@ END make_class_VersionMetadataVirtualInterface() { + inherit "public virtual VersionMetadataHasInterfaces" + key virtual_for PackageDatabaseEntry doxygen_comment << "END" |