forked from boostorg/unordered
Revert [51409]
It isn't working on Borland. [SVN r51982]
This commit is contained in:
@ -228,49 +228,6 @@ namespace boost {
|
||||
void destroy(T* x) {
|
||||
x->~T();
|
||||
}
|
||||
|
||||
// Some classes for the data structure
|
||||
|
||||
template <typename Alloc>
|
||||
struct bucket_impl
|
||||
{
|
||||
private:
|
||||
bucket_impl& operator=(bucket_impl const&);
|
||||
public:
|
||||
typedef BOOST_DEDUCED_TYPENAME
|
||||
boost::unordered_detail::rebind_wrap<Alloc, bucket_impl>::type
|
||||
bucket_allocator;
|
||||
typedef BOOST_DEDUCED_TYPENAME
|
||||
allocator_pointer<bucket_allocator>::type bucket_ptr;
|
||||
typedef bucket_ptr link_ptr;
|
||||
|
||||
link_ptr next_;
|
||||
|
||||
bucket_impl() : next_()
|
||||
{
|
||||
BOOST_UNORDERED_MSVC_RESET_PTR(next_);
|
||||
}
|
||||
|
||||
bucket_impl(bucket_impl const& x) : next_(x.next_)
|
||||
{
|
||||
// Only copy construct when allocating.
|
||||
BOOST_ASSERT(!x.next_);
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return !this->next_;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct value_base {
|
||||
typename boost::aligned_storage<
|
||||
sizeof(T),
|
||||
boost::alignment_of<T>::value>::type data_;
|
||||
|
||||
void* address() { return this; }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,6 @@
|
||||
|
||||
#if BOOST_UNORDERED_EQUIVALENT_KEYS
|
||||
#define BOOST_UNORDERED_TABLE hash_table_equivalent_keys
|
||||
#define BOOST_UNORDERED_TABLE_NODE node_equivalent_keys
|
||||
#define BOOST_UNORDERED_TABLE_DATA hash_table_data_equivalent_keys
|
||||
#define BOOST_UNORDERED_ITERATOR hash_iterator_equivalent_keys
|
||||
#define BOOST_UNORDERED_CONST_ITERATOR hash_const_iterator_equivalent_keys
|
||||
@ -14,7 +13,6 @@
|
||||
#define BOOST_UNORDERED_CONST_LOCAL_ITERATOR hash_const_local_iterator_equivalent_keys
|
||||
#else
|
||||
#define BOOST_UNORDERED_TABLE hash_table_unique_keys
|
||||
#define BOOST_UNORDERED_TABLE_NODE node_unique_keys
|
||||
#define BOOST_UNORDERED_TABLE_DATA hash_table_data_unique_keys
|
||||
#define BOOST_UNORDERED_ITERATOR hash_iterator_unique_keys
|
||||
#define BOOST_UNORDERED_CONST_ITERATOR hash_const_iterator_unique_keys
|
||||
@ -25,32 +23,6 @@
|
||||
namespace boost {
|
||||
namespace unordered_detail {
|
||||
|
||||
template <typename Alloc>
|
||||
struct BOOST_UNORDERED_TABLE_NODE :
|
||||
value_base<BOOST_DEDUCED_TYPENAME allocator_value_type<Alloc>::type>,
|
||||
bucket_impl<Alloc>
|
||||
{
|
||||
typedef BOOST_DEDUCED_TYPENAME bucket_impl<Alloc>::link_ptr link_ptr;
|
||||
typedef BOOST_DEDUCED_TYPENAME allocator_value_type<Alloc>::type value_type;
|
||||
|
||||
typedef BOOST_DEDUCED_TYPENAME
|
||||
boost::unordered_detail::rebind_wrap<Alloc, BOOST_UNORDERED_TABLE_NODE>::type
|
||||
node_allocator;
|
||||
|
||||
#if BOOST_UNORDERED_EQUIVALENT_KEYS
|
||||
BOOST_UNORDERED_TABLE_NODE() : group_prev_()
|
||||
{
|
||||
BOOST_UNORDERED_MSVC_RESET_PTR(group_prev_);
|
||||
}
|
||||
|
||||
link_ptr group_prev_;
|
||||
#endif
|
||||
|
||||
value_type& value() {
|
||||
return *static_cast<value_type*>(this->address());
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// Hash Table Data
|
||||
//
|
||||
@ -62,24 +34,86 @@ namespace boost {
|
||||
public:
|
||||
typedef BOOST_UNORDERED_TABLE_DATA data;
|
||||
|
||||
struct node;
|
||||
struct bucket;
|
||||
typedef std::size_t size_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
|
||||
typedef Alloc value_allocator;
|
||||
|
||||
typedef bucket_impl<Alloc> bucket;
|
||||
typedef BOOST_DEDUCED_TYPENAME bucket::bucket_allocator bucket_allocator;
|
||||
typedef BOOST_DEDUCED_TYPENAME bucket::bucket_ptr bucket_ptr;
|
||||
typedef BOOST_DEDUCED_TYPENAME bucket::link_ptr link_ptr;
|
||||
|
||||
typedef BOOST_UNORDERED_TABLE_NODE<Alloc> node;
|
||||
typedef BOOST_DEDUCED_TYPENAME node::node_allocator node_allocator;
|
||||
typedef BOOST_DEDUCED_TYPENAME
|
||||
boost::unordered_detail::rebind_wrap<Alloc, node>::type
|
||||
node_allocator;
|
||||
typedef BOOST_DEDUCED_TYPENAME
|
||||
boost::unordered_detail::rebind_wrap<Alloc, bucket>::type
|
||||
bucket_allocator;
|
||||
|
||||
typedef BOOST_DEDUCED_TYPENAME allocator_value_type<Alloc>::type value_type;
|
||||
typedef BOOST_DEDUCED_TYPENAME allocator_pointer<node_allocator>::type node_ptr;
|
||||
typedef BOOST_DEDUCED_TYPENAME allocator_pointer<bucket_allocator>::type bucket_ptr;
|
||||
typedef BOOST_DEDUCED_TYPENAME allocator_reference<value_allocator>::type reference;
|
||||
typedef BOOST_DEDUCED_TYPENAME allocator_reference<bucket_allocator>::type bucket_reference;
|
||||
|
||||
typedef bucket_ptr link_ptr;
|
||||
|
||||
// Hash Bucket
|
||||
//
|
||||
// all no throw
|
||||
|
||||
struct bucket
|
||||
{
|
||||
private:
|
||||
bucket& operator=(bucket const&);
|
||||
public:
|
||||
link_ptr next_;
|
||||
|
||||
bucket() : next_()
|
||||
{
|
||||
BOOST_UNORDERED_MSVC_RESET_PTR(next_);
|
||||
}
|
||||
|
||||
bucket(bucket const& x) : next_(x.next_)
|
||||
{
|
||||
// Only copy construct when allocating.
|
||||
BOOST_ASSERT(!x.next_);
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return !this->next_;
|
||||
}
|
||||
};
|
||||
|
||||
// Value Base
|
||||
|
||||
struct value_base {
|
||||
typename boost::aligned_storage<
|
||||
sizeof(value_type),
|
||||
boost::alignment_of<value_type>::value>::type data_;
|
||||
|
||||
void* address() { return this; }
|
||||
};
|
||||
|
||||
// Hash Node
|
||||
//
|
||||
// all no throw
|
||||
|
||||
struct node : value_base, bucket {
|
||||
#if BOOST_UNORDERED_EQUIVALENT_KEYS
|
||||
public:
|
||||
node() : group_prev_()
|
||||
{
|
||||
BOOST_UNORDERED_MSVC_RESET_PTR(group_prev_);
|
||||
}
|
||||
|
||||
link_ptr group_prev_;
|
||||
#endif
|
||||
|
||||
value_type& value() {
|
||||
return *static_cast<value_type*>(this->address());
|
||||
}
|
||||
};
|
||||
|
||||
// allocators
|
||||
//
|
||||
// Stores all the allocators that we're going to need.
|
||||
@ -2291,7 +2325,6 @@ namespace boost {
|
||||
}
|
||||
|
||||
#undef BOOST_UNORDERED_TABLE
|
||||
#undef BOOST_UNORDERED_TABLE_NODE
|
||||
#undef BOOST_UNORDERED_TABLE_DATA
|
||||
#undef BOOST_UNORDERED_ITERATOR
|
||||
#undef BOOST_UNORDERED_CONST_ITERATOR
|
||||
|
Reference in New Issue
Block a user