Exheredludis/paludis/literal_metadata_key.hh
2011-09-14 09:57:40 +01:00

289 lines
10 KiB
C++

/* 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_LITERAL_METADATA_KEY_HH
#define PALUDIS_GUARD_PALUDIS_LITERAL_METADATA_KEY_HH 1
#include <paludis/metadata_key.hh>
#include <paludis/util/pimp.hh>
#include <paludis/util/sequence.hh>
#include <paludis/util/set.hh>
/** \file
* Declarations for literal metadata key classes.
*
* \ingroup g_literal_metadata_key
*
* \section Examples
*
* - \ref example_metadata_key.cc "example_metadata_key.cc" (for metadata keys)
*/
namespace paludis
{
template <typename T_>
class PALUDIS_VISIBLE PrettyPrintableLiteralMetadataValueKey :
public MetadataValueKey<T_>
{
public:
virtual const std::string pretty_print_value(
const PrettyPrinter &,
const PrettyPrintOptions &) const PALUDIS_ATTRIBUTE((warn_unused_result));
};
/**
* A LiteralMetadataValueKey is a MetadataValueKey whose value is a
* copyable literal that is known at construction time.
*
* \ingroup g_literal_metadata_key
* \since 0.26
*/
template <typename T_>
class PALUDIS_VISIBLE LiteralMetadataValueKey :
public std::conditional<MetadataValueKeyIsPrettyPrintable<T_>::value, PrettyPrintableLiteralMetadataValueKey<T_>, MetadataValueKey<T_> >::type
{
private:
Pimp<LiteralMetadataValueKey<T_> > _imp;
public:
///\name Basic operations
///\{
LiteralMetadataValueKey(const std::string &, const std::string &, const MetadataKeyType,
const T_ &);
~LiteralMetadataValueKey();
///\}
virtual const T_ parse_value() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result));
/**
* \since 0.36
*/
void change_value(const T_ &);
};
/**
* A LiteralMetadataFSPathSequenceKey is a MetadataCollectionKey<FSPathSequence>
* whose value is known at construction time.
*
* \ingroup g_literal_metadata_key
* \since 0.26
*/
class PALUDIS_VISIBLE LiteralMetadataFSPathSequenceKey :
public MetadataCollectionKey<FSPathSequence>
{
private:
Pimp<LiteralMetadataFSPathSequenceKey> _imp;
public:
///\name Basic operations
///\{
LiteralMetadataFSPathSequenceKey(const std::string &, const std::string &, const MetadataKeyType,
const std::shared_ptr<const FSPathSequence> &);
~LiteralMetadataFSPathSequenceKey();
///\}
virtual const std::shared_ptr<const FSPathSequence> parse_value() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string pretty_print_value(
const PrettyPrinter &,
const PrettyPrintOptions &) const PALUDIS_ATTRIBUTE((warn_unused_result));
};
/**
* A LiteralMetadataStringSetKey is a MetadataCollectionKey<Set<std::string> >
* whose value is known at construction time.
*
* \ingroup g_literal_metadata_key
* \since 0.26
*/
class PALUDIS_VISIBLE LiteralMetadataStringSetKey :
public MetadataCollectionKey<Set<std::string> >
{
private:
Pimp<LiteralMetadataStringSetKey> _imp;
public:
///\name Basic operations
///\{
LiteralMetadataStringSetKey(const std::string &, const std::string &, const MetadataKeyType,
const std::shared_ptr<const Set<std::string> > &);
~LiteralMetadataStringSetKey();
///\}
virtual const std::shared_ptr<const Set<std::string> > parse_value() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string pretty_print_value(
const PrettyPrinter &,
const PrettyPrintOptions &) const PALUDIS_ATTRIBUTE((warn_unused_result));
};
/**
* A LiteralMetadataStringSequenceKey is a MetadataCollectionKey<Sequence<std::string> >
* whose value is known at construction time.
*
* \ingroup g_literal_metadata_key
* \since 0.30
*/
class PALUDIS_VISIBLE LiteralMetadataStringSequenceKey :
public MetadataCollectionKey<Sequence<std::string> >
{
private:
Pimp<LiteralMetadataStringSequenceKey> _imp;
public:
///\name Basic operations
///\{
LiteralMetadataStringSequenceKey(const std::string &, const std::string &, const MetadataKeyType,
const std::shared_ptr<const Sequence<std::string> > &);
~LiteralMetadataStringSequenceKey();
///\}
virtual const std::shared_ptr<const Sequence<std::string> > parse_value() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string pretty_print_value(
const PrettyPrinter &,
const PrettyPrintOptions &) const PALUDIS_ATTRIBUTE((warn_unused_result));
};
/**
* A LiteralMetadataTimeKey is a MetadataTimeKey whose value is known at
* construction time.
*
* \ingroup g_literal_metadata_key
* \since 0.36
* \since 0.44 Timestamp instead of time_t
*/
class PALUDIS_VISIBLE LiteralMetadataTimeKey :
public MetadataTimeKey
{
private:
Pimp<LiteralMetadataTimeKey> _imp;
public:
///\name Basic operations
///\{
LiteralMetadataTimeKey(const std::string &, const std::string &, const MetadataKeyType, const Timestamp);
~LiteralMetadataTimeKey();
///\}
virtual Timestamp parse_value() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result));
};
/**
* A LiteralMetadataStringStringMapKey is a MetadataCollectionKey<Set<std::string> >
* whose value is known at construction time.
*
* \ingroup g_literal_metadata_key
* \since 0.55
*/
class PALUDIS_VISIBLE LiteralMetadataStringStringMapKey :
public MetadataCollectionKey<Map<std::string, std::string> >
{
private:
Pimp<LiteralMetadataStringStringMapKey> _imp;
public:
///\name Basic operations
///\{
LiteralMetadataStringStringMapKey(const std::string &, const std::string &, const MetadataKeyType,
const std::shared_ptr<const Map<std::string, std::string> > &);
~LiteralMetadataStringStringMapKey();
///\}
virtual const std::shared_ptr<const Map<std::string, std::string> > parse_value() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string pretty_print_value(
const PrettyPrinter &,
const PrettyPrintOptions &) const PALUDIS_ATTRIBUTE((warn_unused_result));
};
/**
* A LiteralMetadataMaintainersKey is a MetadataCollectionKey<Maintainers>
* whose value is known at construction time.
*
* \ingroup g_literal_metadata_key
* \since 0.68
*/
class PALUDIS_VISIBLE LiteralMetadataMaintainersKey :
public MetadataCollectionKey<Maintainers>
{
private:
Pimp<LiteralMetadataMaintainersKey> _imp;
public:
///\name Basic operations
///\{
LiteralMetadataMaintainersKey(const std::string &, const std::string &, const MetadataKeyType,
const std::shared_ptr<const Maintainers> &);
~LiteralMetadataMaintainersKey();
///\}
virtual const std::shared_ptr<const Maintainers> parse_value() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result));
virtual const std::string pretty_print_value(
const PrettyPrinter &,
const PrettyPrintOptions &) const PALUDIS_ATTRIBUTE((warn_unused_result));
};
}
#endif