2007-10-21 00:52:09 +00:00
|
|
|
/*=============================================================================
|
|
|
|
Copyright (c) 2005 Joel de Guzman
|
|
|
|
|
|
|
|
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)
|
|
|
|
==============================================================================*/
|
|
|
|
#if !defined(FUSION_MAP_07212005_1106)
|
|
|
|
#define FUSION_MAP_07212005_1106
|
|
|
|
|
|
|
|
#include <boost/fusion/support/pair.hpp>
|
|
|
|
#include <boost/fusion/support/category_of.hpp>
|
|
|
|
#include <boost/fusion/support/detail/access.hpp>
|
|
|
|
#include <boost/fusion/container/map/map_fwd.hpp>
|
|
|
|
#include <boost/fusion/container/map/detail/begin_impl.hpp>
|
|
|
|
#include <boost/fusion/container/map/detail/end_impl.hpp>
|
2009-10-25 22:59:54 +00:00
|
|
|
#include <boost/fusion/container/map/detail/value_of_impl.hpp>
|
|
|
|
#include <boost/fusion/container/map/detail/deref_data_impl.hpp>
|
|
|
|
#include <boost/fusion/container/map/detail/deref_impl.hpp>
|
|
|
|
#include <boost/fusion/container/map/detail/key_of_impl.hpp>
|
|
|
|
#include <boost/fusion/container/map/detail/value_of_data_impl.hpp>
|
2007-10-21 00:52:09 +00:00
|
|
|
#include <boost/fusion/container/vector/vector.hpp>
|
|
|
|
#include <boost/mpl/identity.hpp>
|
|
|
|
#include <boost/mpl/bool.hpp>
|
|
|
|
|
|
|
|
namespace boost { namespace fusion
|
|
|
|
{
|
|
|
|
struct void_;
|
|
|
|
struct fusion_sequence_tag;
|
|
|
|
|
|
|
|
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, typename T)>
|
|
|
|
struct map : sequence_base<map<BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)> >
|
|
|
|
{
|
|
|
|
struct category : forward_traversal_tag, associative_sequence_tag {};
|
|
|
|
|
|
|
|
typedef map_tag fusion_tag;
|
|
|
|
typedef fusion_sequence_tag tag; // this gets picked up by MPL
|
|
|
|
typedef mpl::false_ is_view;
|
|
|
|
|
|
|
|
typedef vector<
|
|
|
|
BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)>
|
|
|
|
storage_type;
|
|
|
|
|
|
|
|
typedef typename storage_type::size size;
|
|
|
|
|
|
|
|
map()
|
|
|
|
: data() {}
|
|
|
|
|
|
|
|
template <typename Sequence>
|
|
|
|
map(Sequence const& rhs)
|
|
|
|
: data(rhs) {}
|
|
|
|
|
|
|
|
#include <boost/fusion/container/map/detail/map_forward_ctor.hpp>
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
map&
|
|
|
|
operator=(T const& rhs)
|
|
|
|
{
|
|
|
|
data = rhs;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
storage_type& get_data() { return data; }
|
|
|
|
storage_type const& get_data() const { return data; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
storage_type data;
|
|
|
|
};
|
|
|
|
}}
|
|
|
|
|
|
|
|
#endif
|