From: khizmax Date: Sun, 2 Nov 2014 14:45:09 +0000 (+0300) Subject: Remove old MSVC++ std::map and stdext::hash_map from map tests X-Git-Tag: v2.0.0~144 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=commitdiff_plain;h=9683645bab8b353bb9b43613cf99b3c68a73a537 Remove old MSVC++ std::map and stdext::hash_map from map tests --- diff --git a/projects/Win/vc12/cds.sln b/projects/Win/vc12/cds.sln index aabc38a0..8789bdbb 100644 --- a/projects/Win/vc12/cds.sln +++ b/projects/Win/vc12/cds.sln @@ -71,11 +71,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "map", "map", "{6BB7A27F-FC5 ..\..\..\tests\unit\map2\map_defs.h = ..\..\..\tests\unit\map2\map_defs.h ..\..\..\tests\unit\map2\map_types.h = ..\..\..\tests\unit\map2\map_types.h ..\..\..\tests\unit\map2\std_hash_map.h = ..\..\..\tests\unit\map2\std_hash_map.h - ..\..\..\tests\unit\map2\std_hash_map_gcc.h = ..\..\..\tests\unit\map2\std_hash_map_gcc.h - ..\..\..\tests\unit\map2\std_hash_map_vc.h = ..\..\..\tests\unit\map2\std_hash_map_vc.h ..\..\..\tests\unit\map2\std_map.h = ..\..\..\tests\unit\map2\std_map.h - ..\..\..\tests\unit\map2\std_map_gcc.h = ..\..\..\tests\unit\map2\std_map_gcc.h - ..\..\..\tests\unit\map2\std_map_vc.h = ..\..\..\tests\unit\map2\std_map_vc.h EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "set", "set", "{A64449B7-90FB-4E2B-A686-9EFC0E298644}" diff --git a/tests/unit/map2/std_hash_map.h b/tests/unit/map2/std_hash_map.h new file mode 100644 index 00000000..0c808963 --- /dev/null +++ b/tests/unit/map2/std_hash_map.h @@ -0,0 +1,99 @@ +//$$CDS-header$$ + +#ifndef __CDSUNIT_STD_HASH_MAP_GCC_H +#define __CDSUNIT_STD_HASH_MAP_GCC_H + +#include //unique_lock +#include + +namespace map2 { + + template >::other + > + class StdHashMap + : public std::unordered_map< + Key, Value + , std::hash + , std::equal_to + , Alloc + > + { + public: + Lock m_lock; + typedef std::unique_lock scoped_lock; + typedef std::unordered_map< + Key, Value + , std::hash + , std::equal_to + , Alloc + > base_class; + public: + typedef typename base_class::mapped_type value_type; + typedef size_t item_counter; + + StdHashMap( size_t nMapSize, size_t nLoadFactor ) + {} + + bool find( const Key& key ) + { + scoped_lock al( m_lock ); + return base_class::find( key ) != base_class::end(); + } + + bool insert( const Key& key, const Value& val ) + { + scoped_lock al( m_lock ); + return base_class::insert( typename base_class::value_type(key, val)).second; + } + + template + bool insert( const Key& key, const T& val, Func func ) + { + scoped_lock al( m_lock ); + std::pair pRet = base_class::insert( typename base_class::value_type(key, Value() )); + if ( pRet.second ) { + func( pRet.first->second, val ); + return true; + } + return false; + } + + template + std::pair ensure( const T& key, Func func ) + { + scoped_lock al( m_lock ); + std::pair pRet = base_class::insert( typename base_class::value_type( key, Value() )); + if ( pRet.second ) { + func( true, *pRet.first ); + return std::make_pair( true, true ); + } + else { + func( false, *pRet.first ); + return std::make_pair( true, false ); + } + } + + bool erase( const Key& key ) + { + scoped_lock al( m_lock ); + return base_class::erase( key ) != 0; + } + + template + bool erase( const T& key, Func func ) + { + scoped_lock al( m_lock ); + typename base_class::iterator it = base_class::find( key ); + if ( it != base_class::end() ) { + func( *it ); + return base_class::erase( key ) != 0; + } + return false; + } + + std::ostream& dump( std::ostream& stm ) { return stm; } + }; +} // namespace map2 + +#endif // #ifndef __CDSUNIT_STD_HASH_MAP_GCC_H diff --git a/tests/unit/map2/std_hash_map_gcc.h b/tests/unit/map2/std_hash_map_gcc.h deleted file mode 100644 index e3984b74..00000000 --- a/tests/unit/map2/std_hash_map_gcc.h +++ /dev/null @@ -1,100 +0,0 @@ -//$$CDS-header$$ - -#ifndef __CDSUNIT_STD_HASH_MAP_GCC_H -#define __CDSUNIT_STD_HASH_MAP_GCC_H - -#include //unique_lock -#include -//#include // ref - -namespace map2 { - - template >::other - > - class StdHashMap - : public std::unordered_map< - Key, Value - , std::hash - , std::equal_to - , Alloc - > - { - public: - Lock m_lock; - typedef std::unique_lock AutoLock; - typedef std::unordered_map< - Key, Value - , std::hash - , std::equal_to - , Alloc - > base_class; - public: - typedef typename base_class::mapped_type value_type; - typedef size_t item_counter; - - StdHashMap( size_t nMapSize, size_t nLoadFactor ) - {} - - bool find( const Key& key ) - { - AutoLock al( m_lock ); - return base_class::find( key ) != base_class::end(); - } - - bool insert( const Key& key, const Value& val ) - { - AutoLock al( m_lock ); - return base_class::insert( typename base_class::value_type(key, val)).second; - } - - template - bool insert( const Key& key, const T& val, Func func ) - { - AutoLock al( m_lock ); - std::pair pRet = base_class::insert( typename base_class::value_type(key, Value() )); - if ( pRet.second ) { - func( pRet.first->second, val ); - return true; - } - return false; - } - - template - std::pair ensure( const T& key, Func func ) - { - AutoLock al( m_lock ); - std::pair pRet = base_class::insert( typename base_class::value_type( key, Value() )); - if ( pRet.second ) { - func( true, *pRet.first ); - return std::make_pair( true, true ); - } - else { - func( false, *pRet.first ); - return std::make_pair( true, false ); - } - } - - bool erase( const Key& key ) - { - AutoLock al( m_lock ); - return base_class::erase( key ) != 0; - } - - template - bool erase( const T& key, Func func ) - { - AutoLock al( m_lock ); - typename base_class::iterator it = base_class::find( key ); - if ( it != base_class::end() ) { - func( *it ); - return base_class::erase( key ) != 0; - } - return false; - } - - std::ostream& dump( std::ostream& stm ) { return stm; } - }; -} // namespace map2 - -#endif // #ifndef __CDSUNIT_STD_HASH_MAP_GCC_H