/* vim: set sw=4 sts=4 et foldmethod=syntax : *//* * Copyright (c) 2007, 2008, 2009, 2010, 2011 Ciaran McCreesh * * This file is part of the Paludis package manager. Paludis is free software; * you can redistribute it and/or modify it under the terms of the GNU General * Public License version 2, as published by the Free Software Foundation. * * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA */#ifndef PALUDIS_GUARD_PALUDIS_MASK_HH#define PALUDIS_GUARD_PALUDIS_MASK_HH 1#include<paludis/mask-fwd.hh>#include<paludis/package_id-fwd.hh>#include<paludis/dep_spec-fwd.hh>#include<paludis/util/visitor.hh>#include<paludis/util/attributes.hh>#include<paludis/util/fs_path.hh>#include<paludis/util/sequence-fwd.hh>#include<paludis/util/named_value.hh>#include<paludis/util/type_list.hh>#include<string>/** \file * Declarations for mask classes. * * \ingroup g_mask * * \section Examples * * - \ref example_mask.cc "example_mask.cc" (for masks) */namespacepaludis{namespacen{typedefName<structname_comment>comment;typedefName<structname_mask>mask;typedefName<structname_mask_file>mask_file;typedefName<structname_override_reason>override_reason;}/** * Information about a RepositoryMask. * * The mask_file key holds the file whence the mask originates. * * The comment key is a sequence of lines explaining the mask. * * \ingroup g_package_id * \since 0.30 * \nosubgrouping */structRepositoryMaskInfo{NamedValue<n::comment,std::shared_ptr<constSequence<std::string>>>comment;NamedValue<n::mask_file,FSPath>mask_file;};/** * A Mask represents one reason why a PackageID is masked (not available to * be installed). * * A basic Mask has: * * - A single character key, which can be used by clients if they need a * very compact way of representing a mask. * * - A description. * * Subclasses provide additional information. * * \ingroup g_mask * \since 0.26 * \nosubgrouping */classPALUDIS_VISIBLEMask:publicvirtualDeclareAbstractAcceptMethods<Mask,MakeTypeList<UserMask,UnacceptedMask,RepositoryMask,UnsupportedMask,AssociationMask>::Type>{public:///\name Basic operations///\{virtual~Mask()=0;///\}/** * A single character key, which can be used by clients if they need * a very compact way of representing a mask. */virtualcharkey()const=0;/** * A description of the mask. */virtualconststd::stringdescription()const=0;};/** * A UserMask is a Mask due to user configuration. * * \ingroup g_mask * \since 0.26 * \nosubgrouping */classPALUDIS_VISIBLEUserMask:publicMask,publicImplementAcceptMethods<Mask,UserMask>{};/** * An UnacceptedMask is a Mask that signifies that a particular value or * combination of values in (for example) a MetadataCollectionKey or * MetadataSpecTreeKey is not accepted by user configuration. * * \ingroup g_mask * \since 0.26 * \nosubgrouping */classPALUDIS_VISIBLEUnacceptedMask:publicMask,publicImplementAcceptMethods<Mask,UnacceptedMask>{public:/** * Fetch the raw name of the metadata key that is not accepted. * * \since 0.59 */virtualconststd::stringunaccepted_key_name()const=0;};/** * A RepositoryMask is a Mask that signifies that a PackageID has been * marked as masked by a Repository. * * \ingroup g_mask * \since 0.26 * \nosubgrouping */classPALUDIS_VISIBLERepositoryMask:publicMask,publicImplementAcceptMethods<Mask,RepositoryMask>{public:/** * Fetch the raw name of a metadata key explaining the mask. May * return a zero pointer, if no more information is available. * * \since 0.59 */virtualconststd::stringmask_key_name()const=0;};/** * An UnsupportedMask is a Mask that signifies that a PackageID is not * supported, for example because it is broken or because it uses an * unrecognised EAPI. * * \ingroup g_mask * \since 0.26 * \nosubgrouping */classPALUDIS_VISIBLEUnsupportedMask:publicMask,publicImplementAcceptMethods<Mask,UnsupportedMask>{public:/** * An explanation of why we are unsupported. */virtualconststd::stringexplanation()const=0;};/** * An AssociationMask is a Mask that signifies that a PackageID is masked * because of its association with another PackageID that is itself masked. * * This is used by old-style virtuals. If the provider of a virtual is * masked then the virtual itself is masked by association. * * \ingroup g_mask * \since 0.26 * \nosubgrouping */classPALUDIS_VISIBLEAssociationMask:publicMask,publicImplementAcceptMethods<Mask,AssociationMask>{public:/** * Fetch a spec identifying the associated package. * * \since 0.59 */virtualconstPackageDepSpecassociated_package_spec()const=0;};/** * An OverriddenMask holds a Mask and an explanation of why it has been overridden. * * \ingroup g_mask * \since 0.34 */structOverriddenMask{NamedValue<n::mask,std::shared_ptr<constMask>>mask;NamedValue<n::override_reason,MaskOverrideReason>override_reason;};}#endif