// Boost.Bimap

//

// Copyright (c) 2006-2007 Matias Capeletto

//

// Distributed under the Boost Software License, Version 1.0.

// (See accompanying file LICENSE_1_0.txt or copy at

// http://www.boost.org/LICENSE_1_0.txt)



/// \file container_adaptor/unordered_set_adaptor.hpp

/// \brief Container adaptor to easily build a std::unordered_set signature compatible container.



#ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_UNORDERED_SET_ADAPTOR_HPP

#define BOOST_BIMAP_CONTAINER_ADAPTOR_UNORDERED_SET_ADAPTOR_HPP



#if defined(_MSC_VER) && (_MSC_VER>=1200)

#pragma once

#endif



#include <boost/config.hpp>



#include <boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp>

#include <boost/mpl/aux_/na.hpp>

#include <boost/mpl/vector.hpp>



namespace boost {

namespace bimaps {

namespace container_adaptor {



/// \brief Container adaptor to easily build a std::unordered_set signature compatible container.



template

<

    class Base,



    class Iterator,

    class ConstIterator,

    class LocalIterator,

    class ConstLocalIterator,



    class IteratorToBaseConverter        = ::boost::mpl::na,

    class IteratorFromBaseConverter      = ::boost::mpl::na,

    class LocalIteratorFromBaseConverter = ::boost::mpl::na,

    class ValueToBaseConverter           = ::boost::mpl::na,

    class ValueFromBaseConverter         = ::boost::mpl::na,

    class KeyToBaseConverter             = ::boost::mpl::na,



    class FunctorsFromDerivedClasses = mpl::vector<>

>

class unordered_set_adaptor :



    public ::boost::bimaps::container_adaptor::

                unordered_associative_container_adaptor

    <

        Base,

        Iterator, ConstIterator, LocalIterator, ConstLocalIterator,

        BOOST_DEDUCED_TYPENAME Iterator::value_type,

        IteratorToBaseConverter, IteratorFromBaseConverter,

        LocalIteratorFromBaseConverter,

        ValueToBaseConverter, ValueFromBaseConverter,

        KeyToBaseConverter,

        FunctorsFromDerivedClasses

    >

{

    typedef ::boost::bimaps::container_adaptor::

                unordered_associative_container_adaptor

    <

        Base,

        Iterator, ConstIterator, LocalIterator, ConstLocalIterator,

        BOOST_DEDUCED_TYPENAME Iterator::value_type,

        IteratorToBaseConverter, IteratorFromBaseConverter,

        LocalIteratorFromBaseConverter,

        ValueToBaseConverter, ValueFromBaseConverter,

        KeyToBaseConverter,

        FunctorsFromDerivedClasses



    > base_;



    // Access -----------------------------------------------------------------



    public:



    explicit unordered_set_adaptor(Base & c) :

        base_(c) {}



    protected:



    typedef unordered_set_adaptor unordered_set_adaptor_;



};





} // namespace container_adaptor

} // namespace bimaps

} // namespace boost





#endif // BOOST_BIMAP_CONTAINER_ADAPTOR_UNORDERED_SET_ADAPTOR_HPP



