Unordered: Move rebind into 'types' classes.

Makes the types in error messages a tad bit nicer.

[SVN r75742]
This commit is contained in:
Daniel James
2011-11-30 08:21:04 +00:00
parent 21f1fe8185
commit 2507fd78e3
4 changed files with 42 additions and 62 deletions

View File

@ -115,20 +115,21 @@ namespace boost { namespace unordered { namespace detail {
typedef typename pick::link_pointer link_pointer; typedef typename pick::link_pointer link_pointer;
}; };
template <typename A, typename H, typename P> template <typename A, typename T, typename H, typename P>
struct multiset struct multiset
{ {
typedef boost::unordered::detail::multiset<A, H, P> types; typedef boost::unordered::detail::multiset<A, T, H, P> types;
typedef A allocator; typedef T value_type;
typedef H hasher; typedef H hasher;
typedef P key_equal; typedef P key_equal;
typedef T key_type;
typedef boost::unordered::detail::allocator_traits<A> traits; typedef typename boost::unordered::detail::rebind_wrap<
typedef typename traits::value_type value_type; A, value_type>::type allocator;
typedef value_type key_type;
typedef boost::unordered::detail::pick_grouped_node<A, value_type> pick; typedef boost::unordered::detail::allocator_traits<allocator> traits;
typedef boost::unordered::detail::pick_grouped_node<allocator, value_type> pick;
typedef typename pick::node node; typedef typename pick::node node;
typedef typename pick::bucket bucket; typedef typename pick::bucket bucket;
typedef typename pick::link_pointer link_pointer; typedef typename pick::link_pointer link_pointer;
@ -137,20 +138,21 @@ namespace boost { namespace unordered { namespace detail {
typedef boost::unordered::detail::set_extractor<value_type> extractor; typedef boost::unordered::detail::set_extractor<value_type> extractor;
}; };
template <typename A, typename K, typename H, typename P> template <typename A, typename K, typename M, typename H, typename P>
struct multimap struct multimap
{ {
typedef boost::unordered::detail::multimap<A, K, H, P> types; typedef boost::unordered::detail::multimap<A, K, M, H, P> types;
typedef A allocator; typedef std::pair<K const, M> value_type;
typedef H hasher; typedef H hasher;
typedef P key_equal; typedef P key_equal;
typedef K key_type; typedef K key_type;
typedef boost::unordered::detail::allocator_traits<A> traits; typedef typename boost::unordered::detail::rebind_wrap<
typedef typename traits::value_type value_type; A, value_type>::type allocator;
typedef boost::unordered::detail::pick_grouped_node<A, value_type> pick; typedef boost::unordered::detail::allocator_traits<allocator> traits;
typedef boost::unordered::detail::pick_grouped_node<allocator, value_type> pick;
typedef typename pick::node node; typedef typename pick::node node;
typedef typename pick::bucket bucket; typedef typename pick::bucket bucket;
typedef typename pick::link_pointer link_pointer; typedef typename pick::link_pointer link_pointer;

View File

@ -111,20 +111,21 @@ namespace boost { namespace unordered { namespace detail {
typedef typename pick::link_pointer link_pointer; typedef typename pick::link_pointer link_pointer;
}; };
template <typename A, typename H, typename P> template <typename A, typename T, typename H, typename P>
struct set struct set
{ {
typedef boost::unordered::detail::set<A, H, P> types; typedef boost::unordered::detail::set<A, T, H, P> types;
typedef A allocator; typedef T value_type;
typedef H hasher; typedef H hasher;
typedef P key_equal; typedef P key_equal;
typedef T key_type;
typedef boost::unordered::detail::allocator_traits<A> traits; typedef typename boost::unordered::detail::rebind_wrap<
typedef typename traits::value_type value_type; A, value_type>::type allocator;
typedef value_type key_type;
typedef boost::unordered::detail::pick_node<A, value_type> pick; typedef boost::unordered::detail::allocator_traits<allocator> traits;
typedef boost::unordered::detail::pick_node<allocator, value_type> pick;
typedef typename pick::node node; typedef typename pick::node node;
typedef typename pick::bucket bucket; typedef typename pick::bucket bucket;
typedef typename pick::link_pointer link_pointer; typedef typename pick::link_pointer link_pointer;
@ -133,20 +134,21 @@ namespace boost { namespace unordered { namespace detail {
typedef boost::unordered::detail::set_extractor<value_type> extractor; typedef boost::unordered::detail::set_extractor<value_type> extractor;
}; };
template <typename A, typename K, typename H, typename P> template <typename A, typename K, typename M, typename H, typename P>
struct map struct map
{ {
typedef boost::unordered::detail::map<A, K, H, P> types; typedef boost::unordered::detail::map<A, K, M, H, P> types;
typedef A allocator; typedef std::pair<K const, M> value_type;
typedef H hasher; typedef H hasher;
typedef P key_equal; typedef P key_equal;
typedef K key_type; typedef K key_type;
typedef boost::unordered::detail::allocator_traits<A> traits; typedef typename boost::unordered::detail::rebind_wrap<
typedef typename traits::value_type value_type; A, value_type>::type allocator;
typedef boost::unordered::detail::pick_node<A, value_type> pick; typedef boost::unordered::detail::allocator_traits<allocator> traits;
typedef boost::unordered::detail::pick_node<allocator, value_type> pick;
typedef typename pick::node node; typedef typename pick::node node;
typedef typename pick::bucket bucket; typedef typename pick::bucket bucket;
typedef typename pick::link_pointer link_pointer; typedef typename pick::link_pointer link_pointer;

View File

@ -54,15 +54,9 @@ namespace unordered
private: private:
typedef typename boost::unordered::detail::rebind_wrap< typedef boost::unordered::detail::map<A, K, T, H, P> types;
allocator_type, value_type>::type typedef typename types::allocator value_allocator;
value_allocator; typedef typename types::traits allocator_traits;
typedef boost::unordered::detail::allocator_traits<value_allocator>
allocator_traits;
typedef boost::unordered::detail::map<value_allocator, K, H, P>
types;
typedef typename types::table table; typedef typename types::table table;
public: public:
@ -446,15 +440,9 @@ namespace unordered
private: private:
typedef typename boost::unordered::detail::rebind_wrap< typedef boost::unordered::detail::multimap<A, K, T, H, P> types;
allocator_type, value_type>::type typedef typename types::allocator value_allocator;
value_allocator; typedef typename types::traits allocator_traits;
typedef boost::unordered::detail::allocator_traits<value_allocator>
allocator_traits;
typedef boost::unordered::detail::multimap<value_allocator, K, H, P>
types;
typedef typename types::table table; typedef typename types::table table;
public: public:

View File

@ -52,15 +52,9 @@ namespace unordered
private: private:
typedef typename boost::unordered::detail::rebind_wrap< typedef boost::unordered::detail::set<A, T, H, P> types;
allocator_type, value_type>::type typedef typename types::allocator value_allocator;
value_allocator; typedef typename types::traits allocator_traits;
typedef boost::unordered::detail::allocator_traits<value_allocator>
allocator_traits;
typedef boost::unordered::detail::set<value_allocator, H, P>
types;
typedef typename types::table table; typedef typename types::table table;
public: public:
@ -429,15 +423,9 @@ namespace unordered
private: private:
typedef typename boost::unordered::detail::rebind_wrap< typedef boost::unordered::detail::multiset<A, T, H, P> types;
allocator_type, value_type>::type typedef typename types::allocator value_allocator;
value_allocator; typedef typename types::traits allocator_traits;
typedef boost::unordered::detail::allocator_traits<value_allocator>
allocator_traits;
typedef boost::unordered::detail::multiset<value_allocator, H, P>
types;
typedef typename types::table table; typedef typename types::table table;
public: public: