/* vim: set sw=4 sts=4 et foldmethod=syntax : */

/*
 * Copyright (c) 2007, 2008 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_PACKAGE_ID_FWD_HH
#define PALUDIS_GUARD_PALUDIS_PACKAGE_ID_FWD_HH 1

#include <iosfwd>
#include <paludis/util/attributes.hh>
#include <paludis/util/set-fwd.hh>
#include <paludis/util/sequence-fwd.hh>
#include <memory>

/** \file
 * Forward declarations for paludis/package_id.hh .
 *
 * \ingroup g_package_id
 */

namespace paludis
{
    class PackageID;
    class PackageIDSetComparator;
    class PackageIDComparator;

    /**
     * A PackageIDSequence holds a collection of PackageID instances that may
     * or may not have been ordered in a meaningful way.
     *
     * \ingroup g_package_id
     * \since 0.26
     */
    typedef Sequence<std::shared_ptr<const PackageID> > PackageIDSequence;

    /**
     * A PackageIDSet holds a collection of PackageID instances that have no
     * meaningful ordering.
     *
     * \ingroup g_package_id
     * \since 0.26
     */
    typedef Set<std::shared_ptr<const PackageID>, PackageIDSetComparator> PackageIDSet;

#include <paludis/package_id-se.hh>

    /**
     * A PackageID can be written to a stream.
     *
     * \ingroup g_package_id
     * \since 0.26
     */
    std::ostream & operator<< (std::ostream &, const PackageID &) PALUDIS_VISIBLE;
}

#endif