virtual void init() { cds::threading::Manager::attachThread() ; }
virtual void fini() { cds::threading::Manager::detachThread() ; }
- template <bool>
+ template <typename MapType, bool>
struct eraser {
- static bool erase(Map& map, size_t key, size_t /*insThread*/)
+ static bool erase(MapType& map, size_t key, size_t /*insThread*/)
{
return map.erase_with(key, key_less());
}
};
- template <>
- struct eraser<true>
+ template <typename MapType>
+ struct eraser<MapType, true>
{
- static bool erase(Map& map, size_t key, size_t insThread)
+ static bool erase(MapType& map, size_t key, size_t insThread)
{
return map.erase(key_type(key, insThread));
}
if ( arrData[i] & 1 ) {
if ( Map::c_bEraseExactKey ) {
for (size_t key = 0; key < nInsThreadCount; ++key) {
- if ( eraser<Map::c_bEraseExactKey>::erase( rMap, arrData[i], key ))
+ if ( eraser<Map, Map::c_bEraseExactKey>::erase( rMap, arrData[i], key ))
++m_nDeleteSuccess;
else
++m_nDeleteFailed;
}
}
else {
- if ( eraser<Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0) )
+ if ( eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0) )
++m_nDeleteSuccess;
else
++m_nDeleteFailed;
if ( arrData[i] & 1 ) {
if ( Map::c_bEraseExactKey ) {
for (size_t key = 0; key < nInsThreadCount; ++key) {
- if (eraser<Map::c_bEraseExactKey>::erase(rMap, arrData[i], key))
+ if (eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], key))
++m_nDeleteSuccess;
else
++m_nDeleteFailed;
}
}
else {
- if (eraser<Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0))
+ if (eraser<Map, Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0))
++m_nDeleteSuccess;
else
++m_nDeleteFailed;
virtual void init() { cds::threading::Manager::attachThread() ; }
virtual void fini() { cds::threading::Manager::detachThread() ; }
- template <bool>
+ template <typename MapType, bool>
struct extractor {
- static typename Map::guarded_ptr extract(Map& map, size_t key, size_t /*insThread*/)
+ static typename Map::guarded_ptr extract(MapType& map, size_t key, size_t /*insThread*/)
{
return map.extract_with(key, key_less());
}
};
- template <>
- struct extractor<true>
+ template <typename MapType>
+ struct extractor<MapType, true>
{
- static typename Map::guarded_ptr extract(Map& map, size_t key, size_t insThread)
+ static typename Map::guarded_ptr extract(MapType& map, size_t key, size_t insThread)
{
return map.extract(key_type(key, insThread));
}
for ( size_t k = 0; k < nInsThreadCount; ++k ) {
for ( size_t i = 0; i < arrData.size(); ++i ) {
if ( arrData[i] & 1 ) {
- gp = extractor< Map::c_bEraseExactKey >::extract( rMap, arrData[i], k );
+ gp = extractor< Map, Map::c_bEraseExactKey >::extract( rMap, arrData[i], k );
if ( gp )
++m_nDeleteSuccess;
else
for ( size_t k = 0; k < nInsThreadCount; ++k ) {
for ( size_t i = arrData.size() - 1; i > 0; --i ) {
if ( arrData[i] & 1 ) {
- gp = extractor< Map::c_bEraseExactKey >::extract( rMap, arrData[i], k);
+ gp = extractor< Map, Map::c_bEraseExactKey >::extract( rMap, arrData[i], k);
if ( gp )
++m_nDeleteSuccess;
else
virtual void init() { cds::threading::Manager::attachThread() ; }
virtual void fini() { cds::threading::Manager::detachThread() ; }
- template <bool>
+ template <typename MapType, bool>
struct extractor {
- static typename Map::exempt_ptr extract( Map& map, size_t key, size_t /*insThread*/ )
+ static typename Map::exempt_ptr extract( MapType& map, size_t key, size_t /*insThread*/ )
{
return map.extract_with( key, key_less());
}
};
- template <>
- struct extractor<true>
+ template <typename MapType>
+ struct extractor<MapType, true>
{
- static typename Map::exempt_ptr extract(Map& map, size_t key, size_t insThread)
+ static typename Map::exempt_ptr extract(MapType& map, size_t key, size_t insThread)
{
return map.extract( key_type(key, insThread));
}
if ( Map::c_bExtractLockExternal ) {
{
typename Map::rcu_lock l;
- xp = extractor<Map::c_bEraseExactKey>::extract( rMap, arrData[i], k );
+ xp = extractor<Map, Map::c_bEraseExactKey>::extract( rMap, arrData[i], k );
if ( xp )
++m_nDeleteSuccess;
else
}
}
else {
- xp = extractor<Map::c_bEraseExactKey>::extract( rMap, arrData[i], k);
+ xp = extractor<Map, Map::c_bEraseExactKey>::extract( rMap, arrData[i], k);
if ( xp )
++m_nDeleteSuccess;
else
if ( Map::c_bExtractLockExternal ) {
{
typename Map::rcu_lock l;
- xp = extractor<Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
+ xp = extractor<Map, Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
if ( xp )
++m_nDeleteSuccess;
else
}
}
else {
- xp = extractor<Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
+ xp = extractor<Map, Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
if ( xp )
++m_nDeleteSuccess;
else
CDSUNIT_DECLARE_SkipListMap
CDSUNIT_DECLARE_EllenBinTreeMap
CDSUNIT_DECLARE_BronsonAVLTreeMap
- CDSUNIT_DECLARE_MultiLevelHashMap64
+ CDSUNIT_DECLARE_MultiLevelHashMap_fixed
+ CDSUNIT_DECLARE_MultiLevelHashMap_city
CDSUNIT_DECLARE_CuckooMap
CPPUNIT_TEST_SUITE(Map_DelOdd)
CDSUNIT_TEST_SkipListMap
CDSUNIT_TEST_EllenBinTreeMap
CDSUNIT_TEST_BronsonAVLTreeMap
- CDSUNIT_TEST_MultiLevelHashMap64
+ CDSUNIT_TEST_MultiLevelHashMap_fixed
+ CDSUNIT_TEST_MultiLevelHashMap_city
CDSUNIT_TEST_CuckooMap
CPPUNIT_TEST_SUITE_END();