and keeps the position inside bit-string for the next call.
The splitter stores a const reference to bit-string, not a copy.
- The maximum count of bits that can be cut for single call is <tt> sizeof(UInt) * 8 </tt>
+ The maximum count of bits that can be cut in a single call is <tt> sizeof(UInt) * 8 </tt>
*/
template <typename BitString, typename UInt = size_t >
class split_bitstring
/// Initializises the splitter with reference to \p h and zero start bit offset
explicit split_bitstring( bitstring const& h )
: m_ptr(reinterpret_cast<uint_type const*>( &h ))
- , m_pos(0)
+ , m_offset(0)
, m_first( m_ptr )
# ifdef _DEBUG
, m_last( m_ptr + c_nHashSize )
/// Initializises the splitter with reference to \p h and start bit offset \p nBitOffset
split_bitstring( bitstring const& h, size_t nBitOffset )
: m_ptr( reinterpret_cast<uint_type const*>( &h ) + nBitOffset / c_nBitPerInt )
- , m_pos( nBitOffset )
+ , m_offset( nBitOffset )
, m_first( reinterpret_cast<uint_type const*>(&h))
# ifdef _DEBUG
, m_last( m_first + c_nHashSize )
/// Returns \p true if end-of-stream encountered
bool eos() const
{
- return m_pos >= c_nBitPerHash;
+ return m_offset >= c_nBitPerHash;
}
/// Cuts next \p nBits from bit-string
{
assert( !eos() );
assert( nBits <= c_nBitPerInt );
- assert( m_pos + nBits <= c_nBitPerHash );
+ assert( m_offset + nBits <= c_nBitPerHash );
# ifdef _DEBUG
assert( m_ptr < m_last );
# endif
uint_type result;
- uint_type const nRest = c_nBitPerInt - m_pos % c_nBitPerInt;
- m_pos += nBits;
+ uint_type const nRest = c_nBitPerInt - m_offset % c_nBitPerInt;
+ m_offset += nBits;
if ( nBits < nRest ) {
result = *m_ptr << ( nRest - nBits );
result = result >> ( c_nBitPerInt - nBits );
else if ( nBits == nRest ) {
result = *m_ptr >> ( c_nBitPerInt - nRest );
++m_ptr;
- assert( m_pos % c_nBitPerInt == 0 );
+ assert( m_offset % c_nBitPerInt == 0 );
}
else {
uint_type const lsb = *m_ptr >> ( c_nBitPerInt - nRest );
result = (result << nRest) + lsb;
}
- assert( m_pos <= c_nBitPerHash );
+ assert( m_offset <= c_nBitPerHash );
# ifdef _DEBUG
assert( m_ptr <= m_last );
# endif
assert( nBits <= sizeof(uint_type) * c_nBitPerByte );
- if ( m_pos + nBits > c_nBitPerHash )
- nBits = c_nBitPerHash - m_pos;
+ if ( m_offset + nBits > c_nBitPerHash )
+ nBits = c_nBitPerHash - m_offset;
return nBits ? cut( nBits ) : 0;
}
void reset() CDS_NOEXCEPT
{
m_ptr = m_first;
- m_pos = 0;
+ m_offset = 0;
}
- // Returns pointer to source bitstring
+ /// Returns pointer to source bitstring
bitstring const * source() const
{
return reinterpret_cast<bitstring const *>( m_first );
/// Returns current bit offset from beginning of bit-string
size_t bit_offset() const
{
- return m_pos;
+ return m_offset;
}
private:
//@cond
- uint_type const* m_ptr; ///< current position in the hash
- size_t m_pos; ///< current position in bits
- uint_type const* m_first; ///< first position
+ uint_type const* m_ptr; ///< current position in the hash
+ size_t m_offset; ///< current bit offset in bit-string
+ uint_type const* m_first; ///< first position
# ifdef _DEBUG
- uint_type const* m_last; ///< last position
+ uint_type const* m_last; ///< last position
# endif
//@endcond
};
The operation performs inserting or changing data with lock-free manner.
If the \p key not found in the map, then the new item created from \p key
- will be inserted into the map iff \p bAllowInsert is \p true
+ will be inserted into the map iff \p bAllowInsert is \p true
(note that in this case the \ref key_type should be constructible from type \p K).
Otherwise, the functor \p func is called with item found.
The functor \p Func signature is:
i->second.payload++;
}
} // at this point RCU lock is released
- /endcode
+ \endcode
Each iterator object supports the common interface:
- dereference operators:
i->payload++;
}
} // at this point RCU lock is released
- /endcode
+ \endcode
Each iterator object supports the common interface:
- dereference operators:
/// Updates the item
/**
- If \p key is not in the list and \p bAllowInsert is \p true,
+ If \p key is not in the list and \p bAllowInsert is \p true,
+
the function inserts a new item.
Otherwise, the function returns an iterator pointing to the item found.
/// Updates the item
/**
- If \p key is not in the list and \p bAllowInsert is \p true,
+ If \p key is not in the list and \p bAllowInsert is \p true,
+
the function inserts a new item.
Otherwise, the function returns an iterator pointing to the item found.
/// Updates the item
/**
- If \p key is not in the list and \p bAllowInsert is \p true,
+ If \p key is not in the list and \p bAllowInsert is \p true,
+
the function inserts a new item.
Otherwise, the function returns an iterator pointing to the item found.
scoped_node_ptr pNode( alloc_node( key ));
node_type * pItemFound = nullptr;
- std::pair<bool, bool> ret = base_class::update_at( refHead, *pNode,
+ std::pair<bool, bool> ret = base_class::update_at( refHead, *pNode,
+
[&pItemFound](bool, node_type& item, node_type&){ pItemFound = &item; },
bAllowInsert );
/// Updates the item
/**
- If \p key is not in the list and \p bAllowInsert is \p true,
+ If \p key is not in the list and \p bAllowInsert is \p true,
+
the function inserts a new item.
Otherwise, the function returns an iterator pointing to the item found.
Otherwise, the function returns an iterator pointing to the item found.
Returns <tt> std::pair<iterator, bool> </tt> where \p first is an iterator pointing to
- item found or inserted (if inserting is not allowed and \p key is not found, the iterator will be \p end()),
+ item found or inserted (if inserting is not allowed and \p key is not found, the iterator will be \p end()),
+
\p second is true if new item has been added or \p false if the item
already is in the map.
//@endcond
/// Checks whether the set contains \p key
- /**
+ /**
+
The function searches the item with key equal to \p key
and returns \p true if the key is found, and \p false otherwise.
If the item \p val not found in the set, then \p val is inserted iff \p bAllowInsert is \p true.
Returns <tt> std::pair<iterator, bool> </tt> where \p first is an iterator pointing to
- item found or inserted, or \p end() if \p bAllowInsert is \p false,
+ item found or inserted, or \p end() if \p bAllowInsert is \p false,
+
\p second is true if new item has been added or \p false if the item is already in the set.
@warning For \ref cds_intrusive_MichaelList_hp "MichaelList" as the bucket see \ref cds_intrusive_item_creating "insert item troubleshooting".
//@endcond
/// Checks whether the set contains \p key
- /**
+ /**
+
The function searches the item with key equal to \p key
and returns \p true if the key is found, and \p false otherwise.
{
return base_class::contains( key );
}
- //@cond
+ //@cond
+
template <typename K>
CDS_DEPRECATED("deprecated, use contains()")
iterator find( K const& key )
Otherwise, the function returns an iterator pointing to the item found.
Returns <tt> std::pair<iterator, bool> </tt> where \p first is an iterator pointing to
- item found or inserted (if inserting is not allowed and \p key is not found, the iterator will be \p end()),
+ item found or inserted (if inserting is not allowed and \p key is not found, the iterator will be \p end()),
+
\p second is true if new item has been added or \p false if the item
already is in the map.
*/
Otherwise, the function returns an iterator pointing to the item found.
Returns <tt> std::pair<iterator, bool> </tt> where \p first is an iterator pointing to
- item found or inserted (if inserting is not allowed and \p key is not found, the iterator will be \p end()),
+ item found or inserted (if inserting is not allowed and \p key is not found, the iterator will be \p end()),
+
\p second is true if new item has been added or \p false if the item
already is in the set.
- @warning If the set is based on \ref cds_nonintrusive_MichaelList_nogc "MichaelList",
+ @warning If the set is based on \ref cds_nonintrusive_MichaelList_nogc "MichaelList",
+
see \ref cds_intrusive_item_creating "insert item troubleshooting".
- \ref cds_nonintrusive_LazyList_nogc "LazyList" as the base provides exclusive access to inserted item
+ \ref cds_nonintrusive_LazyList_nogc "LazyList" as the base provides exclusive access to inserted item
+
and does not require any node-level synchronization.
*/
template <typename Q>
{
scoped_node_ptr pNode( alloc_node( key ));
- std::pair<typename base_class::iterator, bool> ret = base_class::update_( *pNode,
+ std::pair<typename base_class::iterator, bool> ret = base_class::update_( *pNode,
+
[](bool /*bNew*/, node_type& /*item*/, node_type& /*val*/){},
bAllowInsert );
if ( ret.first != base_class::end() && ret.second ) {
/// Ctor with initial capacity specified
StripedSet(
size_t nCapacity ///< Initial size of bucket table and lock array. Must be power of two, the minimum is 16.
- )
+ )
+
: base_class( nCapacity )
{}
StripedSet(
size_t nCapacity ///< Initial size of bucket table and lock array. Must be power of two, the minimum is 16.
,resizing_policy const& resizingPolicy ///< Resizing policy
- )
+ )
+
: base_class( nCapacity, resizingPolicy )
{}
StripedSet(
size_t nCapacity ///< Initial size of bucket table and lock array. Must be power of two, the minimum is 16.
,resizing_policy&& resizingPolicy ///< Resizing policy
- )
+ )
+
: base_class( nCapacity, std::forward<resizing_policy>(resizingPolicy) )
{}
class RecursiveLock = std::recursive_mutex,
typename BackOff = cds::backoff::yield,
class Alloc = CDS_DEFAULT_ALLOCATOR
- >
+ >
using refinable = cds::intrusive::striped_set::refinable<RecursiveLock, BackOff, Alloc >;
//@cond
/// Single-consumer version
/**
- For single-consumer version of algorithm some additional functions
+ For single-consumer version of algorithm some additional functions
+
(\p front(), \p pop_front()) is available.
Default is \p false
};
//@cond
- namespace vyukov_queue {
+ namespace vyukov_queue {
+
template <typename Traits>
struct single_consumer_traits : public Traits
{
} // namespace vyukov_queue
//@endcond
- /// Vyukov's queue multiple producer - single consumer version
+ /// Vyukov's queue multiple producer - single consumer version
+
template <typename T, typename Traits = vyukov_queue::traits >
using VyukovMPSCCycleQueue = VyukovMPMCCycleQueue< T, vyukov_queue::single_consumer_traits<Traits> >;
, m_pEpochFree( epoch_array_alloc().NewArray( m_nEpochBitmask + 1))
, m_pGlobalFreeHead( nullptr )
{
-
+
+
for (unsigned int i = 0; i <= m_nEpochBitmask; ++i )
m_pEpochFree[i].store( nullptr, atomics::memory_order_relaxed );
By perforce the local thread's guard pool is grown automatically from common pool.
When the thread terminated its guard pool is backed to common GC's pool.
- \p nEpochCount: internally, DHP memory manager uses epoch-based schema to solve
- ABA problem for internal data. \p nEpochCount specifies the epoch count,
+ ABA problem for internal data. \p nEpochCount specifies the epoch count,
+
i.e. the count of simultaneously working threads that remove the elements
of DHP-based concurrent data structure. Default value is 8.
typename gc::template GuardArray<2> g;
g.assign( 0, node_traits::to_value_ptr( pNext.ptr()));
- if ( m_pTail.load( memory_model::memory_order_acquire ) != t
- || t->m_pNext.load( memory_model::memory_order_relaxed ) != pNext )
+ if ( m_pTail.load( memory_model::memory_order_acquire ) != t
+
+ || t->m_pNext.load( memory_model::memory_order_relaxed ) != pNext )
+
{
m_Stat.onEnqueueRace();
bkoff();
@note Before including <tt><cds/intrusive/feldman_hashset_rcu.h></tt> you should include appropriate RCU header file,
see \ref cds_urcu_gc "RCU type" for list of existing RCU class and corresponding header files.
- The set supports @ref cds_intrusive_FeldmanHashSet_rcu_iterators "bidirectional thread-safe iterators"
+ The set supports @ref cds_intrusive_FeldmanHashSet_rcu_iterators "bidirectional thread-safe iterators"
+
with some restrictions.
*/
template <
i->payload++;
}
} // at this point RCU lock is released
- /endcode
+ \endcode
Each iterator object supports the common interface:
- dereference operators:
//@endcond
/// Checks whether the set contains \p key
- /**
+ /**
+
The function searches the item with key equal to \p key
and returns \p true if the key is found, and \p false otherwise.
//@endcond
/// Checks whether the set contains \p key
- /**
+ /**
+
The function searches the item with key equal to \p key
and returns the pointer to an element found or \p nullptr.
}
/// Checks whether the set contains \p key
- /**
+ /**
+
The function searches the item with key equal to \p key
and returns \p true if the key is found, and \p false otherwise.
There is a wrapper \ref cds_urcu_general_threaded_gc "gc<general_threaded>" for \p %general_threaded class
that provides unified RCU interface. You should use this wrapper class instead \p %general_threaded
- The \p Buffer contains items of \ref cds_urcu_retired_ptr "epoch_retired_ptr" type
+ The \p Buffer contains items of \ref cds_urcu_retired_ptr "epoch_retired_ptr" type
+
and it should support a multiple producer/single consumer queue with the following interface:
- <tt> bool push( epoch_retired_ptr& p ) </tt> - places the retired pointer \p p into queue. If the function
returns \p false it means that the buffer is full and RCU synchronization cycle must be processed.
The buffer is considered as full if \p push() returns \p false or the buffer size reaches the RCU threshold.
Template arguments:
- - \p Buffer - MPSC (muliple producer/single consumer) buffer type with FIFO semantics.
+ - \p Buffer - MPSC (muliple producer/single consumer) buffer type with FIFO semantics.
+
Default is \p cds::container::VyukovMPSCCycleQueue. The buffer contains the objects of \ref epoch_retired_ptr
type that contains additional \p m_nEpoch field. This field specifies an epoch when the object
has been placed into the buffer. The \p %general_threaded object has a global epoch counter
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=256\r
CuckooProbesetSize=8\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=8\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
CuckooInitialSize=1024\r
CuckooProbesetSize=16\r
# 0 - use default\r
-CuckooProbesetThreshold=0 \r
+CuckooProbesetThreshold=0\r
+\r
# *** FeldmanHashMap properties\r
FeldmanMapHeadBits=10\r
FeldmanMapArrayBits=4\r
public:
template <typename Config>
CuckooMap( Config const& cfg )
- : base_class(
+ : base_class(
+
cfg.c_nCuckooInitialSize,
static_cast<unsigned int>( cfg.c_nCuckooProbesetSize ),
static_cast<unsigned int>( cfg.c_nCuckooProbesetThreshold )
for ( size_t i = 0; i < nSize; ++i )
testQueue.push( i );
- CPPUNIT_MSG( " Thread count=" << s_nThreadCount << ", push/pop pairs=" << s_nPassCount
+ CPPUNIT_MSG( " Thread count=" << s_nThreadCount << ", push/pop pairs=" << s_nPassCount
+
<< ", queue capacity=" << testQueue.capacity() << " ...");
pool.run();
CDSUNIT_TEST_FeldmanHashSet_stdhash_RCU_signal
-// CityHash -only for 64bit
+// CityHash -only for 64bit
+
#undef CDSUNIT_DECLARE_FeldmanHashSet_city
#undef CDSUNIT_DECLARE_FeldmanHashSet_city_RCU_signal
#undef CDSUNIT_TEST_FeldmanHashSet_city
#endif // CDS_BUILD_BITS == 64
-// All
+// All
+
#define CDSUNIT_DECLARE_FeldmanHashSet \
CDSUNIT_DECLARE_FeldmanHashSet_fixed \
CDSUNIT_DECLARE_FeldmanHashSet_stdhash \
public:
template <typename Config>
CuckooSet( Config const& cfg )
- : cuckoo_base_class(
+ : cuckoo_base_class(
+
cfg.c_nCuckooInitialSize,
static_cast<unsigned int>( cfg.c_nCuckooProbesetSize ),
static_cast<unsigned int>( cfg.c_nCuckooProbesetThreshold )