/*
This file is a part of libcds - Concurrent Data Structures library
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
Source code repo: http://github.com/khizmax/libcds/
Download: http://sourceforge.net/projects/libcds/files/
//@endcond
};
- // Hash size option
+ /// Hash size option
/**
@copydetails traits::hash_size
*/
Value \p 0 means <tt>sizeof( hash_type )</tt>.
*/
- enum : size_t {
- hash_size = 0
- };
+ static CDS_CONSTEXPR size_t const hash_size = 0;
/// Disposer for removing data nodes
typedef cds::intrusive::opt::v::empty_disposer disposer;
>::type hash_comparator;
/// The size of hash_type in bytes, see \p traits::hash_size for explanation
- static CDS_CONSTEXPR size_t const c_hash_size = traits::hash_size == 0 ? sizeof( hash_type ) : traits::hash_size;
+ static CDS_CONSTEXPR size_t const c_hash_size = traits::hash_size == 0 ? sizeof( hash_type ) : static_cast<size_t>( traits::hash_size );
typedef feldman_hashset::details::hash_splitter< hash_type, c_hash_size > hash_splitter;
~multilevel_array()
{
destroy_tree();
- free_array_node(m_Head);
+ free_array_node( m_Head, head_size());
}
node_ptr traverse(traverse_data& pos)
for (atomic_node_ptr * p = pArr->nodes, *pLast = p + nSize; p != pLast; ++p) {
node_ptr slot = p->load(memory_model::memory_order_relaxed);
if (slot.bits() == flag_array_node) {
- destroy_array_nodes(to_array(slot.ptr()), array_node_size());
- free_array_node(to_array(slot.ptr()));
+ destroy_array_nodes( to_array(slot.ptr()), array_node_size());
+ free_array_node( to_array( slot.ptr()), array_node_size());
p->store(node_ptr(), memory_model::memory_order_relaxed);
}
}
return alloc_array_node(array_node_size(), pParent, idxParent);
}
- static void free_array_node(array_node * parr)
+ static void free_array_node( array_node * parr, size_t nSize )
{
- cxx_array_node_allocator().Delete(parr);
+ cxx_array_node_allocator().Delete( parr, nSize );
}
union converter {
if (!slot.compare_exchange_strong(cur, cur | flag_array_converting, memory_model::memory_order_release, atomics::memory_order_relaxed))
{
stats().onExpandNodeFailed();
- free_array_node(pArr);
+ free_array_node( pArr, array_node_size());
return false;
}