/* 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 #include #include #include #include #include #include #include #include #include /** \file * Declarations for mask classes. * * \ingroup g_mask * * \section Examples * * - \ref example_mask.cc "example_mask.cc" (for masks) */ namespace paludis { namespace n { typedef Name comment; typedef Name mask; typedef Name mask_file; typedef Name override_reason; typedef Name token; } /** * 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 */ class PALUDIS_VISIBLE Mask : public virtual DeclareAbstractAcceptMethods::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. */ virtual char key() const = 0; /** * A description of the mask. */ virtual const std::string description() const = 0; }; /** * A UserMask is a Mask due to user configuration. * * \ingroup g_mask * \since 0.26 * \nosubgrouping */ class PALUDIS_VISIBLE UserMask : public Mask, public ImplementAcceptMethods { public: /** * An associated token, for Environment::unmasked_by_user. Might be empty, * but is probably "user". * * \since 0.60 */ virtual const std::string token() const; }; /** * 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 */ class PALUDIS_VISIBLE UnacceptedMask : public Mask, public ImplementAcceptMethods { public: /** * Fetch the raw name of the metadata key that is not accepted. * * \since 0.59 */ virtual const std::string unaccepted_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 */ class PALUDIS_VISIBLE RepositoryMask : public Mask, public ImplementAcceptMethods { public: /** * An associated comment. Might be empty. * * \since 0.59 */ virtual const std::string comment() const = 0; /** * An associated token, for Environment::unmasked_by_user. Might be empty. * * \since 0.59 */ virtual const std::string token() const = 0; /** * The file whence the mask originates. * * \since 0.59 */ virtual const FSPath mask_file() 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 */ class PALUDIS_VISIBLE UnsupportedMask : public Mask, public ImplementAcceptMethods { public: /** * An explanation of why we are unsupported. */ virtual const std::string explanation() const = 0; }; /** * An OverriddenMask holds a Mask and an explanation of why it has been overridden. * * \ingroup g_mask * \since 0.34 */ struct OverriddenMask { NamedValue > mask; NamedValue override_reason; }; } #endif