From: khizmax Date: Mon, 16 Jan 2017 09:28:09 +0000 (+0300) Subject: Merged branch 'master' of https://github.com/Nemo1369/libcds X-Git-Tag: v2.3.0~209 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=commitdiff_plain;h=2bb66f1d159d044d2c5dad0f0f968abcb6d53287;hp=109dabde47396bc0d73d67c635b808ec8f8efbae Merged branch 'master' of https://github.com/Nemo1369/libcds - CMake-fied boost integration support implemented. macOS RPATH policy - Buggy CMake try_compile when crosscompiling hacked with optional Threads - Threads package made totally optional. Would be found when not crosscompiling and would not be when either. - Crosscompilation target architecture made required to be set explicitly - Implemented support for ARMv8 (64 bit arm) --- diff --git a/.gitignore b/.gitignore index 93cba786..757121b5 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ /build/Makefile /build/build.sh /build/sample +/.cproject +/.settings/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 80fb3807..6beb15a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ include(TargetArch) project(cds) -set(PROJECT_VERSION 2.2.0) +set(PROJECT_VERSION 2.3.0) # Options option(WITH_TESTS "Build unit tests" OFF) @@ -107,6 +107,10 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") endif() endif() +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdocumentation") +endif() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") message("Build type -- ${CMAKE_BUILD_TYPE}") @@ -130,16 +134,16 @@ include_directories(${PROJECT_SOURCE_DIR}) set(LIBRARIES_COMPONENT lib) set(HEADERS_COMPONENT devel) -set(SOURCES src/hp_gc.cpp - src/init.cpp - src/dhp_gc.cpp - src/urcu_gp.cpp - src/urcu_sh.cpp - src/michael_heap.cpp - src/topology_hpux.cpp - src/topology_linux.cpp - src/topology_osx.cpp - src/dllmain.cpp) +set(SOURCES src/init.cpp + src/hp.cpp + src/dhp.cpp + src/urcu_gp.cpp + src/urcu_sh.cpp + src/thread_data.cpp + src/topology_hpux.cpp + src/topology_linux.cpp + src/topology_osx.cpp + src/dllmain.cpp) add_library(${CDS_SHARED_LIBRARY} SHARED ${SOURCES}) set_target_properties(${CDS_SHARED_LIBRARY} PROPERTIES VERSION ${PROJECT_VERSION} diff --git a/cds/algo/atomic.h b/cds/algo/atomic.h index f0e50f9c..8cb74bad 100644 --- a/cds/algo/atomic.h +++ b/cds/algo/atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/backoff_strategy.h b/cds/algo/backoff_strategy.h index 1d191fda..62cf5a5d 100644 --- a/cds/algo/backoff_strategy.h +++ b/cds/algo/backoff_strategy.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/base.h b/cds/algo/base.h index 8faa7448..a109e806 100644 --- a/cds/algo/base.h +++ b/cds/algo/base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/bitop.h b/cds/algo/bitop.h index 9e4dbd78..dc5900da 100644 --- a/cds/algo/bitop.h +++ b/cds/algo/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/elimination.h b/cds/algo/elimination.h index 10a27d10..597e0f24 100644 --- a/cds/algo/elimination.h +++ b/cds/algo/elimination.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/elimination_opt.h b/cds/algo/elimination_opt.h index e64b9d17..2c5ce83b 100644 --- a/cds/algo/elimination_opt.h +++ b/cds/algo/elimination_opt.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/elimination_tls.h b/cds/algo/elimination_tls.h index b7a82b34..b97efbce 100644 --- a/cds/algo/elimination_tls.h +++ b/cds/algo/elimination_tls.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/flat_combining.h b/cds/algo/flat_combining.h index 482e904f..10f406e7 100644 --- a/cds/algo/flat_combining.h +++ b/cds/algo/flat_combining.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/flat_combining/defs.h b/cds/algo/flat_combining/defs.h index 23470d69..35e04ed7 100644 --- a/cds/algo/flat_combining/defs.h +++ b/cds/algo/flat_combining/defs.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/flat_combining/kernel.h b/cds/algo/flat_combining/kernel.h index a8d3ce9c..5e333e15 100644 --- a/cds/algo/flat_combining/kernel.h +++ b/cds/algo/flat_combining/kernel.h @@ -1,7 +1,7 @@ /* 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/ @@ -289,7 +289,7 @@ namespace cds { namespace algo { { assert( m_pThreadRec.get() == nullptr ); publication_record_type* pRec = cxx11_allocator().New(); - m_pAllocatedHead = + m_pAllocatedHead = m_pHead = pRec; m_pThreadRec.reset( pRec ); m_Stat.onCreatePubRecord(); @@ -706,11 +706,11 @@ namespace cds { namespace algo { publication_record* p = m_pHead; bool bOpDone = false; while ( p ) { - switch ( p->nState.load( memory_model::memory_order_acquire ) ) { + switch ( p->nState.load( memory_model::memory_order_acquire )) { case active: if ( p->op() >= req_Operation ) { p->nAge.store( nCurAge, memory_model::memory_order_relaxed ); - owner.fc_apply( static_cast( p ) ); + owner.fc_apply( static_cast( p )); operation_done( *p ); bOpDone = true; } @@ -735,12 +735,12 @@ namespace cds { namespace algo { void batch_combining( Container& owner ) { // The thread is a combiner - assert( !m_Mutex.try_lock() ); + assert( !m_Mutex.try_lock()); unsigned int const nCurAge = m_nCount.fetch_add( 1, memory_model::memory_order_relaxed ) + 1; for ( unsigned int nPass = 0; nPass < m_nCombinePassCount; ++nPass ) - owner.fc_process( begin(), end() ); + owner.fc_process( begin(), end()); combining_pass( owner, nCurAge ); m_Stat.onCombining(); @@ -760,10 +760,10 @@ namespace cds { namespace algo { m_Stat.onPassiveWaitIteration(); // Wait while operation processing - if ( m_waitStrategy.wait( *this, *pRec ) ) + if ( m_waitStrategy.wait( *this, *pRec )) m_Stat.onWakeupByNotifying(); - if ( m_Mutex.try_lock() ) { + if ( m_Mutex.try_lock()) { if ( pRec->op( memory_model::memory_order_acquire ) == req_Response ) { // Operation is done m_Mutex.unlock(); @@ -790,13 +790,13 @@ namespace cds { namespace algo { try_again: publication_record * pPrev = m_pHead; for ( publication_record * p = pPrev->pNext.load( memory_model::memory_order_acquire ); p; ) { - switch ( p->nState.load( memory_model::memory_order_relaxed ) ) { + switch ( p->nState.load( memory_model::memory_order_relaxed )) { case active: if ( p->nAge.load( memory_model::memory_order_relaxed ) + m_nCompactFactor < nCurAge ) { publication_record * pNext = p->pNext.load( memory_model::memory_order_relaxed ); if ( pPrev->pNext.compare_exchange_strong( p, pNext, - memory_model::memory_order_acquire, atomics::memory_order_relaxed ) ) + memory_model::memory_order_acquire, atomics::memory_order_relaxed )) { p->nState.store( inactive, memory_model::memory_order_release ); p = pNext; diff --git a/cds/algo/flat_combining/wait_strategy.h b/cds/algo/flat_combining/wait_strategy.h index 8dac9ee7..947699d3 100644 --- a/cds/algo/flat_combining/wait_strategy.h +++ b/cds/algo/flat_combining/wait_strategy.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/int_algo.h b/cds/algo/int_algo.h index 3380f547..cc6cfd26 100644 --- a/cds/algo/int_algo.h +++ b/cds/algo/int_algo.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/algo/split_bitstring.h b/cds/algo/split_bitstring.h index d290ff77..3c250f2b 100644 --- a/cds/algo/split_bitstring.h +++ b/cds/algo/split_bitstring.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/backoff.h b/cds/compiler/backoff.h index 53c5e41d..9cfce783 100644 --- a/cds/compiler/backoff.h +++ b/cds/compiler/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/bitop.h b/cds/compiler/bitop.h index 0b00aaae..338cf09c 100644 --- a/cds/compiler/bitop.h +++ b/cds/compiler/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/clang/defs.h b/cds/compiler/clang/defs.h index 6d951228..daec9c73 100644 --- a/cds/compiler/clang/defs.h +++ b/cds/compiler/clang/defs.h @@ -1,7 +1,7 @@ /* 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/ @@ -108,6 +108,8 @@ # define CDS_DEPRECATED( reason ) __attribute__((deprecated( reason ))) #endif +#define CDS_NORETURN __attribute__((__noreturn__)) + // ************************************************* // Features #if defined(__has_feature) && __has_feature(thread_sanitizer) @@ -127,6 +129,13 @@ #define cds_likely( expr ) __builtin_expect( !!( expr ), 1 ) #define cds_unlikely( expr ) __builtin_expect( !!( expr ), 0 ) +// Exceptions + +#if defined( __EXCEPTIONS ) && __EXCEPTIONS == 1 +# define CDS_EXCEPTION_ENABLED +#endif + + // double-width CAS support - only for libc++ #ifdef _LIBCPP_VERSION # if CDS_BUILD_BITS == 64 diff --git a/cds/compiler/cxx11_atomic.h b/cds/compiler/cxx11_atomic.h index bdaf5260..5d1439ad 100644 --- a/cds/compiler/cxx11_atomic.h +++ b/cds/compiler/cxx11_atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/defs.h b/cds/compiler/defs.h index afe83e0b..71025cce 100644 --- a/cds/compiler/defs.h +++ b/cds/compiler/defs.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/feature_tsan.h b/cds/compiler/feature_tsan.h index 2b1d7d7f..a6c8695c 100644 --- a/cds/compiler/feature_tsan.h +++ b/cds/compiler/feature_tsan.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/amd64/backoff.h b/cds/compiler/gcc/amd64/backoff.h index c54855a6..6ee6bc4f 100644 --- a/cds/compiler/gcc/amd64/backoff.h +++ b/cds/compiler/gcc/amd64/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/amd64/bitop.h b/cds/compiler/gcc/amd64/bitop.h index 8705e0de..e57859a9 100644 --- a/cds/compiler/gcc/amd64/bitop.h +++ b/cds/compiler/gcc/amd64/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/amd64/cxx11_atomic.h b/cds/compiler/gcc/amd64/cxx11_atomic.h index 55287a67..03612603 100644 --- a/cds/compiler/gcc/amd64/cxx11_atomic.h +++ b/cds/compiler/gcc/amd64/cxx11_atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/compiler_barriers.h b/cds/compiler/gcc/compiler_barriers.h index a31ec77b..88133a33 100644 --- a/cds/compiler/gcc/compiler_barriers.h +++ b/cds/compiler/gcc/compiler_barriers.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/compiler_macro.h b/cds/compiler/gcc/compiler_macro.h index b65e99ea..d97e1786 100644 --- a/cds/compiler/gcc/compiler_macro.h +++ b/cds/compiler/gcc/compiler_macro.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/defs.h b/cds/compiler/gcc/defs.h index 055fd10d..f7e3c403 100644 --- a/cds/compiler/gcc/defs.h +++ b/cds/compiler/gcc/defs.h @@ -1,7 +1,7 @@ /* 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/ @@ -97,11 +97,19 @@ # define CDS_DEPRECATED( reason ) __attribute__((deprecated( reason ))) #endif +#define CDS_NORETURN __attribute__((__noreturn__)) + // likely/unlikely #define cds_likely( expr ) __builtin_expect( !!( expr ), 1 ) #define cds_unlikely( expr ) __builtin_expect( !!( expr ), 0 ) +// Exceptions + +#if defined( __EXCEPTIONS ) && __EXCEPTIONS == 1 +# define CDS_EXCEPTION_ENABLED +#endif + // double-width CAS support // note: gcc-4.8 does not support double-word atomics // gcc-4.9: a lot of crashes when use DCAS diff --git a/cds/compiler/gcc/ia64/backoff.h b/cds/compiler/gcc/ia64/backoff.h index edff780e..ecc6eb16 100644 --- a/cds/compiler/gcc/ia64/backoff.h +++ b/cds/compiler/gcc/ia64/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/ia64/bitop.h b/cds/compiler/gcc/ia64/bitop.h index 4363081d..b8bef414 100644 --- a/cds/compiler/gcc/ia64/bitop.h +++ b/cds/compiler/gcc/ia64/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/ia64/cxx11_atomic.h b/cds/compiler/gcc/ia64/cxx11_atomic.h index 46977b4f..54452c42 100644 --- a/cds/compiler/gcc/ia64/cxx11_atomic.h +++ b/cds/compiler/gcc/ia64/cxx11_atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/ppc64/backoff.h b/cds/compiler/gcc/ppc64/backoff.h index 747e23e5..f1bf7fd2 100644 --- a/cds/compiler/gcc/ppc64/backoff.h +++ b/cds/compiler/gcc/ppc64/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/ppc64/bitop.h b/cds/compiler/gcc/ppc64/bitop.h index ec902944..8872623d 100644 --- a/cds/compiler/gcc/ppc64/bitop.h +++ b/cds/compiler/gcc/ppc64/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/sparc/backoff.h b/cds/compiler/gcc/sparc/backoff.h index b0c51a0d..76fb9c45 100644 --- a/cds/compiler/gcc/sparc/backoff.h +++ b/cds/compiler/gcc/sparc/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/sparc/bitop.h b/cds/compiler/gcc/sparc/bitop.h index d2416da8..f2b9a972 100644 --- a/cds/compiler/gcc/sparc/bitop.h +++ b/cds/compiler/gcc/sparc/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/sparc/cxx11_atomic.h b/cds/compiler/gcc/sparc/cxx11_atomic.h index d53bb7f8..6837cf34 100644 --- a/cds/compiler/gcc/sparc/cxx11_atomic.h +++ b/cds/compiler/gcc/sparc/cxx11_atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/x86/backoff.h b/cds/compiler/gcc/x86/backoff.h index 999c0380..777bac04 100644 --- a/cds/compiler/gcc/x86/backoff.h +++ b/cds/compiler/gcc/x86/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/x86/bitop.h b/cds/compiler/gcc/x86/bitop.h index 2f2bfb19..6bf2460f 100644 --- a/cds/compiler/gcc/x86/bitop.h +++ b/cds/compiler/gcc/x86/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/x86/cxx11_atomic.h b/cds/compiler/gcc/x86/cxx11_atomic.h index 841ee616..10c96eca 100644 --- a/cds/compiler/gcc/x86/cxx11_atomic.h +++ b/cds/compiler/gcc/x86/cxx11_atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/gcc/x86/cxx11_atomic32.h b/cds/compiler/gcc/x86/cxx11_atomic32.h index 2d30c0cd..138b6c9c 100644 --- a/cds/compiler/gcc/x86/cxx11_atomic32.h +++ b/cds/compiler/gcc/x86/cxx11_atomic32.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/icl/compiler_barriers.h b/cds/compiler/icl/compiler_barriers.h index 56fea0d1..e8b35bba 100644 --- a/cds/compiler/icl/compiler_barriers.h +++ b/cds/compiler/icl/compiler_barriers.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/icl/defs.h b/cds/compiler/icl/defs.h index 2a5cae3b..f0e0729d 100644 --- a/cds/compiler/icl/defs.h +++ b/cds/compiler/icl/defs.h @@ -1,7 +1,7 @@ /* 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/ @@ -133,10 +133,25 @@ // Attributes #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS # define CDS_DEPRECATED( reason ) __declspec(deprecated( reason )) +# define CDS_NORETURN __declspec(noreturn) #else # define CDS_DEPRECATED( reason ) __attribute__((deprecated( reason ))) +# define CDS_NORETURN __attribute__((__noreturn__)) #endif +// Exceptions + +#if CDS_OS_INTERFACE == CDS_OSI_WINDOWS +# if defined( _CPPUNWIND ) +# define CDS_EXCEPTION_ENABLED +# endif +#else +# if defined( __EXCEPTIONS ) && __EXCEPTIONS == 1 +# define CDS_EXCEPTION_ENABLED +# endif +#endif + + #include //@endcond diff --git a/cds/compiler/vc/amd64/backoff.h b/cds/compiler/vc/amd64/backoff.h index e50938c2..a26b0a05 100644 --- a/cds/compiler/vc/amd64/backoff.h +++ b/cds/compiler/vc/amd64/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/vc/amd64/bitop.h b/cds/compiler/vc/amd64/bitop.h index 15dd12b3..04e1eea2 100644 --- a/cds/compiler/vc/amd64/bitop.h +++ b/cds/compiler/vc/amd64/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/vc/amd64/cxx11_atomic.h b/cds/compiler/vc/amd64/cxx11_atomic.h index 27a6f669..c7c2e12a 100644 --- a/cds/compiler/vc/amd64/cxx11_atomic.h +++ b/cds/compiler/vc/amd64/cxx11_atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/vc/compiler_barriers.h b/cds/compiler/vc/compiler_barriers.h index c44d34df..23e273d6 100644 --- a/cds/compiler/vc/compiler_barriers.h +++ b/cds/compiler/vc/compiler_barriers.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/vc/defs.h b/cds/compiler/vc/defs.h index 1b00f6ff..f665acfb 100644 --- a/cds/compiler/vc/defs.h +++ b/cds/compiler/vc/defs.h @@ -1,7 +1,7 @@ /* 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/ @@ -159,6 +159,15 @@ # define CDS_DEPRECATED( reason ) __declspec(deprecated( reason )) #endif +#define CDS_NORETURN __declspec(noreturn) + +// Exceptions + +#if defined( _CPPUNWIND ) +# define CDS_EXCEPTION_ENABLED +#endif + + // double-width CAS support //#define CDS_DCAS_SUPPORT diff --git a/cds/compiler/vc/x86/backoff.h b/cds/compiler/vc/x86/backoff.h index e9b30ea6..8545104d 100644 --- a/cds/compiler/vc/x86/backoff.h +++ b/cds/compiler/vc/x86/backoff.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/vc/x86/bitop.h b/cds/compiler/vc/x86/bitop.h index 73efe5a3..e6d714a0 100644 --- a/cds/compiler/vc/x86/bitop.h +++ b/cds/compiler/vc/x86/bitop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/compiler/vc/x86/cxx11_atomic.h b/cds/compiler/vc/x86/cxx11_atomic.h index d9dc799e..61ba665f 100644 --- a/cds/compiler/vc/x86/cxx11_atomic.h +++ b/cds/compiler/vc/x86/cxx11_atomic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/basket_queue.h b/cds/container/basket_queue.h index 0a09a2c9..a698aee0 100644 --- a/cds/container/basket_queue.h +++ b/cds/container/basket_queue.h @@ -1,7 +1,7 @@ /* 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/ @@ -397,7 +397,7 @@ namespace cds { namespace container { */ bool dequeue( value_type& dest ) { - return dequeue_with( [&dest]( value_type& src ) { + return dequeue_with( [&dest]( value_type& src ) { // TSan finds a race between this read of \p src and node_type constructor // I think, it is wrong CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN; diff --git a/cds/container/bronson_avltree_map_rcu.h b/cds/container/bronson_avltree_map_rcu.h index 00942d8b..a4696481 100644 --- a/cds/container/bronson_avltree_map_rcu.h +++ b/cds/container/bronson_avltree_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/cuckoo_map.h b/cds/container/cuckoo_map.h index 89eca7c0..d06083e3 100644 --- a/cds/container/cuckoo_map.h +++ b/cds/container/cuckoo_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/cuckoo_set.h b/cds/container/cuckoo_set.h index 9229432e..d29bf8d6 100644 --- a/cds/container/cuckoo_set.h +++ b/cds/container/cuckoo_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/base.h b/cds/container/details/base.h index 6b9481a3..18156edf 100644 --- a/cds/container/details/base.h +++ b/cds/container/details/base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/bronson_avltree_base.h b/cds/container/details/bronson_avltree_base.h index 822c204b..c4fe4de4 100644 --- a/cds/container/details/bronson_avltree_base.h +++ b/cds/container/details/bronson_avltree_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/cuckoo_base.h b/cds/container/details/cuckoo_base.h index 617c00a5..d0b5b83a 100644 --- a/cds/container/details/cuckoo_base.h +++ b/cds/container/details/cuckoo_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/ellen_bintree_base.h b/cds/container/details/ellen_bintree_base.h index 6f963a4d..91e2e2b2 100644 --- a/cds/container/details/ellen_bintree_base.h +++ b/cds/container/details/ellen_bintree_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/feldman_hashmap_base.h b/cds/container/details/feldman_hashmap_base.h index 995414a2..584d3063 100644 --- a/cds/container/details/feldman_hashmap_base.h +++ b/cds/container/details/feldman_hashmap_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/feldman_hashset_base.h b/cds/container/details/feldman_hashset_base.h index 14f3b9ea..02016d69 100644 --- a/cds/container/details/feldman_hashset_base.h +++ b/cds/container/details/feldman_hashset_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/guarded_ptr_cast.h b/cds/container/details/guarded_ptr_cast.h index a99d2ffa..e7afa90b 100644 --- a/cds/container/details/guarded_ptr_cast.h +++ b/cds/container/details/guarded_ptr_cast.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/iterable_list_base.h b/cds/container/details/iterable_list_base.h index f48c2aea..8200be39 100644 --- a/cds/container/details/iterable_list_base.h +++ b/cds/container/details/iterable_list_base.h @@ -1,7 +1,7 @@ /* 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/ @@ -123,8 +123,6 @@ namespace cds { namespace container { To enable it use \p iterable_list::stat - \p opt::memory_model - C++ memory ordering model. Can be \p opt::v::relaxed_ordering (relaxed memory model, the default) or \p opt::v::sequential_consistent (sequentially consistent memory model). - - \p opt::rcu_check_deadlock - a deadlock checking policy for \ref cds_intrusive_IterableList_rcu "RCU-based IterableList" - Default is \p opt::v::rcu_throw_deadlock */ template struct make_traits { diff --git a/cds/container/details/lazy_list_base.h b/cds/container/details/lazy_list_base.h index 1f869abc..d4544355 100644 --- a/cds/container/details/lazy_list_base.h +++ b/cds/container/details/lazy_list_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_iterable_kvlist.h b/cds/container/details/make_iterable_kvlist.h index 138e693c..0c76e950 100644 --- a/cds/container/details/make_iterable_kvlist.h +++ b/cds/container/details/make_iterable_kvlist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_iterable_list.h b/cds/container/details/make_iterable_list.h index c9e00254..3cd54fd0 100644 --- a/cds/container/details/make_iterable_list.h +++ b/cds/container/details/make_iterable_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_lazy_kvlist.h b/cds/container/details/make_lazy_kvlist.h index bc7d109f..788c18bd 100644 --- a/cds/container/details/make_lazy_kvlist.h +++ b/cds/container/details/make_lazy_kvlist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_lazy_list.h b/cds/container/details/make_lazy_list.h index 2add6d77..45bb928e 100644 --- a/cds/container/details/make_lazy_list.h +++ b/cds/container/details/make_lazy_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_michael_kvlist.h b/cds/container/details/make_michael_kvlist.h index c28521fa..cba16f13 100644 --- a/cds/container/details/make_michael_kvlist.h +++ b/cds/container/details/make_michael_kvlist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_michael_list.h b/cds/container/details/make_michael_list.h index d6cdf3b2..794e214d 100644 --- a/cds/container/details/make_michael_list.h +++ b/cds/container/details/make_michael_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_skip_list_map.h b/cds/container/details/make_skip_list_map.h index c4941393..895b9586 100644 --- a/cds/container/details/make_skip_list_map.h +++ b/cds/container/details/make_skip_list_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_skip_list_set.h b/cds/container/details/make_skip_list_set.h index 658c5233..ae629060 100644 --- a/cds/container/details/make_skip_list_set.h +++ b/cds/container/details/make_skip_list_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_split_list_set.h b/cds/container/details/make_split_list_set.h index 6efcd9ae..c2e03e48 100644 --- a/cds/container/details/make_split_list_set.h +++ b/cds/container/details/make_split_list_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_split_list_set_iterable_list.h b/cds/container/details/make_split_list_set_iterable_list.h index 87e511e4..4a505bbe 100644 --- a/cds/container/details/make_split_list_set_iterable_list.h +++ b/cds/container/details/make_split_list_set_iterable_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_split_list_set_lazy_list.h b/cds/container/details/make_split_list_set_lazy_list.h index 2d82a003..19de7ad6 100644 --- a/cds/container/details/make_split_list_set_lazy_list.h +++ b/cds/container/details/make_split_list_set_lazy_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/make_split_list_set_michael_list.h b/cds/container/details/make_split_list_set_michael_list.h index a16679e2..9253f0be 100644 --- a/cds/container/details/make_split_list_set_michael_list.h +++ b/cds/container/details/make_split_list_set_michael_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/michael_list_base.h b/cds/container/details/michael_list_base.h index 908072dc..fc10857a 100644 --- a/cds/container/details/michael_list_base.h +++ b/cds/container/details/michael_list_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/michael_map_base.h b/cds/container/details/michael_map_base.h index 627f719a..c1181d1c 100644 --- a/cds/container/details/michael_map_base.h +++ b/cds/container/details/michael_map_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/michael_set_base.h b/cds/container/details/michael_set_base.h index c0acc615..30ed9e82 100644 --- a/cds/container/details/michael_set_base.h +++ b/cds/container/details/michael_set_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/skip_list_base.h b/cds/container/details/skip_list_base.h index a737ec42..1b744b9d 100644 --- a/cds/container/details/skip_list_base.h +++ b/cds/container/details/skip_list_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/details/split_list_base.h b/cds/container/details/split_list_base.h index 9e4cfcef..f37a3298 100644 --- a/cds/container/details/split_list_base.h +++ b/cds/container/details/split_list_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/ellen_bintree_map_dhp.h b/cds/container/ellen_bintree_map_dhp.h index 3ea4830d..50181918 100644 --- a/cds/container/ellen_bintree_map_dhp.h +++ b/cds/container/ellen_bintree_map_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/ellen_bintree_map_hp.h b/cds/container/ellen_bintree_map_hp.h index 7d389fda..6c7fdc89 100644 --- a/cds/container/ellen_bintree_map_hp.h +++ b/cds/container/ellen_bintree_map_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/ellen_bintree_map_rcu.h b/cds/container/ellen_bintree_map_rcu.h index e7f4c90f..df3566d9 100644 --- a/cds/container/ellen_bintree_map_rcu.h +++ b/cds/container/ellen_bintree_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/ellen_bintree_set_dhp.h b/cds/container/ellen_bintree_set_dhp.h index 669d02e5..da737869 100644 --- a/cds/container/ellen_bintree_set_dhp.h +++ b/cds/container/ellen_bintree_set_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/ellen_bintree_set_hp.h b/cds/container/ellen_bintree_set_hp.h index 13b98c21..1d8ec8c3 100644 --- a/cds/container/ellen_bintree_set_hp.h +++ b/cds/container/ellen_bintree_set_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/ellen_bintree_set_rcu.h b/cds/container/ellen_bintree_set_rcu.h index 1723e80a..8d0da850 100644 --- a/cds/container/ellen_bintree_set_rcu.h +++ b/cds/container/ellen_bintree_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/fcdeque.h b/cds/container/fcdeque.h index 1a27fea6..3270be7b 100644 --- a/cds/container/fcdeque.h +++ b/cds/container/fcdeque.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/fcpriority_queue.h b/cds/container/fcpriority_queue.h index d8d16462..83fd323b 100644 --- a/cds/container/fcpriority_queue.h +++ b/cds/container/fcpriority_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/fcqueue.h b/cds/container/fcqueue.h index 7da19de8..df86bda8 100644 --- a/cds/container/fcqueue.h +++ b/cds/container/fcqueue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/fcstack.h b/cds/container/fcstack.h index 87521a53..1b3aa45f 100644 --- a/cds/container/fcstack.h +++ b/cds/container/fcstack.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/feldman_hashmap_dhp.h b/cds/container/feldman_hashmap_dhp.h index 0bc69836..595e1998 100644 --- a/cds/container/feldman_hashmap_dhp.h +++ b/cds/container/feldman_hashmap_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/feldman_hashmap_hp.h b/cds/container/feldman_hashmap_hp.h index 9ab337d8..806ce957 100644 --- a/cds/container/feldman_hashmap_hp.h +++ b/cds/container/feldman_hashmap_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/feldman_hashmap_rcu.h b/cds/container/feldman_hashmap_rcu.h index 8394c983..2f35fd36 100644 --- a/cds/container/feldman_hashmap_rcu.h +++ b/cds/container/feldman_hashmap_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/feldman_hashset_dhp.h b/cds/container/feldman_hashset_dhp.h index 39eac1c0..df5a4df4 100644 --- a/cds/container/feldman_hashset_dhp.h +++ b/cds/container/feldman_hashset_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/feldman_hashset_hp.h b/cds/container/feldman_hashset_hp.h index c640d374..cf9bab92 100644 --- a/cds/container/feldman_hashset_hp.h +++ b/cds/container/feldman_hashset_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/feldman_hashset_rcu.h b/cds/container/feldman_hashset_rcu.h index dc4e48a1..04815ee9 100644 --- a/cds/container/feldman_hashset_rcu.h +++ b/cds/container/feldman_hashset_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/bronson_avltree_map_rcu.h b/cds/container/impl/bronson_avltree_map_rcu.h index 820a2f4e..746ffae4 100644 --- a/cds/container/impl/bronson_avltree_map_rcu.h +++ b/cds/container/impl/bronson_avltree_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/ellen_bintree_map.h b/cds/container/impl/ellen_bintree_map.h index 1949c7fb..e9dd938c 100644 --- a/cds/container/impl/ellen_bintree_map.h +++ b/cds/container/impl/ellen_bintree_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/ellen_bintree_set.h b/cds/container/impl/ellen_bintree_set.h index 282c7261..365e7a6a 100644 --- a/cds/container/impl/ellen_bintree_set.h +++ b/cds/container/impl/ellen_bintree_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/feldman_hashmap.h b/cds/container/impl/feldman_hashmap.h index 453b245c..dc74e420 100644 --- a/cds/container/impl/feldman_hashmap.h +++ b/cds/container/impl/feldman_hashmap.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/feldman_hashset.h b/cds/container/impl/feldman_hashset.h index dce01d0c..51d05706 100644 --- a/cds/container/impl/feldman_hashset.h +++ b/cds/container/impl/feldman_hashset.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/iterable_kvlist.h b/cds/container/impl/iterable_kvlist.h index 3595b9ec..4a5e44bf 100644 --- a/cds/container/impl/iterable_kvlist.h +++ b/cds/container/impl/iterable_kvlist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/iterable_list.h b/cds/container/impl/iterable_list.h index b8dbe688..64e5de41 100644 --- a/cds/container/impl/iterable_list.h +++ b/cds/container/impl/iterable_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/lazy_kvlist.h b/cds/container/impl/lazy_kvlist.h index 08726861..56bf25c0 100644 --- a/cds/container/impl/lazy_kvlist.h +++ b/cds/container/impl/lazy_kvlist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/lazy_list.h b/cds/container/impl/lazy_list.h index 726d564a..7d91b0ee 100644 --- a/cds/container/impl/lazy_list.h +++ b/cds/container/impl/lazy_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/michael_kvlist.h b/cds/container/impl/michael_kvlist.h index 2d22b8e1..8009df16 100644 --- a/cds/container/impl/michael_kvlist.h +++ b/cds/container/impl/michael_kvlist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/michael_list.h b/cds/container/impl/michael_list.h index fdf9351d..49b39076 100644 --- a/cds/container/impl/michael_list.h +++ b/cds/container/impl/michael_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/skip_list_map.h b/cds/container/impl/skip_list_map.h index 021dd8e7..5b58f7b7 100644 --- a/cds/container/impl/skip_list_map.h +++ b/cds/container/impl/skip_list_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/impl/skip_list_set.h b/cds/container/impl/skip_list_set.h index 18fa1182..ab075e97 100644 --- a/cds/container/impl/skip_list_set.h +++ b/cds/container/impl/skip_list_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/iterable_kvlist_dhp.h b/cds/container/iterable_kvlist_dhp.h index ebff01d2..dcbc6cf1 100644 --- a/cds/container/iterable_kvlist_dhp.h +++ b/cds/container/iterable_kvlist_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/iterable_kvlist_hp.h b/cds/container/iterable_kvlist_hp.h index d2a75932..a77744dc 100644 --- a/cds/container/iterable_kvlist_hp.h +++ b/cds/container/iterable_kvlist_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/iterable_list_dhp.h b/cds/container/iterable_list_dhp.h index 92f05e79..e625c2fa 100644 --- a/cds/container/iterable_list_dhp.h +++ b/cds/container/iterable_list_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/iterable_list_hp.h b/cds/container/iterable_list_hp.h index bbaafe34..b67fd9bf 100644 --- a/cds/container/iterable_list_hp.h +++ b/cds/container/iterable_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_kvlist_dhp.h b/cds/container/lazy_kvlist_dhp.h index e2047338..e528085e 100644 --- a/cds/container/lazy_kvlist_dhp.h +++ b/cds/container/lazy_kvlist_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_kvlist_hp.h b/cds/container/lazy_kvlist_hp.h index 5bef97c5..39d30256 100644 --- a/cds/container/lazy_kvlist_hp.h +++ b/cds/container/lazy_kvlist_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_kvlist_nogc.h b/cds/container/lazy_kvlist_nogc.h index 6e2b2fcb..2bb6be31 100644 --- a/cds/container/lazy_kvlist_nogc.h +++ b/cds/container/lazy_kvlist_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_kvlist_rcu.h b/cds/container/lazy_kvlist_rcu.h index e3cd14f2..3cec5236 100644 --- a/cds/container/lazy_kvlist_rcu.h +++ b/cds/container/lazy_kvlist_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_list_dhp.h b/cds/container/lazy_list_dhp.h index 05df2948..9939a00c 100644 --- a/cds/container/lazy_list_dhp.h +++ b/cds/container/lazy_list_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_list_hp.h b/cds/container/lazy_list_hp.h index 006f2229..f4c7709a 100644 --- a/cds/container/lazy_list_hp.h +++ b/cds/container/lazy_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_list_nogc.h b/cds/container/lazy_list_nogc.h index 551b53d4..8f6b33da 100644 --- a/cds/container/lazy_list_nogc.h +++ b/cds/container/lazy_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/lazy_list_rcu.h b/cds/container/lazy_list_rcu.h index fea8043c..738e5042 100644 --- a/cds/container/lazy_list_rcu.h +++ b/cds/container/lazy_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_kvlist_dhp.h b/cds/container/michael_kvlist_dhp.h index b476c0e4..c38e145f 100644 --- a/cds/container/michael_kvlist_dhp.h +++ b/cds/container/michael_kvlist_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_kvlist_hp.h b/cds/container/michael_kvlist_hp.h index e66d2b48..2b242d3c 100644 --- a/cds/container/michael_kvlist_hp.h +++ b/cds/container/michael_kvlist_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_kvlist_nogc.h b/cds/container/michael_kvlist_nogc.h index e43c87c1..2a5106a2 100644 --- a/cds/container/michael_kvlist_nogc.h +++ b/cds/container/michael_kvlist_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_kvlist_rcu.h b/cds/container/michael_kvlist_rcu.h index 427fde9b..b38c3270 100644 --- a/cds/container/michael_kvlist_rcu.h +++ b/cds/container/michael_kvlist_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_list_dhp.h b/cds/container/michael_list_dhp.h index a6935837..39358433 100644 --- a/cds/container/michael_list_dhp.h +++ b/cds/container/michael_list_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_list_hp.h b/cds/container/michael_list_hp.h index 8a802f9a..046ed4e1 100644 --- a/cds/container/michael_list_hp.h +++ b/cds/container/michael_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_list_nogc.h b/cds/container/michael_list_nogc.h index a3b881b2..747d58db 100644 --- a/cds/container/michael_list_nogc.h +++ b/cds/container/michael_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_list_rcu.h b/cds/container/michael_list_rcu.h index 6aaf2379..5b3f8e67 100644 --- a/cds/container/michael_list_rcu.h +++ b/cds/container/michael_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_map.h b/cds/container/michael_map.h index 7ba149e2..799407ac 100644 --- a/cds/container/michael_map.h +++ b/cds/container/michael_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_map_nogc.h b/cds/container/michael_map_nogc.h index e3e010da..7d3c2e84 100644 --- a/cds/container/michael_map_nogc.h +++ b/cds/container/michael_map_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_map_rcu.h b/cds/container/michael_map_rcu.h index cc0fba5e..d036e0ab 100644 --- a/cds/container/michael_map_rcu.h +++ b/cds/container/michael_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_set.h b/cds/container/michael_set.h index e2aa8c3a..92bbbe05 100644 --- a/cds/container/michael_set.h +++ b/cds/container/michael_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_set_nogc.h b/cds/container/michael_set_nogc.h index 9854ac07..6f1d293d 100644 --- a/cds/container/michael_set_nogc.h +++ b/cds/container/michael_set_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/michael_set_rcu.h b/cds/container/michael_set_rcu.h index d2e47bcc..75ab34da 100644 --- a/cds/container/michael_set_rcu.h +++ b/cds/container/michael_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/moir_queue.h b/cds/container/moir_queue.h index 5ed12223..1b0e2d10 100644 --- a/cds/container/moir_queue.h +++ b/cds/container/moir_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/mspriority_queue.h b/cds/container/mspriority_queue.h index 160cead2..387fa3b6 100644 --- a/cds/container/mspriority_queue.h +++ b/cds/container/mspriority_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/msqueue.h b/cds/container/msqueue.h index 874a5cd0..e3858513 100644 --- a/cds/container/msqueue.h +++ b/cds/container/msqueue.h @@ -1,7 +1,7 @@ /* 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/ @@ -355,7 +355,7 @@ namespace cds { namespace container { */ bool dequeue( value_type& dest ) { - return dequeue_with( [&dest]( value_type& src ) { + return dequeue_with( [&dest]( value_type& src ) { // TSan finds a race between this read of \p src and node_type constructor // I think, it is wrong CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN; diff --git a/cds/container/optimistic_queue.h b/cds/container/optimistic_queue.h index 1b29f9df..2c0eb8a4 100644 --- a/cds/container/optimistic_queue.h +++ b/cds/container/optimistic_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/rwqueue.h b/cds/container/rwqueue.h index ffd6adff..9dd83075 100644 --- a/cds/container/rwqueue.h +++ b/cds/container/rwqueue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/segmented_queue.h b/cds/container/segmented_queue.h index 89c6eb24..192505e6 100644 --- a/cds/container/segmented_queue.h +++ b/cds/container/segmented_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_map_dhp.h b/cds/container/skip_list_map_dhp.h index 7fdbd245..88a7b3d2 100644 --- a/cds/container/skip_list_map_dhp.h +++ b/cds/container/skip_list_map_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_map_hp.h b/cds/container/skip_list_map_hp.h index ca12e788..95f53234 100644 --- a/cds/container/skip_list_map_hp.h +++ b/cds/container/skip_list_map_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_map_nogc.h b/cds/container/skip_list_map_nogc.h index 0740bef1..d86ad94a 100644 --- a/cds/container/skip_list_map_nogc.h +++ b/cds/container/skip_list_map_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_map_rcu.h b/cds/container/skip_list_map_rcu.h index 0470477d..201bf158 100644 --- a/cds/container/skip_list_map_rcu.h +++ b/cds/container/skip_list_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_set_dhp.h b/cds/container/skip_list_set_dhp.h index 849e1fa2..84512a7d 100644 --- a/cds/container/skip_list_set_dhp.h +++ b/cds/container/skip_list_set_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_set_hp.h b/cds/container/skip_list_set_hp.h index 2f839663..23cdbc1b 100644 --- a/cds/container/skip_list_set_hp.h +++ b/cds/container/skip_list_set_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_set_nogc.h b/cds/container/skip_list_set_nogc.h index 5f763615..fb79ed95 100644 --- a/cds/container/skip_list_set_nogc.h +++ b/cds/container/skip_list_set_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/skip_list_set_rcu.h b/cds/container/skip_list_set_rcu.h index edbfc3b7..9c9b4f0e 100644 --- a/cds/container/skip_list_set_rcu.h +++ b/cds/container/skip_list_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/split_list_map.h b/cds/container/split_list_map.h index 59c06caf..56eccfa3 100644 --- a/cds/container/split_list_map.h +++ b/cds/container/split_list_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/split_list_map_nogc.h b/cds/container/split_list_map_nogc.h index b005cd9d..3ae82f23 100644 --- a/cds/container/split_list_map_nogc.h +++ b/cds/container/split_list_map_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/split_list_map_rcu.h b/cds/container/split_list_map_rcu.h index 800f2edb..99bf6c95 100644 --- a/cds/container/split_list_map_rcu.h +++ b/cds/container/split_list_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/split_list_set.h b/cds/container/split_list_set.h index cf1ed65c..21d0b353 100644 --- a/cds/container/split_list_set.h +++ b/cds/container/split_list_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/split_list_set_nogc.h b/cds/container/split_list_set_nogc.h index ffc98b84..beca1d3a 100644 --- a/cds/container/split_list_set_nogc.h +++ b/cds/container/split_list_set_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/split_list_set_rcu.h b/cds/container/split_list_set_rcu.h index a4a9bc6f..36f45517 100644 --- a/cds/container/split_list_set_rcu.h +++ b/cds/container/split_list_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map.h b/cds/container/striped_map.h index 17e6462e..e2e41266 100644 --- a/cds/container/striped_map.h +++ b/cds/container/striped_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/boost_flat_map.h b/cds/container/striped_map/boost_flat_map.h index fdf1e5cd..a3da94c0 100644 --- a/cds/container/striped_map/boost_flat_map.h +++ b/cds/container/striped_map/boost_flat_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/boost_list.h b/cds/container/striped_map/boost_list.h index 798fdde3..7c91fcf9 100644 --- a/cds/container/striped_map/boost_list.h +++ b/cds/container/striped_map/boost_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/boost_map.h b/cds/container/striped_map/boost_map.h index cc1b7a7e..845f73c6 100644 --- a/cds/container/striped_map/boost_map.h +++ b/cds/container/striped_map/boost_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/boost_slist.h b/cds/container/striped_map/boost_slist.h index 904f9000..64b21352 100644 --- a/cds/container/striped_map/boost_slist.h +++ b/cds/container/striped_map/boost_slist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/boost_unordered_map.h b/cds/container/striped_map/boost_unordered_map.h index b94d7bc6..f73c4bfe 100644 --- a/cds/container/striped_map/boost_unordered_map.h +++ b/cds/container/striped_map/boost_unordered_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/std_hash_map.h b/cds/container/striped_map/std_hash_map.h index 884083cd..8fd414c8 100644 --- a/cds/container/striped_map/std_hash_map.h +++ b/cds/container/striped_map/std_hash_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/std_list.h b/cds/container/striped_map/std_list.h index 10e6a064..4c5f9ba7 100644 --- a/cds/container/striped_map/std_list.h +++ b/cds/container/striped_map/std_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_map/std_map.h b/cds/container/striped_map/std_map.h index f42e788c..eaebeacb 100644 --- a/cds/container/striped_map/std_map.h +++ b/cds/container/striped_map/std_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set.h b/cds/container/striped_set.h index 87f33878..ae246667 100644 --- a/cds/container/striped_set.h +++ b/cds/container/striped_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/adapter.h b/cds/container/striped_set/adapter.h index 03a5cb48..9bda459d 100644 --- a/cds/container/striped_set/adapter.h +++ b/cds/container/striped_set/adapter.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/boost_flat_set.h b/cds/container/striped_set/boost_flat_set.h index 418a6476..3e9efaed 100644 --- a/cds/container/striped_set/boost_flat_set.h +++ b/cds/container/striped_set/boost_flat_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/boost_list.h b/cds/container/striped_set/boost_list.h index 3647c88f..e3d39d51 100644 --- a/cds/container/striped_set/boost_list.h +++ b/cds/container/striped_set/boost_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/boost_set.h b/cds/container/striped_set/boost_set.h index 402f569b..f73943a1 100644 --- a/cds/container/striped_set/boost_set.h +++ b/cds/container/striped_set/boost_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/boost_slist.h b/cds/container/striped_set/boost_slist.h index 9da3702e..7ef8efd9 100644 --- a/cds/container/striped_set/boost_slist.h +++ b/cds/container/striped_set/boost_slist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/boost_stable_vector.h b/cds/container/striped_set/boost_stable_vector.h index b83508b5..53a8db6c 100644 --- a/cds/container/striped_set/boost_stable_vector.h +++ b/cds/container/striped_set/boost_stable_vector.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/boost_unordered_set.h b/cds/container/striped_set/boost_unordered_set.h index 7b6e6ff1..8d3e70f0 100644 --- a/cds/container/striped_set/boost_unordered_set.h +++ b/cds/container/striped_set/boost_unordered_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/boost_vector.h b/cds/container/striped_set/boost_vector.h index 94927d9f..94d0eed2 100644 --- a/cds/container/striped_set/boost_vector.h +++ b/cds/container/striped_set/boost_vector.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/std_hash_set.h b/cds/container/striped_set/std_hash_set.h index ca3342eb..ae7ff738 100644 --- a/cds/container/striped_set/std_hash_set.h +++ b/cds/container/striped_set/std_hash_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/std_list.h b/cds/container/striped_set/std_list.h index 491f6fc0..2a00f22a 100644 --- a/cds/container/striped_set/std_list.h +++ b/cds/container/striped_set/std_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/std_set.h b/cds/container/striped_set/std_set.h index 95ace96f..f01a2765 100644 --- a/cds/container/striped_set/std_set.h +++ b/cds/container/striped_set/std_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/striped_set/std_vector.h b/cds/container/striped_set/std_vector.h index 1656088c..ce4b271c 100644 --- a/cds/container/striped_set/std_vector.h +++ b/cds/container/striped_set/std_vector.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/treiber_stack.h b/cds/container/treiber_stack.h index 493fdf5e..a559d0cb 100644 --- a/cds/container/treiber_stack.h +++ b/cds/container/treiber_stack.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/container/vyukov_mpmc_cycle_queue.h b/cds/container/vyukov_mpmc_cycle_queue.h index d9365949..4a06618a 100644 --- a/cds/container/vyukov_mpmc_cycle_queue.h +++ b/cds/container/vyukov_mpmc_cycle_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/aligned_allocator.h b/cds/details/aligned_allocator.h index 19b49a01..1fd3c49c 100644 --- a/cds/details/aligned_allocator.h +++ b/cds/details/aligned_allocator.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/aligned_type.h b/cds/details/aligned_type.h index 2ebd656e..1185618e 100644 --- a/cds/details/aligned_type.h +++ b/cds/details/aligned_type.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/allocator.h b/cds/details/allocator.h index 0ae6f103..ee7f0302 100644 --- a/cds/details/allocator.h +++ b/cds/details/allocator.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/binary_functor_wrapper.h b/cds/details/binary_functor_wrapper.h index 5c108b6b..568f0d9f 100644 --- a/cds/details/binary_functor_wrapper.h +++ b/cds/details/binary_functor_wrapper.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/bit_reverse_counter.h b/cds/details/bit_reverse_counter.h index 002e79e3..86c9406a 100644 --- a/cds/details/bit_reverse_counter.h +++ b/cds/details/bit_reverse_counter.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/bitop_generic.h b/cds/details/bitop_generic.h index 3eae7964..a3cac9b6 100644 --- a/cds/details/bitop_generic.h +++ b/cds/details/bitop_generic.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/bounded_array.h b/cds/details/bounded_array.h index 12796347..2336840d 100644 --- a/cds/details/bounded_array.h +++ b/cds/details/bounded_array.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/bounded_container.h b/cds/details/bounded_container.h index 755d4b06..1c397136 100644 --- a/cds/details/bounded_container.h +++ b/cds/details/bounded_container.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/defs.h b/cds/details/defs.h index 3e4d53fb..b1f0331c 100644 --- a/cds/details/defs.h +++ b/cds/details/defs.h @@ -1,7 +1,7 @@ /* 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/ @@ -339,10 +339,12 @@ namespace cds {} // CDS_VERIFY: Debug - assert(_expr); Release - _expr #ifdef CDS_DEBUG -# define CDS_VERIFY( _expr ) assert( _expr ) +# define CDS_VERIFY( _expr ) assert( _expr ) +# define CDS_VERIFY_FALSE( _expr ) assert( !( _expr )) # define CDS_DEBUG_ONLY( _expr ) _expr #else # define CDS_VERIFY( _expr ) _expr +# define CDS_VERIFY_FALSE( _expr ) _expr # define CDS_DEBUG_ONLY( _expr ) #endif diff --git a/cds/details/is_aligned.h b/cds/details/is_aligned.h index 319c5c6c..479d5b34 100644 --- a/cds/details/is_aligned.h +++ b/cds/details/is_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/lib.h b/cds/details/lib.h index 372ea870..08b7f647 100644 --- a/cds/details/lib.h +++ b/cds/details/lib.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/make_const_type.h b/cds/details/make_const_type.h index 0d57b4a0..63358598 100644 --- a/cds/details/make_const_type.h +++ b/cds/details/make_const_type.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/marked_ptr.h b/cds/details/marked_ptr.h index de43ea73..db70507b 100644 --- a/cds/details/marked_ptr.h +++ b/cds/details/marked_ptr.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/static_functor.h b/cds/details/static_functor.h index 661ea8da..2df6419a 100644 --- a/cds/details/static_functor.h +++ b/cds/details/static_functor.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/throw_exception.h b/cds/details/throw_exception.h new file mode 100644 index 00000000..cd708df8 --- /dev/null +++ b/cds/details/throw_exception.h @@ -0,0 +1,88 @@ +/* + This file is a part of libcds - Concurrent Data Structures library + + (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/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef CDSLIB_DETAILS_THROW_EXCEPTION_H +#define CDSLIB_DETAILS_THROW_EXCEPTION_H + +#include +#if !defined( CDS_EXCEPTION_ENABLED ) && !defined( CDS_USER_DEFINED_THROW_HANDLER ) +# include +#endif + +namespace cds { + +#if !defined( CDS_USER_DEFINED_THROW_EXCEPTION ) +#if defined( CDS_EXCEPTION_ENABLED ) + /// Function to throw an exception + /** + If you compile your code with exception enabled, \p %throw_exception() function + throws the \p exception. + + If exception is disabled, \p %throw_exception() prints an exception message to + standard output and call \p abort(). + + You may supply your own \p %cds::throw_exception() function; + for that you should specify \p -DCDS_USER_DEFINED_THROW_EXCEPTION + in compiler command line. + + @note \p %throw_exception() never returns. If the user-defined \p %throw_exception() returns, + the behavior is undefined. + */ + template + CDS_NORETURN static inline void throw_exception( + E&& exception, ///< Exception to throw + char const* file, ///< Source filename + int line ///< File line + ) + { + CDS_UNUSED( file ); + CDS_UNUSED( line ); + + throw exception; + } +#else + template + CDS_NORETURN static inline void throw_exception( E&& exception, char const* file, int line ) + { + printf( "file %s, line %d: %s\n", file, line, exception.what() ); + abort(); + } +#endif +//#else + // User-provided cds::throw_exception() +#endif + +#define CDS_THROW_EXCEPTION( exception ) ::cds::throw_exception( exception, __FILE__, __LINE__ ) + +} // namespace cds + + +#endif // #ifndef CDSLIB_DETAILS_THROW_EXCEPTION_H + diff --git a/cds/details/trivial_assign.h b/cds/details/trivial_assign.h index a384052d..4b5b2371 100644 --- a/cds/details/trivial_assign.h +++ b/cds/details/trivial_assign.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/details/type_padding.h b/cds/details/type_padding.h index e2c52610..c2d4a872 100644 --- a/cds/details/type_padding.h +++ b/cds/details/type_padding.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/gc/default_gc.h b/cds/gc/default_gc.h index f27ac7ac..ea1ff907 100644 --- a/cds/gc/default_gc.h +++ b/cds/gc/default_gc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/gc/details/dhp.h b/cds/gc/details/dhp.h deleted file mode 100644 index 78ad05f3..00000000 --- a/cds/gc/details/dhp.h +++ /dev/null @@ -1,874 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_DETAILS_DHP_H -#define CDSLIB_GC_DETAILS_DHP_H - -#include // unique_lock -#include -#include -#include -#include -#include -#include - -#if CDS_COMPILER == CDS_COMPILER_MSVC -# pragma warning(push) -# pragma warning(disable:4251) // C4251: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' -#endif - -//@cond -namespace cds { namespace gc { - - /// Dynamic Hazard Pointer reclamation schema - /** - The cds::gc::dhp namespace and its members are internal representation of the GC and should not be used directly. - Use cds::gc::DHP class in your code. - - Dynamic Hazard Pointer (DHP) garbage collector is a singleton. The main user-level part of DHP schema is - GC class and its nested classes. Before use any DHP-related class you must initialize DHP garbage collector - by contructing cds::gc::DHP object in beginning of your main(). - See cds::gc::DHP class for explanation. - - \par Implementation issues - The global list of free guards (\p cds::gc::dhp::details::guard_allocator) is protected by a spin-lock (i.e. serialized). - It seems that this solution should not introduce significant performance bottleneck, because each thread has its own set - of guards allocated from the global list of free guards and the access to the global list is occurred only when - all thread's guard is busy. In this case the thread allocates a next block of guards from the global list. - Guards allocated for the thread is push back to the global list only when the thread terminates. - */ - namespace dhp { - - // Forward declarations - class Guard; - template class GuardArray; - class ThreadGC; - class GarbageCollector; - - /// Retired pointer type - typedef cds::gc::details::retired_ptr retired_ptr; - - using cds::gc::details::free_retired_ptr_func; - - /// Details of Dynamic Hazard Pointer algorithm - namespace details { - - // Forward declaration - class liberate_set; - - /// Retired pointer buffer node - struct retired_ptr_node { - retired_ptr m_ptr ; ///< retired pointer - atomics::atomic m_pNext ; ///< next retired pointer in buffer - atomics::atomic m_pNextFree ; ///< next item in free list of \p retired_ptr_node - }; - - /// Internal guard representation - struct guard_data { - typedef void * guarded_ptr; ///< type of value guarded - - atomics::atomic pPost; ///< pointer guarded - atomics::atomic pGlobalNext; ///< next item of global list of allocated guards - atomics::atomic pNextFree; ///< pointer to the next item in global or thread-local free-list - - guard_data * pThreadNext; ///< next item of thread's local list of guards - - guard_data() CDS_NOEXCEPT - : pPost( nullptr ) - , pGlobalNext( nullptr ) - , pNextFree( nullptr ) - , pThreadNext( nullptr ) - {} - - void init() CDS_NOEXCEPT - { - pPost.store( nullptr, atomics::memory_order_relaxed ); - } - - /// Checks if the guard is free, that is, it does not contain any pointer guarded - bool isFree() const CDS_NOEXCEPT - { - return pPost.load( atomics::memory_order_acquire ) == nullptr; - } - - guarded_ptr get( atomics::memory_order order = atomics::memory_order_acquire ) - { - return pPost.load( order ); - } - - void set( guarded_ptr p, atomics::memory_order order = atomics::memory_order_release ) - { - pPost.store( p, order ); - } - }; - - /// Guard allocator - template - class guard_allocator - { - cds::details::Allocator m_GuardAllocator; ///< guard allocator - - atomics::atomic m_GuardList; ///< Head of allocated guard list (linked by guard_data::pGlobalNext field) - atomics::atomic m_FreeGuardList; ///< Head of free guard list (linked by guard_data::pNextFree field) - cds::sync::spin m_freeListLock; ///< Access to m_FreeGuardList - - /* - Unfortunately, access to the list of free guard is lock-based. - Lock-free manipulations with guard free-list are ABA-prone. - TODO: working with m_FreeGuardList in lock-free manner. - */ - - private: - /// Allocates new guard from the heap. The function uses aligned allocator - guard_data * allocNew() - { - //TODO: the allocator should make block allocation - - details::guard_data * pGuard = m_GuardAllocator.New(); - - // Link guard to the list - // m_GuardList is an accumulating list and it cannot support concurrent deletion, - // so, ABA problem is impossible for it - details::guard_data * pHead = m_GuardList.load( atomics::memory_order_acquire ); - do { - pGuard->pGlobalNext.store( pHead, atomics::memory_order_relaxed ); - // pHead is changed by compare_exchange_weak - } while ( !m_GuardList.compare_exchange_weak( pHead, pGuard, atomics::memory_order_acq_rel, atomics::memory_order_acquire )); - - pGuard->init(); - return pGuard; - } - - public: - // Default ctor - guard_allocator() CDS_NOEXCEPT - : m_GuardList( nullptr ) - , m_FreeGuardList( nullptr ) - {} - - // Destructor - ~guard_allocator() - { - guard_data * pNext; - for ( guard_data * pData = m_GuardList.load( atomics::memory_order_relaxed ); pData != nullptr; pData = pNext ) { - pNext = pData->pGlobalNext.load( atomics::memory_order_relaxed ); - m_GuardAllocator.Delete( pData ); - } - } - - /// Allocates a guard from free list or from heap if free list is empty - guard_data* alloc() - { - // Try to pop a guard from free-list - details::guard_data * pGuard; - - { - std::unique_lock al( m_freeListLock ); - pGuard = m_FreeGuardList.load(atomics::memory_order_relaxed); - if ( pGuard ) - m_FreeGuardList.store( pGuard->pNextFree.load(atomics::memory_order_relaxed), atomics::memory_order_relaxed ); - } - if ( !pGuard ) - return allocNew(); - - pGuard->init(); - return pGuard; - } - - /// Frees guard \p pGuard - /** - The function places the guard \p pGuard into free-list - */ - void free( guard_data* pGuard ) CDS_NOEXCEPT - { - pGuard->pPost.store( nullptr, atomics::memory_order_relaxed ); - - std::unique_lock al( m_freeListLock ); - pGuard->pNextFree.store( m_FreeGuardList.load(atomics::memory_order_relaxed), atomics::memory_order_relaxed ); - m_FreeGuardList.store( pGuard, atomics::memory_order_relaxed ); - } - - /// Allocates list of guard - /** - The list returned is linked by guard's \p pThreadNext and \p pNextFree fields. - - cds::gc::dhp::ThreadGC supporting method - */ - guard_data * allocList( size_t nCount ) - { - assert( nCount != 0 ); - - guard_data * pHead; - guard_data * pLast; - - pHead = - pLast = alloc(); - - // The guard list allocated is private for the thread, - // so, we can use relaxed memory order - while ( --nCount ) { - guard_data * p = alloc(); - pLast->pNextFree.store( pLast->pThreadNext = p, atomics::memory_order_relaxed ); - pLast = p; - } - - pLast->pNextFree.store( pLast->pThreadNext = nullptr, atomics::memory_order_relaxed ); - - return pHead; - } - - /// Frees list of guards - /** - The list \p pList is linked by guard's \p pThreadNext field. - - cds::gc::dhp::ThreadGC supporting method - */ - void freeList( guard_data * pList ) CDS_NOEXCEPT - { - assert( pList != nullptr ); - - guard_data * pLast = pList; - while ( pLast->pThreadNext ) { - pLast->pPost.store( nullptr, atomics::memory_order_relaxed ); - guard_data * p; - pLast->pNextFree.store( p = pLast->pThreadNext, atomics::memory_order_relaxed ); - pLast = p; - } - - std::unique_lock al( m_freeListLock ); - pLast->pNextFree.store( m_FreeGuardList.load(atomics::memory_order_relaxed), atomics::memory_order_relaxed ); - m_FreeGuardList.store( pList, atomics::memory_order_relaxed ); - } - - /// Returns the list's head of guards allocated - guard_data * begin() CDS_NOEXCEPT - { - return m_GuardList.load(atomics::memory_order_acquire); - } - }; - - /// Retired pointer buffer - /** - The buffer of retired nodes ready for liberating. - When size of buffer exceeds a threshold the GC calls \p scan() procedure to free - retired nodes. - */ - class retired_ptr_buffer - { - atomics::atomic m_pHead ; ///< head of buffer - atomics::atomic m_nItemCount; ///< buffer's item count - - public: - retired_ptr_buffer() CDS_NOEXCEPT - : m_pHead( nullptr ) - , m_nItemCount(0) - {} - - ~retired_ptr_buffer() CDS_NOEXCEPT - { - assert( m_pHead.load( atomics::memory_order_relaxed ) == nullptr ); - } - - /// Pushes new node into the buffer. Returns current buffer size - size_t push( retired_ptr_node& node ) CDS_NOEXCEPT - { - retired_ptr_node * pHead = m_pHead.load(atomics::memory_order_acquire); - do { - node.m_pNext.store( pHead, atomics::memory_order_relaxed ); - // pHead is changed by compare_exchange_weak - } while ( !m_pHead.compare_exchange_weak( pHead, &node, atomics::memory_order_release, atomics::memory_order_acquire )); - - return m_nItemCount.fetch_add( 1, atomics::memory_order_relaxed ) + 1; - } - - /// Pushes [pFirst, pLast] list linked by pNext field. - size_t push_list( retired_ptr_node* pFirst, retired_ptr_node* pLast, size_t nSize ) - { - assert( pFirst ); - assert( pLast ); - - retired_ptr_node * pHead = m_pHead.load( atomics::memory_order_acquire ); - do { - pLast->m_pNext.store( pHead, atomics::memory_order_relaxed ); - // pHead is changed by compare_exchange_weak - } while ( !m_pHead.compare_exchange_weak( pHead, pFirst, atomics::memory_order_release, atomics::memory_order_acquire )); - - return m_nItemCount.fetch_add( nSize, atomics::memory_order_relaxed ) + 1; - } - - /// Result of \ref dhp_gc_privatize "privatize" function. - /** - The \p privatize function returns retired node list as \p first and the size of that list as \p second. - */ - typedef std::pair privatize_result; - - /// Gets current list of retired pointer and clears the list - /**@anchor dhp_gc_privatize - */ - privatize_result privatize() CDS_NOEXCEPT - { - privatize_result res; - - // Item counter is needed only as a threshold for \p scan() function - // So, we may clear the item counter without synchronization with m_pHead - res.second = m_nItemCount.exchange( 0, atomics::memory_order_relaxed ); - res.first = m_pHead.exchange( nullptr, atomics::memory_order_acq_rel ); - return res; - } - - /// Returns current size of buffer (approximate) - size_t size() const CDS_NOEXCEPT - { - return m_nItemCount.load(atomics::memory_order_relaxed); - } - }; - - /// Pool of retired pointers - /** - The class acts as an allocator of retired node. - Retired pointers are linked in the lock-free list. - */ - template - class retired_ptr_pool { - /// Pool item - typedef retired_ptr_node item; - - /// Count of items in block - static const size_t m_nItemPerBlock = 1024 / sizeof(item) - 1; - - /// Pool block - struct block { - atomics::atomic pNext; ///< next block - item items[m_nItemPerBlock]; ///< item array - }; - - atomics::atomic m_pBlockListHead; ///< head of of allocated block list - - // To solve ABA problem we use epoch-based approach - unsigned int const m_nEpochBitmask; ///< Epoch bitmask (log2( m_nEpochCount)) - atomics::atomic m_nCurEpoch; ///< Current epoch - atomics::atomic* m_pEpochFree; ///< List of free item per epoch - atomics::atomic m_pGlobalFreeHead; ///< Head of unallocated item list - - typedef cds::details::Allocator< block, Alloc > block_allocator; - typedef cds::details::Allocator< atomics::atomic, Alloc > epoch_array_alloc; - - private: - void allocNewBlock() - { - // allocate new block - block * pNew = block_allocator().New(); - - // link items within the block - item * pLastItem = pNew->items + m_nItemPerBlock - 1; - for ( item * pItem = pNew->items; pItem != pLastItem; ++pItem ) { - pItem->m_pNextFree.store( pItem + 1, atomics::memory_order_release ); - CDS_STRICT_DO( pItem->m_pNext.store( nullptr, atomics::memory_order_relaxed )); - } - - // links new block to the block list - { - block * pHead = m_pBlockListHead.load(atomics::memory_order_relaxed); - do { - pNew->pNext.store( pHead, atomics::memory_order_relaxed ); - // pHead is changed by compare_exchange_weak - } while ( !m_pBlockListHead.compare_exchange_weak( pHead, pNew, atomics::memory_order_release, atomics::memory_order_acquire )); - } - - // links block's items to the free list - { - item * pHead = m_pGlobalFreeHead.load(atomics::memory_order_relaxed); - do { - pLastItem->m_pNextFree.store( pHead, atomics::memory_order_release ); - // pHead is changed by compare_exchange_weak - } while ( !m_pGlobalFreeHead.compare_exchange_weak( pHead, pNew->items, atomics::memory_order_release, atomics::memory_order_acquire )); - } - } - - unsigned int current_epoch() const CDS_NOEXCEPT - { - return m_nCurEpoch.load(atomics::memory_order_acquire) & m_nEpochBitmask; - } - - unsigned int next_epoch() const CDS_NOEXCEPT - { - return (m_nCurEpoch.load(atomics::memory_order_acquire) - 1) & m_nEpochBitmask; - } - - public: - retired_ptr_pool( unsigned int nEpochCount = 8 ) - : m_pBlockListHead( nullptr ) - , m_nEpochBitmask( static_cast(beans::ceil2(nEpochCount)) - 1 ) - , m_nCurEpoch(0) - , 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 ); - - allocNewBlock(); - } - - ~retired_ptr_pool() - { - block_allocator a; - block * p; - for ( block * pBlock = m_pBlockListHead.load(atomics::memory_order_relaxed); pBlock; pBlock = p ) { - p = pBlock->pNext.load( atomics::memory_order_relaxed ); - a.Delete( pBlock ); - } - - epoch_array_alloc().Delete( m_pEpochFree, m_nEpochBitmask + 1 ); - } - - /// Increments current epoch - void inc_epoch() CDS_NOEXCEPT - { - m_nCurEpoch.fetch_add( 1, atomics::memory_order_acq_rel ); - } - - /// Allocates the new retired pointer - retired_ptr_node& alloc() - { - unsigned int nEpoch; - item * pItem; - for (;;) { - pItem = m_pEpochFree[ nEpoch = current_epoch() ].load(atomics::memory_order_acquire); - if ( !pItem ) - goto retry; - if ( m_pEpochFree[nEpoch].compare_exchange_weak( pItem, - pItem->m_pNextFree.load(atomics::memory_order_acquire), - atomics::memory_order_acquire, atomics::memory_order_relaxed )) - { - goto success; - } - } - - // Epoch free list is empty - // Alloc from global free list - retry: - pItem = m_pGlobalFreeHead.load( atomics::memory_order_relaxed ); - do { - if ( !pItem ) { - allocNewBlock(); - goto retry; - } - // pItem is changed by compare_exchange_weak - } while ( !m_pGlobalFreeHead.compare_exchange_weak( pItem, - pItem->m_pNextFree.load(atomics::memory_order_acquire), - atomics::memory_order_acquire, atomics::memory_order_acquire )); - - success: - CDS_STRICT_DO( pItem->m_pNextFree.store( nullptr, atomics::memory_order_relaxed )); - return *pItem; - } - - /// Allocates and initializes new retired pointer - retired_ptr_node& alloc( const retired_ptr& p ) - { - retired_ptr_node& node = alloc(); - node.m_ptr = p; - return node; - } - - /// Places the list [pHead, pTail] of retired pointers to pool (frees retired pointers) - /** - The list is linked on the m_pNextFree field - */ - void free_range( retired_ptr_node * pHead, retired_ptr_node * pTail ) CDS_NOEXCEPT - { - assert( pHead != nullptr ); - assert( pTail != nullptr ); - - unsigned int nEpoch; - item * pCurHead; - do { - pCurHead = m_pEpochFree[nEpoch = next_epoch()].load(atomics::memory_order_acquire); - pTail->m_pNextFree.store( pCurHead, atomics::memory_order_release ); - } while ( !m_pEpochFree[nEpoch].compare_exchange_weak( pCurHead, pHead, atomics::memory_order_release, atomics::memory_order_relaxed )); - } - }; - } // namespace details - - /// Memory manager (Garbage collector) - class CDS_EXPORT_API GarbageCollector - { - private: - friend class ThreadGC; - - /// Internal GC statistics - struct internal_stat - { - atomics::atomic m_nGuardCount ; ///< Total guard count - atomics::atomic m_nFreeGuardCount ; ///< Count of free guard - - internal_stat() - : m_nGuardCount(0) - , m_nFreeGuardCount(0) - {} - }; - - public: - /// Exception "No GarbageCollector object is created" - class not_initialized : public std::runtime_error - { - public: - //@cond - not_initialized() - : std::runtime_error( "Global DHP GarbageCollector is not initialized" ) - {} - //@endcond - }; - - /// Internal GC statistics - struct InternalState - { - size_t m_nGuardCount ; ///< Total guard count - size_t m_nFreeGuardCount ; ///< Count of free guard - - //@cond - InternalState() - : m_nGuardCount(0) - , m_nFreeGuardCount(0) - {} - - InternalState& operator =( internal_stat const& s ) - { - m_nGuardCount = s.m_nGuardCount.load(atomics::memory_order_relaxed); - m_nFreeGuardCount = s.m_nFreeGuardCount.load(atomics::memory_order_relaxed); - - return *this; - } - //@endcond - }; - - private: - static GarbageCollector * m_pManager ; ///< GC global instance - - atomics::atomic m_nLiberateThreshold; ///< Max size of retired pointer buffer to call \p scan() - const size_t m_nInitialThreadGuardCount; ///< Initial count of guards allocated for ThreadGC - - details::guard_allocator<> m_GuardPool ; ///< Guard pool - details::retired_ptr_pool<> m_RetiredAllocator ; ///< Pool of free retired pointers - details::retired_ptr_buffer m_RetiredBuffer ; ///< Retired pointer buffer for liberating - - internal_stat m_stat ; ///< Internal statistics - bool m_bStatEnabled ; ///< Internal Statistics enabled - - public: - /// Initializes DHP memory manager singleton - /** - This member function creates and initializes DHP global object. - The function should be called before using CDS data structure based on cds::gc::DHP GC. Usually, - this member function is called in the \p main() function. See cds::gc::dhp for example. - After calling of this function you may use CDS data structures based on cds::gc::DHP. - - \par Parameters - - \p nLiberateThreshold - \p scan() threshold. When count of retired pointers reaches this value, - the \ref dhp_gc_liberate "scan()" member function would be called for freeing retired pointers. - If \p nLiberateThreshold <= 1, \p scan() would called after each \ref dhp_gc_retirePtr "retirePtr" call. - - \p nInitialThreadGuardCount - initial count of guard allocated for ThreadGC. When a thread - is initialized the GC allocates local guard pool for the thread from common guard pool. - 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, - i.e. the count of simultaneously working threads that remove the elements - of DHP-based concurrent data structure. Default value is 16. - */ - static void CDS_STDCALL Construct( - size_t nLiberateThreshold = 1024 - , size_t nInitialThreadGuardCount = 8 - , size_t nEpochCount = 16 - ); - - /// Destroys DHP memory manager - /** - The member function destroys DHP global object. After calling of this function you may \b NOT - use CDS data structures based on cds::gc::DHP. Usually, the \p Destruct function is called - at the end of your \p main(). See cds::gc::dhp for example. - */ - static void CDS_STDCALL Destruct(); - - /// Returns pointer to GarbageCollector instance - /** - If DHP GC is not initialized, \p not_initialized exception is thrown - */ - static GarbageCollector& instance() - { - if ( m_pManager == nullptr ) - throw not_initialized(); - return *m_pManager; - } - - /// Checks if global GC object is constructed and may be used - static bool isUsed() CDS_NOEXCEPT - { - return m_pManager != nullptr; - } - - public: - //@{ - /// Internal interface - - /// Allocates a guard - details::guard_data * allocGuard() - { - return m_GuardPool.alloc(); - } - - /// Frees guard \p g for reusing in future - void freeGuard(details::guard_data * pGuard ) - { - m_GuardPool.free( pGuard ); - } - - /// Allocates guard list for a thread. - details::guard_data* allocGuardList( size_t nCount ) - { - return m_GuardPool.allocList( nCount ); - } - - /// Frees thread's guard list pointed by \p pList - void freeGuardList( details::guard_data * pList ) - { - m_GuardPool.freeList( pList ); - } - - /// Places retired pointer \p and its deleter \p pFunc into thread's array of retired pointer for deferred reclamation - /**@anchor dhp_gc_retirePtr - */ - template - void retirePtr( T * p, void (* pFunc)(T *)) - { - retirePtr( retired_ptr( reinterpret_cast( p ), reinterpret_cast( pFunc ))); - } - - /// Places retired pointer \p into thread's array of retired pointer for deferred reclamation - void retirePtr( retired_ptr const& p ) - { - if ( m_RetiredBuffer.push( m_RetiredAllocator.alloc(p)) >= m_nLiberateThreshold.load(atomics::memory_order_relaxed)) - scan(); - } - - protected: - /// Liberate function - /** @anchor dhp_gc_liberate - The main function of Dynamic Hazard Pointer algorithm. It tries to free retired pointers if they are not - trapped by any guard. - */ - void scan(); - //@} - - public: - /// Get internal statistics - InternalState& getInternalState(InternalState& stat) const - { - return stat = m_stat; - } - - /// Checks if internal statistics enabled - bool isStatisticsEnabled() const - { - return m_bStatEnabled; - } - - /// Enables/disables internal statistics - bool enableStatistics( bool bEnable ) - { - bool bEnabled = m_bStatEnabled; - m_bStatEnabled = bEnable; - return bEnabled; - } - - private: - GarbageCollector( size_t nLiberateThreshold, size_t nInitialThreadGuardCount, size_t nEpochCount ); - ~GarbageCollector(); - }; - - /// Thread GC - /** - To use Dynamic Hazard Pointer reclamation schema each thread object must be linked with the object of ThreadGC class - that interacts with GarbageCollector global object. The linkage is performed by calling \ref cds_threading "cds::threading::Manager::attachThread()" - on the start of each thread that uses DHP GC. Before terminating the thread linked to DHP GC it is necessary to call - \ref cds_threading "cds::threading::Manager::detachThread()". - - The ThreadGC object maintains two list: - \li Thread guard list: the list of thread-local guards (linked by \p pThreadNext field) - \li Free guard list: the list of thread-local free guards (linked by \p pNextFree field) - Free guard list is a subset of thread guard list. - */ - class ThreadGC - { - GarbageCollector& m_gc; ///< reference to GC singleton - details::guard_data * m_pList; ///< Local list of guards owned by the thread - details::guard_data * m_pFree; ///< The list of free guard from m_pList - - public: - /// Default constructor - ThreadGC() - : m_gc( GarbageCollector::instance()) - , m_pList( nullptr ) - , m_pFree( nullptr ) - {} - - /// The object is not copy-constructible - ThreadGC( ThreadGC const& ) = delete; - - /// Dtor calls fini() - ~ThreadGC() - { - fini(); - } - - /// Initialization. Repeat call is available - void init() - { - if ( !m_pList ) { - m_pList = - m_pFree = m_gc.allocGuardList( m_gc.m_nInitialThreadGuardCount ); - } - } - - /// Finalization. Repeat call is available - void fini() - { - if ( m_pList ) { - m_gc.freeGuardList( m_pList ); - m_pList = - m_pFree = nullptr; - } - } - - public: - /// Allocates new guard - dhp::details::guard_data* allocGuard() - { - assert( m_pList != nullptr ); - - dhp::details::guard_data* ret; - if ( cds_likely( m_pFree )) { - ret = m_pFree; - m_pFree = m_pFree->pNextFree.load( atomics::memory_order_relaxed ); - } - else { - ret = m_gc.allocGuard(); - ret->pThreadNext = m_pList; - m_pList = ret; - } - return ret; - } - - /// Frees guard \p g - void freeGuard( dhp::details::guard_data* g ) - { - assert( m_pList != nullptr ); - if ( cds_likely( g )) { - g->pPost.store( nullptr, atomics::memory_order_relaxed ); - g->pNextFree.store( m_pFree, atomics::memory_order_relaxed ); - m_pFree = g; - } - } - - /// Guard array - template - using guard_array = dhp::details::guard_data* [Count]; - - /// Initializes guard array \p arr - template - void allocGuard( guard_array& arr ) - { - assert( m_pList != nullptr ); - size_t nCount = 0; - - while ( m_pFree && nCount < Count ) { - arr[nCount] = m_pFree; - m_pFree = m_pFree->pNextFree.load(atomics::memory_order_relaxed); - ++nCount; - } - - while ( nCount < Count ) { - dhp::details::guard_data*& g = arr[nCount]; - g = m_gc.allocGuard(); - g->pThreadNext = m_pList; - m_pList = g; - ++nCount; - } - } - - /// Frees guard array \p arr - template - void freeGuard( guard_array& arr ) - { - assert( m_pList != nullptr ); - - details::guard_data* first = nullptr; - details::guard_data* last; - for ( size_t i = 0; i < Count; ++i ) { - details::guard_data* guard = arr[i]; - if ( cds_likely( guard )) { - guard->pPost.store( nullptr, atomics::memory_order_relaxed ); - if ( first ) - last->pNextFree.store( guard, atomics::memory_order_relaxed ); - else - first = guard; - last = guard; - } - } - if ( first ) { - last->pNextFree.store( m_pFree, atomics::memory_order_relaxed ); - m_pFree = first; - } - } - - /// Places retired pointer \p and its deleter \p pFunc into list of retired pointer for deferred reclamation - template - void retirePtr( T * p, void (* pFunc)(T *)) - { - m_gc.retirePtr( p, pFunc ); - } - - /// Run retiring cycle - void scan() - { - m_gc.scan(); - } - }; - } // namespace dhp -}} // namespace cds::gc -//@endcond - -#if CDS_COMPILER == CDS_COMPILER_MSVC -# pragma warning(pop) -#endif - -#endif // #ifndef CDSLIB_GC_DETAILS_DHP_H diff --git a/cds/gc/details/hp.h b/cds/gc/details/hp.h deleted file mode 100644 index 83a8bc5c..00000000 --- a/cds/gc/details/hp.h +++ /dev/null @@ -1,686 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_DETAILS_HP_H -#define CDSLIB_GC_DETAILS_HP_H - -#include -#include -#include -#include - -#include -#include - -#if CDS_COMPILER == CDS_COMPILER_MSVC -# pragma warning(push) - // warning C4251: 'cds::gc::hp::GarbageCollector::m_pListHead' : class 'cds::cxx11_atomic::atomic' - // needs to have dll-interface to be used by clients of class 'cds::gc::hp::GarbageCollector' -# pragma warning(disable: 4251) -#endif - -/* - Editions: - 2007.12.24 khizmax Add statistics and CDS_GATHER_HAZARDPTR_STAT macro - 2008.03.06 khizmax Refactoring: implementation of HazardPtrMgr is moved to hazardptr.cpp - 2008.03.08 khizmax Remove HazardPtrMgr singleton. Now you must initialize/destroy HazardPtrMgr calling - HazardPtrMgr::Construct / HazardPtrMgr::Destruct before use (usually in main() function). - 2008.12.06 khizmax Refactoring. Changes class name, namespace hierarchy, all helper defs have been moved to details namespace - 2010.01.27 khizmax Introducing memory order constraint -*/ - -//@cond -namespace cds { - /// Different safe memory reclamation schemas (garbage collectors) - /** @ingroup cds_garbage_collector - - This namespace specifies different safe memory reclamation (SMR) algorithms. - See \ref cds_garbage_collector "Garbage collectors" - */ - namespace gc { - - /// Michael's Hazard Pointers reclamation schema - /** - \par Sources: - - [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes" - - [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects" - - [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers" - - The \p cds::gc::hp namespace and its members are internal representation of Hazard Pointer GC and should not be used directly. - Use \p cds::gc::HP class in your code. - - Hazard Pointer garbage collector is a singleton. The main user-level part of Hazard Pointer schema is - GC class and its nested classes. Before use any HP-related class you must initialize HP garbage collector - by contructing \p cds::gc::HP object in beginning of your \p main(). - See \p cds::gc::HP class for explanation. - */ - namespace hp { - - // forwards - class GarbageCollector; - class ThreadGC; - - namespace details { - - /// Retired pointer - typedef cds::gc::details::retired_ptr retired_ptr; - - /// Array of retired pointers - /** - The vector of retired pointer ready to delete. - - The Hazard Pointer schema is build on thread-static arrays. For each HP-enabled thread the HP manager allocates - array of retired pointers. The array belongs to the thread: owner thread writes to the array, other threads - just read it. - */ - class retired_vector { - /// Underlying vector implementation - typedef cds::details::bounded_array retired_vector_impl; - - retired_vector_impl m_arr ; ///< the array of retired pointers - size_t m_nSize ; ///< Current size of \p m_arr - - public: - /// Iterator - typedef retired_vector_impl::iterator iterator; - - /// Constructor - explicit retired_vector( const cds::gc::hp::GarbageCollector& HzpMgr ); // inline - ~retired_vector() - {} - - /// Vector capacity. - /** - The capacity is constant for any thread. It is defined by cds::gc::hp::GarbageCollector. - */ - size_t capacity() const CDS_NOEXCEPT - { - return m_arr.capacity(); - } - - /// Current vector size (count of retired pointers in the vector) - size_t size() const CDS_NOEXCEPT - { - return m_nSize; - } - - /// Set vector size. Uses internally - void size( size_t nSize ) - { - assert( nSize <= capacity()); - m_nSize = nSize; - } - - /// Pushes retired pointer to the vector - void push( retired_ptr const& p ) - { - assert( m_nSize < capacity()); - m_arr[ m_nSize ] = p; - ++m_nSize; - } - - /// Checks if the vector is full (size() == capacity()) - bool isFull() const CDS_NOEXCEPT - { - return m_nSize >= capacity(); - } - - /// Begin iterator - iterator begin() CDS_NOEXCEPT - { - return m_arr.begin(); - } - - /// End iterator - iterator end() CDS_NOEXCEPT - { - return m_arr.begin() + m_nSize; - } - - /// Clears the vector. After clearing, size() == 0 - void clear() CDS_NOEXCEPT - { - m_nSize = 0; - } - }; - - /// Hazard pointer record of the thread - /** - The structure of type "single writer - multiple reader": only the owner thread may write to this structure - other threads have read-only access. - */ - struct hp_record { - hp_allocator<> m_hzp; ///< array of hazard pointers. Implicit \ref CDS_DEFAULT_ALLOCATOR dependency - retired_vector m_arrRetired ; ///< Retired pointer array - - char padding[cds::c_nCacheLineSize]; - atomics::atomic m_nSync; ///< dummy var to introduce synchronizes-with relationship between threads - char padding2[cds::c_nCacheLineSize]; - - /// Ctor - explicit hp_record( const cds::gc::hp::GarbageCollector& HzpMgr ); // inline - ~hp_record() - {} - - /// Clears all hazard pointers - void clear() - { - m_hzp.clear(); - } - - void sync() - { - m_nSync.fetch_add( 1, atomics::memory_order_acq_rel ); - } - }; - } // namespace details - - /// GarbageCollector::Scan phase strategy - /** - See GarbageCollector::Scan for explanation - */ - enum scan_type { - classic, ///< classic scan as described in Michael's works (see GarbageCollector::classic_scan) - inplace ///< inplace scan without allocation (see GarbageCollector::inplace_scan) - }; - - /// Hazard Pointer singleton - /** - Safe memory reclamation schema by Michael "Hazard Pointers" - - \par Sources: - \li [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes" - \li [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects" - \li [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers" - - */ - class CDS_EXPORT_API GarbageCollector - { - public: - typedef cds::atomicity::event_counter event_counter ; ///< event counter type - - /// Internal GC statistics - struct InternalState { - size_t nHPCount ; ///< HP count per thread (const) - size_t nMaxThreadCount ; ///< Max thread count (const) - size_t nMaxRetiredPtrCount ; ///< Max retired pointer count per thread (const) - size_t nHPRecSize ; ///< Size of HP record, bytes (const) - - size_t nHPRecAllocated ; ///< Count of HP record allocations - size_t nHPRecUsed ; ///< Count of HP record used - size_t nTotalRetiredPtrCount ; ///< Current total count of retired pointers - size_t nRetiredPtrInFreeHPRecs ; ///< Count of retired pointer in free (unused) HP records - - event_counter::value_type evcAllocHPRec ; ///< Count of \p hp_record allocations - event_counter::value_type evcRetireHPRec ; ///< Count of \p hp_record retire events - event_counter::value_type evcAllocNewHPRec; ///< Count of new \p hp_record allocations from heap - event_counter::value_type evcDeleteHPRec ; ///< Count of \p hp_record deletions - - event_counter::value_type evcScanCall ; ///< Count of Scan calling - event_counter::value_type evcHelpScanCall ; ///< Count of HelpScan calling - event_counter::value_type evcScanFromHelpScan;///< Count of Scan calls from HelpScan - - event_counter::value_type evcDeletedNode ; ///< Count of deleting of retired objects - event_counter::value_type evcDeferredNode ; ///< Count of objects that cannot be deleted in Scan phase because of a hazard_pointer guards it - }; - - /// No GarbageCollector object is created - class not_initialized : public std::runtime_error - { - public: - //@cond - not_initialized() - : std::runtime_error( "Global Hazard Pointer GarbageCollector is not initialized" ) - {} - //@endcond - }; - - /// Not enough Hazard Pointer - class too_many_hazard_ptr : public std::length_error - { - public: - //@cond - too_many_hazard_ptr() - : std::length_error( "Not enough Hazard Pointer" ) - {} - //@endcond - }; - - private: - /// Internal GC statistics - struct Statistics { - event_counter m_AllocHPRec ; ///< Count of \p hp_record allocations - event_counter m_RetireHPRec ; ///< Count of \p hp_record retire events - event_counter m_AllocNewHPRec ; ///< Count of new \p hp_record allocations from heap - event_counter m_DeleteHPRec ; ///< Count of \p hp_record deletions - - event_counter m_ScanCallCount ; ///< Count of Scan calling - event_counter m_HelpScanCallCount ; ///< Count of HelpScan calling - event_counter m_CallScanFromHelpScan ; ///< Count of Scan calls from HelpScan - - event_counter m_DeletedNode ; ///< Count of retired objects deleting - event_counter m_DeferredNode ; ///< Count of objects that cannot be deleted in Scan phase because of a hazard_pointer guards it - }; - - /// Internal list of cds::gc::hp::details::hp_record - struct hplist_node : public details::hp_record - { - atomics::atomic m_pNextNode; ///< next hazard ptr record in list - atomics::atomic m_idOwner; ///< Owner thread id; 0 - the record is free (not owned) - atomics::atomic m_bFree; ///< true if record is free (not owned) - - //@cond - explicit hplist_node( const GarbageCollector& HzpMgr ) - : hp_record( HzpMgr ), - m_pNextNode( nullptr ), - m_idOwner( OS::c_NullThreadId ), - m_bFree( true ) - {} - - hplist_node( const GarbageCollector& HzpMgr, OS::ThreadId owner ) - : hp_record( HzpMgr ), - m_pNextNode( nullptr ), - m_idOwner( owner ), - m_bFree( false ) - {} - - ~hplist_node() - { - assert( m_idOwner.load( atomics::memory_order_relaxed ) == OS::c_NullThreadId ); - assert( m_bFree.load(atomics::memory_order_relaxed)); - } - //@endcond - }; - - atomics::atomic m_pListHead ; ///< Head of GC list - - static GarbageCollector * m_pHZPManager ; ///< GC instance pointer - - Statistics m_Stat ; ///< Internal statistics - bool m_bStatEnabled ; ///< true - statistics enabled - - const size_t m_nHazardPointerCount ; ///< max count of thread's hazard pointer - const size_t m_nMaxThreadCount ; ///< max count of thread - const size_t m_nMaxRetiredPtrCount ; ///< max count of retired ptr per thread - scan_type m_nScanType ; ///< scan type (see \ref scan_type enum) - - - private: - /// Ctor - GarbageCollector( - size_t nHazardPtrCount = 0, ///< Hazard pointer count per thread - size_t nMaxThreadCount = 0, ///< Max count of thread - size_t nMaxRetiredPtrCount = 0, ///< Capacity of the array of retired objects - scan_type nScanType = inplace ///< Scan type (see \ref scan_type enum) - ); - - /// Dtor - ~GarbageCollector(); - - /// Allocate new HP record - hplist_node * NewHPRec( OS::ThreadId owner ); - - /// Permanently deletes HPrecord \p pNode - /** - Caveat: for performance reason this function is defined as inline and cannot be called directly - */ - void DeleteHPRec( hplist_node * pNode ); - - void detachAllThread(); - - public: - /// Creates GarbageCollector singleton - /** - GC is the singleton. If GC instance is not exist then the function creates the instance. - Otherwise it does nothing. - - The Michael's HP reclamation schema depends of three parameters: - - \p nHazardPtrCount - HP pointer count per thread. Usually it is small number (2-4) depending from - the data structure algorithms. By default, if \p nHazardPtrCount = 0, - the function uses maximum of HP count for CDS library. - - \p nMaxThreadCount - max count of thread with using HP GC in your application. Default is 100. - - \p nMaxRetiredPtrCount - capacity of array of retired pointers for each thread. Must be greater than - \p nHazardPtrCount * \p nMaxThreadCount. - Default is 2 * \p nHazardPtrCount * \p nMaxThreadCount. - */ - static void CDS_STDCALL Construct( - size_t nHazardPtrCount = 0, ///< Hazard pointer count per thread - size_t nMaxThreadCount = 0, ///< Max count of simultaneous working thread in your application - size_t nMaxRetiredPtrCount = 0, ///< Capacity of the array of retired objects for the thread - scan_type nScanType = inplace ///< Scan type (see \ref scan_type enum) - ); - - /// Destroys global instance of GarbageCollector - /** - The parameter \p bDetachAll should be used carefully: if its value is \p true, - then the destroying GC automatically detaches all attached threads. This feature - can be useful when you have no control over the thread termination, for example, - when \p libcds is injected into existing external thread. - */ - static void CDS_STDCALL Destruct( - bool bDetachAll = false ///< Detach all threads - ); - - /// Returns pointer to GarbageCollector instance - static GarbageCollector& instance() - { - if ( !m_pHZPManager ) - throw not_initialized(); - return *m_pHZPManager; - } - - /// Checks if global GC object is constructed and may be used - static bool isUsed() CDS_NOEXCEPT - { - return m_pHZPManager != nullptr; - } - - /// Returns max Hazard Pointer count defined in construction time - size_t getHazardPointerCount() const CDS_NOEXCEPT - { - return m_nHazardPointerCount; - } - - /// Returns max thread count defined in construction time - size_t getMaxThreadCount() const CDS_NOEXCEPT - { - return m_nMaxThreadCount; - } - - /// Returns max size of retired objects array. It is defined in construction time - size_t getMaxRetiredPtrCount() const CDS_NOEXCEPT - { - return m_nMaxRetiredPtrCount; - } - - // Internal statistics - - /// Get internal statistics - InternalState& getInternalState(InternalState& stat) const; - - /// Checks if internal statistics enabled - bool isStatisticsEnabled() const { return m_bStatEnabled; } - - /// Enables/disables internal statistics - bool enableStatistics( bool bEnable ) - { - bool bEnabled = m_bStatEnabled; - m_bStatEnabled = bEnable; - return bEnabled; - } - - /// Checks that required hazard pointer count \p nRequiredCount is less or equal then max hazard pointer count - /** - If \p nRequiredCount > getHazardPointerCount() then the exception \p too_many_hazard_ptr is thrown - */ - static void checkHPCount( unsigned int nRequiredCount ) - { - if ( instance().getHazardPointerCount() < nRequiredCount ) - throw too_many_hazard_ptr(); - } - - /// Get current scan strategy - scan_type getScanType() const - { - return m_nScanType; - } - - /// Set current scan strategy - /** @anchor hzp_gc_setScanType - Scan strategy changing is allowed on the fly. - */ - void setScanType( - scan_type nScanType ///< new scan strategy - ) - { - m_nScanType = nScanType; - } - - public: // Internals for threads - - /// Allocates Hazard Pointer GC record. For internal use only - details::hp_record* alloc_hp_record(); - - /// Free HP record. For internal use only - void free_hp_record( details::hp_record* pRec ); - - /// The main garbage collecting function - /** - This function is called internally by ThreadGC object when upper bound of thread's list of reclaimed pointers - is reached. - - There are the following scan algorithm: - - \ref hzp_gc_classic_scan "classic_scan" allocates memory for internal use - - \ref hzp_gc_inplace_scan "inplace_scan" does not allocate any memory - - Use \ref hzp_gc_setScanType "setScanType" member function to setup appropriate scan algorithm. - */ - void Scan( details::hp_record * pRec ) - { - switch ( m_nScanType ) { - case inplace: - inplace_scan( pRec ); - break; - default: - assert(false) ; // Forgotten something?.. - case classic: - classic_scan( pRec ); - break; - } - } - - /// Helper scan routine - /** - The function guarantees that every node that is eligible for reuse is eventually freed, barring - thread failures. To do so, after executing Scan, a thread executes a HelpScan, - where it checks every HP record. If an HP record is inactive, the thread moves all "lost" reclaimed pointers - to thread's list of reclaimed pointers. - - The function is called internally by Scan. - */ - void HelpScan( details::hp_record * pThis ); - - protected: - /// Classic scan algorithm - /** @anchor hzp_gc_classic_scan - Classical scan algorithm as described in Michael's paper. - - A scan includes four stages. The first stage involves scanning the array HP for non-null values. - Whenever a non-null value is encountered, it is inserted in a local list of currently protected pointer. - Only stage 1 accesses shared variables. The following stages operate only on private variables. - - The second stage of a scan involves sorting local list of protected pointers to allow - binary search in the third stage. - - The third stage of a scan involves checking each reclaimed node - against the pointers in local list of protected pointers. If the binary search yields - no match, the node is freed. Otherwise, it cannot be deleted now and must kept in thread's list - of reclaimed pointers. - - The forth stage prepares new thread's private list of reclaimed pointers - that could not be freed during the current scan, where they remain until the next scan. - - This algorithm allocates memory for internal HP array. - - This function is called internally by ThreadGC object when upper bound of thread's list of reclaimed pointers - is reached. - */ - void classic_scan( details::hp_record * pRec ); - - /// In-place scan algorithm - /** @anchor hzp_gc_inplace_scan - Unlike the \ref hzp_gc_classic_scan "classic_scan" algorithm, \p inplace_scan does not allocate any memory. - All operations are performed in-place. - */ - void inplace_scan( details::hp_record * pRec ); - }; - - /// Thread's hazard pointer manager - /** - To use Hazard Pointer reclamation schema each thread object must be linked with the object of ThreadGC class - that interacts with GarbageCollector global object. The linkage is performed by calling \ref cds_threading "cds::threading::Manager::attachThread()" - on the start of each thread that uses HP GC. Before terminating the thread linked to HP GC it is necessary to call - \ref cds_threading "cds::threading::Manager::detachThread()". - */ - class ThreadGC - { - GarbageCollector& m_HzpManager; ///< Hazard Pointer GC singleton - details::hp_record* m_pHzpRec; ///< Pointer to thread's HZP record - - public: - /// Default constructor - ThreadGC() - : m_HzpManager( GarbageCollector::instance()), - m_pHzpRec( nullptr ) - {} - - /// The object is not copy-constructible - ThreadGC( ThreadGC const& ) = delete; - - ~ThreadGC() - { - fini(); - } - - /// Checks if thread GC is initialized - bool isInitialized() const { return m_pHzpRec != nullptr; } - - /// Initialization. Repeat call is available - void init() - { - if ( !m_pHzpRec ) - m_pHzpRec = m_HzpManager.alloc_hp_record(); - } - - /// Finalization. Repeat call is available - void fini() - { - if ( m_pHzpRec ) { - details::hp_record* pRec = m_pHzpRec; - m_pHzpRec = nullptr; - m_HzpManager.free_hp_record( pRec ); - } - } - - /// Initializes HP guard \p guard - details::hp_guard* allocGuard() - { - assert( m_pHzpRec ); - return m_pHzpRec->m_hzp.alloc(); - } - - /// Frees HP guard \p guard - void freeGuard( details::hp_guard* guard ) - { - assert( m_pHzpRec ); - m_pHzpRec->m_hzp.free( guard ); - } - - /// Initializes HP guard array \p arr - template - size_t allocGuard( details::hp_array& arr ) - { - assert( m_pHzpRec ); - return m_pHzpRec->m_hzp.alloc( arr ); - } - - /// Frees HP guard array \p arr - template - void freeGuard( details::hp_array& arr ) - { - assert( m_pHzpRec ); - m_pHzpRec->m_hzp.free( arr ); - } - - /// Places retired pointer \p and its deleter \p pFunc into thread's array of retired pointer for deferred reclamation - template - void retirePtr( T * p, void (* pFunc)(T *)) - { - retirePtr( details::retired_ptr( reinterpret_cast( p ), reinterpret_cast( pFunc ))); - } - - /// Places retired pointer \p into thread's array of retired pointer for deferred reclamation - void retirePtr( details::retired_ptr const& p ) - { - m_pHzpRec->m_arrRetired.push( p ); - - if ( m_pHzpRec->m_arrRetired.isFull()) { - // Max of retired pointer count is reached. Do scan - scan(); - } - } - - /// Run retiring scan cycle - void scan() - { - m_HzpManager.Scan( m_pHzpRec ); - m_HzpManager.HelpScan( m_pHzpRec ); - } - - void sync() - { - assert( m_pHzpRec != nullptr ); - m_pHzpRec->sync(); - } - }; - - } // namespace hp -}} // namespace cds::gc -//@endcond - -//@cond -// Inlines -namespace cds { - namespace gc { namespace hp { namespace details { - - inline retired_vector::retired_vector( const cds::gc::hp::GarbageCollector& HzpMgr ) - : m_arr( HzpMgr.getMaxRetiredPtrCount()), - m_nSize(0) - {} - - inline hp_record::hp_record( const cds::gc::hp::GarbageCollector& HzpMgr ) - : m_hzp( HzpMgr.getHazardPointerCount()) - , m_arrRetired( HzpMgr ) - , m_nSync( 0 ) - {} - - }}} // namespace gc::hp::details -} // namespace cds -//@endcond - - -#if CDS_COMPILER == CDS_COMPILER_MSVC -# pragma warning(pop) -#endif - -#endif // #ifndef CDSLIB_GC_DETAILS_HP_H diff --git a/cds/gc/details/hp_alloc.h b/cds/gc/details/hp_alloc.h deleted file mode 100644 index 6ad47ca4..00000000 --- a/cds/gc/details/hp_alloc.h +++ /dev/null @@ -1,373 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_DETAILS_HP_ALLOC_H -#define CDSLIB_GC_DETAILS_HP_ALLOC_H - -#include -#include -#include -#include // memset - -//@cond -namespace cds { - namespace gc { namespace hp { - // forwards - class GarbageCollector; - class ThreadGC; - - /// Hazard Pointer schema implementation details - namespace details { - - /// Hazard pointer guard - /** - It is unsafe to use this class directly. - Instead, the \p hp::guard class should be used. - */ - class hp_guard : protected atomics::atomic < hazard_pointer > - { - template friend class hp_allocator; - - public: - typedef hazard_pointer hazard_ptr;///< Hazard pointer type - - private: - typedef atomics::atomic atomic_hazard_ptr; - - atomic_hazard_ptr m_hp; - hp_guard* m_next; // next free guard - - public: - hp_guard() CDS_NOEXCEPT - : m_hp( nullptr ) - , m_next( nullptr ) - {} - - ~hp_guard() CDS_NOEXCEPT - {} - - /// Sets HP value. Guards pointer \p p from reclamation. - /** - Storing has release semantics. - */ - template - T * operator =(T * p) CDS_NOEXCEPT - { - // We use atomic store with explicit memory order because other threads may read this hazard pointer concurrently - set( p ); - return p; - } - - std::nullptr_t operator=(std::nullptr_t) CDS_NOEXCEPT - { - clear(); - return nullptr; - } - - /// Returns current value of hazard pointer - /** - Loading has acquire semantics - */ - hazard_ptr get( atomics::memory_order order = atomics::memory_order_acquire ) const CDS_NOEXCEPT - { - return m_hp.load( order ); - } - - template - void set( T * p, atomics::memory_order order = atomics::memory_order_release ) CDS_NOEXCEPT - { - m_hp.store( reinterpret_cast(p), order ); - } - - /// Clears HP - /** - Clearing has relaxed semantics. - */ - void clear( atomics::memory_order order = atomics::memory_order_release ) CDS_NOEXCEPT - { - // memory order is not necessary here - m_hp.store( nullptr, order ); - } - }; - - /// Array of hazard pointers. - /** - Array of hazard-pointer. Placing a pointer into this array guards the pointer against reclamation. - Template parameter \p Count defines the size of hazard pointer array. \p Count parameter should not exceed - GarbageCollector::getHazardPointerCount(). - - It is unsafe to use this class directly. Instead, the \p hp::array should be used. - - While creating the object of \p hp_array class an array of size \p Count of hazard pointers is reserved by - the HP Manager of current thread. The object's destructor cleans all of reserved hazard pointer and - returns reserved HP to the HP pool of ThreadGC. - - Usually, it is not necessary to create an object of this class. The object of class ThreadGC contains - the \p hp_array object and implements interface for HP setting and freeing. - - Template parameter: - \li Count - capacity of array - */ - template - class hp_array - { - template friend class hp_allocator; - - public: - typedef hazard_pointer hazard_ptr; ///< Hazard pointer type - static CDS_CONSTEXPR const size_t c_nCapacity = Count ; ///< Capacity of the array - - public: - /// Constructs uninitialized array. - hp_array() CDS_NOEXCEPT - { - memset( m_arr, 0, sizeof( m_arr )); - } - - /// Destructs object - ~hp_array() CDS_NOEXCEPT - {} - - /// Returns max count of hazard pointer for this array - CDS_CONSTEXPR size_t capacity() const - { - return c_nCapacity; - } - - /// Set hazard pointer \p nIndex. 0 <= \p nIndex < \p Count - void set( size_t nIndex, hazard_ptr hptr ) CDS_NOEXCEPT - { - assert( nIndex < capacity()); - assert( m_arr[nIndex] != nullptr ); - - *m_arr[nIndex] = hptr; - } - - /// Returns pointer to hazard pointer of index \p nIndex (0 <= \p nIndex < \p Count) - hp_guard* operator []( size_t nIndex ) CDS_NOEXCEPT - { - assert( nIndex < capacity()); - return m_arr[nIndex]; - } - - /// Returns pointer to hazard pointer of index \p nIndex (0 <= \p nIndex < \p Count) [const version] - hp_guard* operator []( size_t nIndex ) const CDS_NOEXCEPT - { - assert( nIndex < capacity()); - return m_arr[nIndex]; - } - - /// Clears (sets to \p nullptr) hazard pointer \p nIndex - void clear( size_t nIndex ) CDS_NOEXCEPT - { - assert( nIndex < capacity()); - assert( m_arr[nIndex] != nullptr ); - - m_arr[ nIndex ]->clear(); - } - - hp_guard* release( size_t nIndex ) CDS_NOEXCEPT - { - assert( nIndex < capacity()); - - hp_guard* p = m_arr[ nIndex ]; - m_arr[ nIndex ] = nullptr; - return p; - } - - - private: - hp_guard* m_arr[c_nCapacity]; ///< Hazard pointer array of size = \p Count - }; - - /// Allocator of hazard pointers for the thread - /** - The hazard pointer array is the free-list of unused hazard pointer for the thread. - The array is managed as a stack. - The max size (capacity) of array is defined at ctor time and cannot be changed during object's lifetime - - Each allocator object is thread-private. - - Template parameters: - \li Allocator - memory allocator class, default is \ref CDS_DEFAULT_ALLOCATOR - - This helper class should not be used directly. - */ - template - class hp_allocator - { - public: - typedef hazard_pointer hazard_ptr; ///< type of hazard pointer - typedef Allocator allocator_type; ///< allocator type - - private: - typedef cds::details::Allocator< hp_guard, allocator_type > allocator_impl; - - hp_guard* m_arrHazardPtr; ///< Array of hazard pointers - hp_guard* m_FreeListHead; ///< List of free hp guards - size_t const m_nCapacity; ///< Array capacity - - public: - /// Default ctor - explicit hp_allocator( - size_t nCapacity ///< max count of hazard pointer per thread - ) - : m_arrHazardPtr( alloc_array( nCapacity )) - , m_FreeListHead( m_arrHazardPtr ) - , m_nCapacity( nCapacity ) - { - build_free_list(); - } - - /// Dtor - ~hp_allocator() - { - allocator_impl().Delete( m_arrHazardPtr, capacity()); - } - - /// Get capacity of array - size_t capacity() const CDS_NOEXCEPT - { - return m_nCapacity; - } - - /// Get size of array. The size is equal to the capacity of array - size_t size() const CDS_NOEXCEPT - { - return capacity(); - } - - /// Checks if all items are allocated - bool full() const CDS_NOEXCEPT - { - return m_FreeListHead == nullptr; - } - - /// Allocates hazard pointer - hp_guard* alloc() - { - assert( !full()); - - hp_guard* p = m_FreeListHead; - m_FreeListHead = m_FreeListHead->m_next; - return p; - } - - /// Frees previously allocated hazard pointer - void free( hp_guard* hp ) CDS_NOEXCEPT - { - if ( hp ) { - hp->clear(); - hp->m_next = m_FreeListHead; - m_FreeListHead = hp; - } - } - - /// Allocates hazard pointers array - /** - Allocates \p Count hazard pointers from array \p m_arrHazardPtr - Initializes \p arr with hazard pointers. - - @return actual size of allocated array. - */ - template - size_t alloc( hp_array& arr ) - { - size_t i; - hp_guard* p = m_FreeListHead; - for ( i = 0; i < Count && p; ++i ) { - arr.m_arr[i] = p; - p = p->m_next; - } - size_t ret = i; - for ( ; i < Count; ++i ) - arr.m_arr[i] = nullptr; - m_FreeListHead = p; - return ret; - } - - /// Frees hazard pointer array - /** - Frees the array of hazard pointers allocated by previous call \p this->alloc. - */ - template - void free( hp_array const& arr ) CDS_NOEXCEPT - { - hp_guard* pList = m_FreeListHead; - for ( size_t i = 0; i < Count; ++i ) { - hp_guard* p = arr[i]; - if ( p ) { - p->clear(); - p->m_next = pList; - pList = p; - } - } - m_FreeListHead = pList; - } - - /// Makes all HP free - void clear() CDS_NOEXCEPT - { - for ( size_t i = 0; i < capacity(); ++i ) - m_arrHazardPtr[i].clear(); - } - - /// Returns i-th hazard pointer - hp_guard& operator []( size_t i ) CDS_NOEXCEPT - { - assert( i < capacity()); - return m_arrHazardPtr[i]; - } - - private: - hp_guard* alloc_array( size_t nCapacity ) - { - return allocator_impl().NewArray( nCapacity ); - } - - void build_free_list() - { - hp_guard* first = m_arrHazardPtr; - hp_guard* last = m_arrHazardPtr + capacity(); - hp_guard* prev = first; - for ( ++first; first < last; ++first ) { - prev->m_next = first; - prev = first; - } - prev->m_next = nullptr; - m_FreeListHead = m_arrHazardPtr; - } - }; - - }}} // namespace gc::hp::details -} // namespace cds -//@endcond - -#endif // #ifndef CDSLIB_GC_DETAILS_HP_ALLOC_H diff --git a/cds/gc/details/hp_common.h b/cds/gc/details/hp_common.h new file mode 100644 index 00000000..be180677 --- /dev/null +++ b/cds/gc/details/hp_common.h @@ -0,0 +1,184 @@ +/* + This file is a part of libcds - Concurrent Data Structures library + + (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/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef CDSLIB_GC_DETAILS_HP_COMMON_H +#define CDSLIB_GC_DETAILS_HP_COMMON_H + +#include +#include + +#ifdef CDS_ENABLE_HPSTAT +# define CDS_HPSTAT( expr ) expr +#else +# define CDS_HPSTAT( expr ) +#endif + +//@cond +namespace cds { namespace gc { namespace hp { namespace common { + + /// Hazard pointer type + typedef void* hazard_ptr; + + /// Retired pointer + using cds::gc::details::retired_ptr; + using cds::gc::make_retired_ptr; + + /// Hazard pointer guard + class guard + { + public: + guard() noexcept + : hp_( nullptr ) + , next_( nullptr ) + {} + + template + T* operator=( T* ptr ) noexcept + { + set( ptr ); + return ptr; + } + + std::nullptr_t operator=( std::nullptr_t ) noexcept + { + clear(); + return nullptr; + } + + hazard_ptr get() const noexcept + { + return hp_.load( atomics::memory_order_acquire ); + } + + hazard_ptr get( atomics::memory_order order ) const noexcept + { + return hp_.load( order ); + } + + template + T* get_as() const noexcept + { + return reinterpret_cast( get() ); + } + + template + void set( T* ptr ) noexcept + { + hp_.store( reinterpret_cast( ptr ), atomics::memory_order_release ); + } + + void clear( atomics::memory_order order ) noexcept + { + hp_.store( nullptr, order ); + } + + void clear() noexcept + { + clear( atomics::memory_order_release ); + } + + private: + atomics::atomic hp_; + + public: + guard* next_; // free guard list + }; + + /// Array of guards + template + class guard_array + { + public: + static size_t const c_nCapacity = Capacity; + + public: + guard_array() + : arr_{ nullptr } + {} + + static constexpr size_t capacity() + { + return c_nCapacity; + } + + guard* operator[]( size_t idx ) const noexcept + { + assert( idx < capacity() ); + return arr_[idx]; + } + + template + void set( size_t idx, T* ptr ) noexcept + { + assert( idx < capacity()); + assert( arr_[idx] != nullptr ); + + arr_[idx]->set( ptr ); + } + + void clear( size_t idx ) noexcept + { + assert( idx < capacity() ); + assert( arr_[idx] != nullptr ); + + arr_[idx]->clear(); + } + + guard* release( size_t idx ) noexcept + { + assert( idx < capacity() ); + + guard* g = arr_[idx]; + arr_[idx] = nullptr; + return g; + } + + void reset( size_t idx, guard* g ) noexcept + { + assert( idx < capacity() ); + assert( arr_[idx] == nullptr ); + + arr_[idx] = g; + } + + private: + guard* arr_[c_nCapacity]; + }; + + + /// Retired pointer disposer + typedef void ( *disposer_func )( void* ); + +}}}} // namespace cds::gc::hp::common +//@endcond + +#endif // #ifndef CDSLIB_GC_DETAILS_HP_COMMON_H + + diff --git a/cds/gc/details/hp_type.h b/cds/gc/details/hp_type.h deleted file mode 100644 index e74737c0..00000000 --- a/cds/gc/details/hp_type.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_DETAILS_HP_TYPE_H -#define CDSLIB_GC_DETAILS_HP_TYPE_H - -#include // free_retired_ptr_func - -//@cond -namespace cds { - namespace gc { - namespace hp { - - /// Hazard pointer - typedef void * hazard_pointer; - - /// Pointer to function to free (destruct and deallocate) retired pointer of specific type - typedef cds::gc::details::free_retired_ptr_func free_retired_ptr_func; - } - } -} -//@endcond - -#endif // #ifndef CDSLIB_GC_DETAILS_HP_TYPE_H - - diff --git a/cds/gc/details/retired_ptr.h b/cds/gc/details/retired_ptr.h index 03e7c1a8..e5443704 100644 --- a/cds/gc/details/retired_ptr.h +++ b/cds/gc/details/retired_ptr.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/gc/dhp.h b/cds/gc/dhp.h index f044e888..02a6d911 100644 --- a/cds/gc/dhp.h +++ b/cds/gc/dhp.h @@ -1,7 +1,7 @@ /* 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/ @@ -31,8 +31,8 @@ #ifndef CDSLIB_GC_DHP_H #define CDSLIB_GC_DHP_H -#include -#include +#include #include +#include #endif // #ifndef CDSLIB_GC_DHP_H diff --git a/cds/gc/dhp_smr.h b/cds/gc/dhp_smr.h new file mode 100644 index 00000000..d8c3e9f6 --- /dev/null +++ b/cds/gc/dhp_smr.h @@ -0,0 +1,1357 @@ +/* + This file is a part of libcds - Concurrent Data Structures library + + (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/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef CDSLIB_GC_DHP_SMR_H +#define CDSLIB_GC_DHP_SMR_H + +#include +#include +#include +#include +#include +#include +#include + +namespace cds { namespace gc { + namespace dhp { + using namespace cds::gc::hp::common; + + /// Exception "Dynamic Hazard Pointer SMR is not initialized" + class not_initialized: public std::runtime_error + { + public: + not_initialized() + : std::runtime_error( "Global DHP SMR object is not initialized" ) + {} + }; + + struct guard_block: public cds::intrusive::FreeListImpl::node + { + guard_block* next_; // next block in the thread list + + guard_block() + : next_( nullptr ) + {} + + guard* first() + { + return reinterpret_cast( this + 1 ); + } + }; + + /// \p guard_block allocator (global object) + class hp_allocator + { + friend class smr; + public: + static hp_allocator& instance(); + + CDS_EXPORT_API guard_block* alloc(); + void free( guard_block* block ) + { + free_list_.put( block ); + } + + private: + hp_allocator() + {} + CDS_EXPORT_API ~hp_allocator(); + + private: + cds::intrusive::FreeListImpl free_list_; ///< list of free \p guard_block + }; + + /// Per-thread hazard pointer storage + class thread_hp_storage + { + friend class smr; + public: + thread_hp_storage( guard* arr, size_t nSize ) CDS_NOEXCEPT + : free_head_( arr ) + , extended_list_( nullptr ) + , array_( arr ) + , initial_capacity_( nSize ) + {} + + thread_hp_storage() = delete; + thread_hp_storage( thread_hp_storage const& ) = delete; + thread_hp_storage( thread_hp_storage&& ) = delete; + + ~thread_hp_storage() + { + clear(); + } + + guard* alloc() + { + if ( cds_unlikely( free_head_ == nullptr )) { + extend(); + assert( free_head_ != nullptr ); + } + + guard* g = free_head_; + free_head_ = g->next_; + return g; + } + + void free( guard* g ) CDS_NOEXCEPT + { + if ( g ) { + g->clear(); + g->next_ = free_head_; + free_head_ = g; + } + } + + template< size_t Capacity> + size_t alloc( guard_array& arr ) + { + for ( size_t i = 0; i < Capacity; ++i ) { + if ( cds_unlikely( free_head_ == nullptr )) + extend(); + arr.reset( i, free_head_ ); + free_head_ = free_head_->next_; + } + return Capacity; + } + + template + void free( guard_array& arr ) CDS_NOEXCEPT + { + guard* gList = free_head_; + for ( size_t i = 0; i < Capacity; ++i ) { + guard* g = arr[i]; + if ( g ) { + g->clear(); + g->next_ = gList; + gList = g; + } + } + free_head_ = gList; + } + + void clear() + { + // clear array_ + for ( guard* cur = array_, *last = array_ + initial_capacity_; cur < last; ++cur ) + cur->clear(); + + // free all extended blocks + hp_allocator& alloc = hp_allocator::instance(); + for ( guard_block* p = extended_list_; p; ) { + guard_block* next = p->next_; + alloc.free( p ); + p = next; + } + + extended_list_ = nullptr; + } + + void init() + { + assert( extended_list_ == nullptr ); + + guard* p = array_; + for ( guard* pEnd = p + initial_capacity_ - 1; p != pEnd; ++p ) + p->next_ = p + 1; + p->next_ = nullptr; + free_head_ = array_; + } + + private: + void extend() + { + assert( free_head_ == nullptr ); + + guard_block* block = hp_allocator::instance().alloc(); + block->next_ = extended_list_; + extended_list_ = block; + free_head_ = block->first(); + } + + private: + guard* free_head_; ///< Head of free guard list + guard_block* extended_list_; ///< Head of extended guard blocks allocated for the thread + guard* const array_; ///< initial HP array + size_t const initial_capacity_; ///< Capacity of \p array_ + }; + + struct retired_block: public cds::intrusive::FreeListImpl::node + { + retired_block* next_; ///< Next block in thread-private retired array + + static size_t const c_capacity = 256; + + retired_block() + : next_( nullptr ) + {} + + retired_ptr* first() const + { + return reinterpret_cast( const_cast( this ) + 1 ); + } + + retired_ptr* last() const + { + return first() + c_capacity; + } + }; + + class retired_allocator + { + friend class smr; + public: + static retired_allocator& instance(); + + CDS_EXPORT_API retired_block* alloc(); + void free( retired_block* block ) + { + block->next_ = nullptr; + free_list_.put( block ); + } + + private: + retired_allocator() + {} + CDS_EXPORT_API ~retired_allocator(); + + private: + cds::intrusive::FreeListImpl free_list_; ///< list of free \p guard_block + }; + + /// Per-thread retired array + class retired_array + { + friend class smr; + public: + retired_array() CDS_NOEXCEPT + : current_block_( nullptr ) + , current_cell_( nullptr ) + , list_head_( nullptr ) + , list_tail_( nullptr ) + , block_count_(0) + {} + + retired_array( retired_array const& ) = delete; + retired_array( retired_array&& ) = delete; + + ~retired_array() + { + assert( empty()); + fini(); + } + + bool push( retired_ptr const& p ) CDS_NOEXCEPT + { + assert( current_block_ != nullptr ); + assert( current_block_->first() <= current_cell_ ); + assert( current_cell_ < current_block_->last() ); + //assert( &p != current_cell_ ); + + *current_cell_ = p; + if ( ++current_cell_ == current_block_->last() ) { + // goto next block if exists + if ( current_block_->next_ ) { + current_block_ = current_block_->next_; + current_cell_ = current_block_->first(); + return true; + } + + // no free block + // smr::scan() extend retired_array if needed + return false; + } + + return true; + } + + bool safe_push( retired_ptr* p ) CDS_NOEXCEPT + { + bool ret = push( *p ); + assert( ret ); + return ret; + } + + private: // called by smr + void init() + { + if ( list_head_ == nullptr ) { + retired_block* block = retired_allocator::instance().alloc(); + assert( block->next_ == nullptr ); + + current_block_ = + list_head_ = + list_tail_ = block; + current_cell_ = block->first(); + + block_count_ = 1; + } + } + + void fini() + { + retired_allocator& alloc = retired_allocator::instance(); + for ( retired_block* p = list_head_; p; ) { + retired_block* next = p->next_; + alloc.free( p ); + p = next; + } + + current_block_ = + list_head_ = + list_tail_ = nullptr; + current_cell_ = nullptr; + + block_count_ = 0; + } + + void extend() + { + assert( list_head_ != nullptr ); + assert( current_block_ == list_tail_ ); + assert( current_cell_ == current_block_->last() ); + + retired_block* block = retired_allocator::instance().alloc(); + assert( block->next_ == nullptr ); + + list_tail_ = list_tail_->next_ = block; + current_cell_ = block->first(); + ++block_count_; + } + + bool empty() const + { + return current_block_ == nullptr + || ( current_block_ == list_head_ && current_cell_ == current_block_->first()); + } + + private: + retired_block* current_block_; + retired_ptr* current_cell_; // in current_block_ + + retired_block* list_head_; + retired_block* list_tail_; + size_t block_count_; + }; + + /// Per-thread data + struct thread_data { + thread_hp_storage hazards_; ///< Hazard pointers private to the thread + retired_array retired_; ///< Retired data private to the thread + + char pad1_[cds::c_nCacheLineSize]; + atomics::atomic sync_; ///< dummy var to introduce synchronizes-with relationship between threads + char pad2_[cds::c_nCacheLineSize]; + + // CppCheck warn: pad1_ and pad2_ is uninitialized in ctor + // cppcheck-suppress uninitMemberVar + thread_data( guard* guards, size_t guard_count ) + : hazards_( guards, guard_count ) + , sync_( 0 ) + {} + + thread_data() = delete; + thread_data( thread_data const& ) = delete; + thread_data( thread_data&& ) = delete; + + void sync() + { + sync_.fetch_add( 1, atomics::memory_order_acq_rel ); + } + }; + + // Hazard Pointer SMR (Safe Memory Reclamation) + class smr + { + struct thread_record; + + public: + /// Returns the instance of Hazard Pointer \ref smr + static smr& instance() + { +# ifdef CDS_DISABLE_SMR_EXCEPTION + assert( instance_ != nullptr ); +# else + if ( !instance_ ) + CDS_THROW_EXCEPTION( not_initialized() ); +# endif + return *instance_; + } + + /// Creates Dynamic Hazard Pointer SMR singleton + /** + Dynamic Hazard Pointer SMR is a singleton. If DHP instance is not initialized then the function creates the instance. + Otherwise it does nothing. + + The Michael's HP reclamation schema depends of three parameters: + - \p nHazardPtrCount - HP pointer count per thread. Usually it is small number (2-4) depending from + the data structure algorithms. By default, if \p nHazardPtrCount = 0, + the function uses maximum of HP count for CDS library + - \p nMaxThreadCount - max count of thread with using HP GC in your application. Default is 100. + - \p nMaxRetiredPtrCount - capacity of array of retired pointers for each thread. Must be greater than + nHazardPtrCount * nMaxThreadCount + Default is 2 * nHazardPtrCount * nMaxThreadCount + */ + static CDS_EXPORT_API void construct( + size_t nInitialHazardPtrCount = 16 ///< Initial number of hazard pointer per thread + ); + + //@cond + // for back-copatibility + static void Construct( + size_t nInitialHazardPtrCount = 16 ///< Initial number of hazard pointer per thread + ) + { + construct( nInitialHazardPtrCount ); + } + //@endcond + + /// Destroys global instance of \ref smr + /** + The parameter \p bDetachAll should be used carefully: if its value is \p true, + then the object destroyed automatically detaches all attached threads. This feature + can be useful when you have no control over the thread termination, for example, + when \p libcds is injected into existing external thread. + */ + static CDS_EXPORT_API void destruct( + bool bDetachAll = false ///< Detach all threads + ); + + //@cond + // for back-copatibility + static void Destruct( + bool bDetachAll = false ///< Detach all threads + ) + { + destruct( bDetachAll ); + } + //@endcond + + /// Checks if global SMR object is constructed and may be used + static bool isUsed() CDS_NOEXCEPT + { + return instance_ != nullptr; + } + + /// Set memory management functions + /** + @note This function may be called BEFORE creating an instance + of Dynamic Hazard Pointer SMR + + SMR object allocates some memory for thread-specific data and for + creating SMR object. + By default, a standard \p new and \p delete operators are used for this. + */ + static CDS_EXPORT_API void set_memory_allocator( + void* ( *alloc_func )( size_t size ), + void( *free_func )( void * p ) + ); + + /// Returns thread-local data for the current thread + static CDS_EXPORT_API thread_data* tls(); + + static CDS_EXPORT_API void attach_thread(); + static CDS_EXPORT_API void detach_thread(); + + public: // for internal use only + /// The main garbage collecting function + CDS_EXPORT_API void scan( thread_data* pRec ); + + /// Helper scan routine + /** + The function guarantees that every node that is eligible for reuse is eventually freed, barring + thread failures. To do so, after executing \p scan(), a thread executes a \p %help_scan(), + where it checks every HP record. If an HP record is inactive, the thread moves all "lost" reclaimed pointers + to thread's list of reclaimed pointers. + + The function is called internally by \p scan(). + */ + CDS_EXPORT_API void help_scan( thread_data* pThis ); + + hp_allocator& get_hp_allocator() + { + return hp_allocator_; + } + + retired_allocator& get_retired_allocator() + { + return retired_allocator_; + } + + private: + CDS_EXPORT_API explicit smr( + size_t nInitialHazardPtrCount + ); + + CDS_EXPORT_API ~smr(); + + CDS_EXPORT_API void detach_all_thread(); + + private: + //@cond + CDS_EXPORT_API thread_record* create_thread_data(); + static CDS_EXPORT_API void destroy_thread_data( thread_record* pRec ); + + /// Allocates Hazard Pointer SMR thread private data + CDS_EXPORT_API thread_record* alloc_thread_data(); + + /// Free HP SMR thread-private data + CDS_EXPORT_API void free_thread_data( thread_record* pRec ); + //@endcond + + private: + static CDS_EXPORT_API smr* instance_; + + atomics::atomic< thread_record*> thread_list_; ///< Head of thread list + size_t const initial_hazard_count_; ///< initial number of hazard pointers per thread + hp_allocator hp_allocator_; + retired_allocator retired_allocator_; + + // temporaries + std::atomic last_plist_size_; ///< HP array size in last scan() call + }; + + // for backward compatibility + typedef smr GarbageCollector; + + + // inlines + inline hp_allocator& hp_allocator::instance() + { + return smr::instance().get_hp_allocator(); + } + + inline retired_allocator& retired_allocator::instance() + { + return smr::instance().get_retired_allocator(); + } + + } // namespace dhp + + + /// Dynamic Hazard Pointer garbage collector + /** @ingroup cds_garbage_collector + @headerfile cds/gc/dhp.h + + Implementation of Dynamic Hazard Pointer garbage collector. + + Sources: + - [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes" + - [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects" + - [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers" + + Dynamic Hazard Pointers SMR (safe memory reclamation) provides an unbounded number of hazard pointer per thread + despite of classic Hazard Pointer SMR in which the count of the hazard pointef per thread is limited. + + See \ref cds_how_to_use "How to use" section for details how to apply garbage collector. + */ + class DHP + { + public: + /// Native guarded pointer type + typedef void* guarded_pointer; + + /// Atomic reference + template using atomic_ref = atomics::atomic; + + /// Atomic type + /** + @headerfile cds/gc/dhp.h + */ + template using atomic_type = atomics::atomic; + + /// Atomic marked pointer + template using atomic_marked_ptr = atomics::atomic; + + + /// Dynamic Hazard Pointer guard + /** + A guard is a hazard pointer. + Additionally, the \p %Guard class manages allocation and deallocation of the hazard pointer + + \p %Guard object is movable but not copyable. + + The guard object can be in two states: + - unlinked - the guard is not linked with any internal hazard pointer. + In this state no operation except \p link() and move assignment is supported. + - linked (default) - the guard allocates an internal hazard pointer and fully operable. + + Due to performance reason the implementation does not check state of the guard in runtime. + + @warning Move assignment can transfer the guard in unlinked state, use with care. + */ + class Guard + { + public: + /// Default ctor allocates a guard (hazard pointer) from thread-private storage + Guard() CDS_NOEXCEPT + : guard_( dhp::smr::tls()->hazards_.alloc() ) + {} + + /// Initilalizes an unlinked guard i.e. the guard contains no hazard pointer. Used for move semantics support + explicit Guard( std::nullptr_t ) CDS_NOEXCEPT + : guard_( nullptr ) + {} + + /// Move ctor - \p src guard becomes unlinked (transfer internal guard ownership) + Guard( Guard&& src ) CDS_NOEXCEPT + : guard_( src.guard_ ) + { + src.guard_ = nullptr; + } + + /// Move assignment: the internal guards are swapped between \p src and \p this + /** + @warning \p src will become in unlinked state if \p this was unlinked on entry. + */ + Guard& operator=( Guard&& src ) CDS_NOEXCEPT + { + std::swap( guard_, src.guard_ ); + return *this; + } + + /// Copy ctor is prohibited - the guard is not copyable + Guard( Guard const& ) = delete; + + /// Copy assignment is prohibited + Guard& operator=( Guard const& ) = delete; + + /// Frees the internal hazard pointer if the guard is in linked state + ~Guard() + { + unlink(); + } + + /// Checks if the guard object linked with any internal hazard pointer + bool is_linked() const + { + return guard_ != nullptr; + } + + /// Links the guard with internal hazard pointer if the guard is in unlinked state + void link() + { + if ( !guard_ ) + guard_ = dhp::smr::tls()->hazards_.alloc(); + } + + /// Unlinks the guard from internal hazard pointer; the guard becomes in unlinked state + void unlink() + { + if ( guard_ ) { + dhp::smr::tls()->hazards_.free( guard_ ); + guard_ = nullptr; + } + } + + /// Protects a pointer of type atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store it + to the HP slot repeatedly until the guard's value equals \p toGuard + */ + template + T protect( atomics::atomic const& toGuard ) + { + assert( guard_ != nullptr ); + + T pCur = toGuard.load(atomics::memory_order_acquire); + T pRet; + do { + pRet = assign( pCur ); + pCur = toGuard.load(atomics::memory_order_acquire); + } while ( pRet != pCur ); + return pCur; + } + + /// Protects a converted pointer of type atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store result of \p f functor + to the HP slot repeatedly until the guard's value equals \p toGuard. + + The function is useful for intrusive containers when \p toGuard is a node pointer + that should be converted to a pointer to the value type before guarding. + The parameter \p f of type Func is a functor that makes this conversion: + \code + struct functor { + value_type * operator()( T * p ); + }; + \endcode + Really, the result of f( toGuard.load()) is assigned to the hazard pointer. + */ + template + T protect( atomics::atomic const& toGuard, Func f ) + { + assert( guard_ != nullptr ); + + T pCur = toGuard.load(atomics::memory_order_acquire); + T pRet; + do { + pRet = pCur; + assign( f( pCur )); + pCur = toGuard.load(atomics::memory_order_acquire); + } while ( pRet != pCur ); + return pCur; + } + + /// Store \p p to the guard + /** + The function is just an assignment, no loop is performed. + Can be used for a pointer that cannot be changed concurrently + or for already guarded pointer. + */ + template + T* assign( T* p ) + { + assert( guard_ != nullptr ); + + guard_->set( p ); + dhp::smr::tls()->sync(); + return p; + } + + //@cond + std::nullptr_t assign( std::nullptr_t ) + { + assert( guard_ != nullptr ); + + clear(); + return nullptr; + } + //@endcond + + /// Store marked pointer \p p to the guard + /** + The function is just an assignment of p.ptr(), no loop is performed. + Can be used for a marked pointer that cannot be changed concurrently + or for already guarded pointer. + */ + template + T* assign( cds::details::marked_ptr p ) + { + return assign( p.ptr()); + } + + /// Copy from \p src guard to \p this guard + void copy( Guard const& src ) + { + assign( src.get_native()); + } + + /// Clears value of the guard + void clear() + { + assert( guard_ != nullptr ); + + guard_->clear(); + } + + /// Gets the value currently protected (relaxed read) + template + T * get() const + { + assert( guard_ != nullptr ); + return guard_->get_as(); + } + + /// Gets native guarded pointer stored + void* get_native() const + { + assert( guard_ != nullptr ); + return guard_->get(); + } + + //@cond + dhp::guard* release() + { + dhp::guard* g = guard_; + guard_ = nullptr; + return g; + } + + dhp::guard*& guard_ref() + { + return guard_; + } + //@endcond + + private: + //@cond + dhp::guard* guard_; + //@endcond + }; + + /// Array of Dynamic Hazard Pointer guards + /** + The class is intended for allocating an array of hazard pointer guards. + Template parameter \p Count defines the size of the array. + + A \p %GuardArray object is not copy- and move-constructible + and not copy- and move-assignable. + */ + template + class GuardArray + { + public: + /// Rebind array for other size \p OtherCount + template + struct rebind { + typedef GuardArray other ; ///< rebinding result + }; + + /// Array capacity + static CDS_CONSTEXPR const size_t c_nCapacity = Count; + + public: + /// Default ctor allocates \p Count hazard pointers + GuardArray() + { + dhp::smr::tls()->hazards_.alloc( guards_ ); + } + + /// Move ctor is prohibited + GuardArray( GuardArray&& ) = delete; + + /// Move assignment is prohibited + GuardArray& operator=( GuardArray&& ) = delete; + + /// Copy ctor is prohibited + GuardArray( GuardArray const& ) = delete; + + /// Copy assignment is prohibited + GuardArray& operator=( GuardArray const& ) = delete; + + /// Frees allocated hazard pointers + ~GuardArray() + { + dhp::smr::tls()->hazards_.free( guards_ ); + } + + /// Protects a pointer of type \p atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store it + to the slot \p nIndex repeatedly until the guard's value equals \p toGuard + */ + template + T protect( size_t nIndex, atomics::atomic const& toGuard ) + { + assert( nIndex < capacity() ); + + T pRet; + do { + pRet = assign( nIndex, toGuard.load(atomics::memory_order_acquire)); + } while ( pRet != toGuard.load(atomics::memory_order_relaxed)); + + return pRet; + } + + /// Protects a pointer of type \p atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store it + to the slot \p nIndex repeatedly until the guard's value equals \p toGuard + + The function is useful for intrusive containers when \p toGuard is a node pointer + that should be converted to a pointer to the value type before guarding. + The parameter \p f of type Func is a functor to make that conversion: + \code + struct functor { + value_type * operator()( T * p ); + }; + \endcode + Actually, the result of f( toGuard.load()) is assigned to the hazard pointer. + */ + template + T protect( size_t nIndex, atomics::atomic const& toGuard, Func f ) + { + assert( nIndex < capacity() ); + + T pRet; + do { + assign( nIndex, f( pRet = toGuard.load(atomics::memory_order_acquire))); + } while ( pRet != toGuard.load(atomics::memory_order_relaxed)); + + return pRet; + } + + /// Store \p p to the slot \p nIndex + /** + The function is just an assignment, no loop is performed. + */ + template + T * assign( size_t nIndex, T * p ) + { + assert( nIndex < capacity() ); + + guards_.set( nIndex, p ); + dhp::smr::tls()->sync(); + return p; + } + + /// Store marked pointer \p p to the guard + /** + The function is just an assignment of p.ptr(), no loop is performed. + Can be used for a marked pointer that cannot be changed concurrently + or for already guarded pointer. + */ + template + T * assign( size_t nIndex, cds::details::marked_ptr p ) + { + return assign( nIndex, p.ptr()); + } + + /// Copy guarded value from \p src guard to slot at index \p nIndex + void copy( size_t nIndex, Guard const& src ) + { + assign( nIndex, src.get_native()); + } + + /// Copy guarded value from slot \p nSrcIndex to slot at index \p nDestIndex + void copy( size_t nDestIndex, size_t nSrcIndex ) + { + assign( nDestIndex, get_native( nSrcIndex )); + } + + /// Clear value of the slot \p nIndex + void clear( size_t nIndex ) + { + guards_.clear( nIndex ); + } + + /// Get current value of slot \p nIndex + template + T * get( size_t nIndex ) const + { + assert( nIndex < capacity() ); + return guards_[nIndex]->template get_as(); + } + + /// Get native guarded pointer stored + guarded_pointer get_native( size_t nIndex ) const + { + assert( nIndex < capacity() ); + return guards_[nIndex]->get(); + } + + //@cond + dhp::guard* release( size_t nIndex ) CDS_NOEXCEPT + { + return guards_.release( nIndex ); + } + //@endcond + + /// Capacity of the guard array + static CDS_CONSTEXPR size_t capacity() + { + return Count; + } + + private: + //@cond + dhp::guard_array guards_; + //@endcond + }; + + /// Guarded pointer + /** + A guarded pointer is a pair of a pointer and GC's guard. + Usually, it is used for returning a pointer to the item from an lock-free container. + The guard prevents the pointer to be early disposed (freed) by GC. + After destructing \p %guarded_ptr object the pointer can be disposed (freed) automatically at any time. + + Template arguments: + - \p GuardedType - a type which the guard stores + - \p ValueType - a value type + - \p Cast - a functor for converting GuardedType* to ValueType*. Default is \p void (no casting). + + For intrusive containers, \p GuardedType is the same as \p ValueType and no casting is needed. + In such case the \p %guarded_ptr is: + @code + typedef cds::gc::DHP::guarded_ptr< foo > intrusive_guarded_ptr; + @endcode + + For standard (non-intrusive) containers \p GuardedType is not the same as \p ValueType and casting is needed. + For example: + @code + struct foo { + int const key; + std::string value; + }; + + struct value_accessor { + std::string* operator()( foo* pFoo ) const + { + return &(pFoo->value); + } + }; + + // Guarded ptr + typedef cds::gc::DHP::guarded_ptr< Foo, std::string, value_accessor > nonintrusive_guarded_ptr; + @endcode + + You don't need use this class directly. + All set/map container classes from \p libcds declare the typedef for \p %guarded_ptr with appropriate casting functor. + */ + template + class guarded_ptr + { + //@cond + struct trivial_cast { + ValueType * operator()( GuardedType * p ) const + { + return p; + } + }; + + template friend class guarded_ptr; + //@endcond + + public: + typedef GuardedType guarded_type; ///< Guarded type + typedef ValueType value_type; ///< Value type + + /// Functor for casting \p guarded_type to \p value_type + typedef typename std::conditional< std::is_same::value, trivial_cast, Cast >::type value_cast; + + public: + /// Creates empty guarded pointer + guarded_ptr() CDS_NOEXCEPT + : guard_( nullptr ) + {} + + //@cond + explicit guarded_ptr( dhp::guard* g ) CDS_NOEXCEPT + : guard_( g ) + {} + + /// Initializes guarded pointer with \p p + explicit guarded_ptr( guarded_type * p ) CDS_NOEXCEPT + : guard_( nullptr ) + { + reset( p ); + } + explicit guarded_ptr( std::nullptr_t ) CDS_NOEXCEPT + : guard_( nullptr ) + {} + //@endcond + + /// Move ctor + guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT + : guard_( gp.guard_ ) + { + gp.guard_ = nullptr; + } + + /// Move ctor + template + guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT + : guard_( gp.guard_ ) + { + gp.guard_ = nullptr; + } + + /// Ctor from \p Guard + explicit guarded_ptr( Guard&& g ) CDS_NOEXCEPT + : guard_( g.release()) + {} + + /// The guarded pointer is not copy-constructible + guarded_ptr( guarded_ptr const& gp ) = delete; + + /// Clears the guarded pointer + /** + \ref release is called if guarded pointer is not \ref empty + */ + ~guarded_ptr() CDS_NOEXCEPT + { + release(); + } + + /// Move-assignment operator + guarded_ptr& operator=( guarded_ptr&& gp ) CDS_NOEXCEPT + { + std::swap( guard_, gp.guard_ ); + return *this; + } + + /// Move-assignment from \p Guard + guarded_ptr& operator=( Guard&& g ) CDS_NOEXCEPT + { + std::swap( guard_, g.guard_ref()); + return *this; + } + + /// The guarded pointer is not copy-assignable + guarded_ptr& operator=(guarded_ptr const& gp) = delete; + + /// Returns a pointer to guarded value + value_type * operator ->() const CDS_NOEXCEPT + { + assert( !empty()); + return value_cast()( guard_->get_as() ); + } + + /// Returns a reference to guarded value + value_type& operator *() CDS_NOEXCEPT + { + assert( !empty()); + return *value_cast()( guard_->get_as() ); + } + + /// Returns const reference to guarded value + value_type const& operator *() const CDS_NOEXCEPT + { + assert( !empty()); + return *value_cast()(reinterpret_cast(guard_->get())); + } + + /// Checks if the guarded pointer is \p nullptr + bool empty() const CDS_NOEXCEPT + { + return guard_ == nullptr || guard_->get( atomics::memory_order_relaxed ) == nullptr; + } + + /// \p bool operator returns !empty() + explicit operator bool() const CDS_NOEXCEPT + { + return !empty(); + } + + /// Clears guarded pointer + /** + If the guarded pointer has been released, the pointer can be disposed (freed) at any time. + Dereferncing the guarded pointer after \p release() is dangerous. + */ + void release() CDS_NOEXCEPT + { + free_guard(); + } + + //@cond + // For internal use only!!! + void reset(guarded_type * p) CDS_NOEXCEPT + { + alloc_guard(); + assert( guard_ ); + guard_->set( p ); + } + + //@endcond + + private: + //@cond + void alloc_guard() + { + if ( !guard_ ) + guard_ = dhp::smr::tls()->hazards_.alloc(); + } + + void free_guard() + { + if ( guard_ ) { + dhp::smr::tls()->hazards_.free( guard_ ); + guard_ = nullptr; + } + } + //@endcond + + private: + //@cond + dhp::guard* guard_; + //@endcond + }; + + public: + /// Initializes %DHP memory manager singleton + /** + Constructor creates and initializes %DHP global object. + %DHP object should be created before using CDS data structure based on \p %cds::gc::DHP. Usually, + it is created in the beginning of \p main() function. + After creating of global object you may use CDS data structures based on \p %cds::gc::DHP. + + \p nInitialThreadGuardCount - initial count of guard allocated for each thread. + When a thread is initialized the GC allocates local guard pool for the thread from a common guard pool. + 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. + */ + explicit DHP( + size_t nInitialHazardPtrCount = 16 ///< Initial number of hazard pointer per thread + ) + { + dhp::smr::construct( nInitialHazardPtrCount ); + } + + /// Destroys %DHP memory manager + /** + The destructor destroys %DHP global object. After calling of this function you may \b NOT + use CDS data structures based on \p %cds::gc::DHP. + Usually, %DHP object is destroyed at the end of your \p main(). + */ + ~DHP() + { + dhp::GarbageCollector::destruct( true ); + } + + /// Checks if count of hazard pointer is no less than \p nCountNeeded + /** + The function always returns \p true since the guard count is unlimited for + \p %gc::DHP garbage collector. + */ + static CDS_CONSTEXPR bool check_available_guards( +#ifdef CDS_DOXYGEN_INVOKED + size_t nCountNeeded, +#else + size_t +#endif + ) + { + return true; + } + + /// Set memory management functions + /** + @note This function may be called BEFORE creating an instance + of Dynamic Hazard Pointer SMR + + SMR object allocates some memory for thread-specific data and for + creating SMR object. + By default, a standard \p new and \p delete operators are used for this. + */ + static void set_memory_allocator( + void* ( *alloc_func )( size_t size ), ///< \p malloc() function + void( *free_func )( void * p ) ///< \p free() function + ) + { + dhp::smr::set_memory_allocator( alloc_func, free_func ); + } + + /// Retire pointer \p p with function \p pFunc + /** + The function places pointer \p p to array of pointers ready for removing. + (so called retired pointer array). The pointer can be safely removed when no hazard pointer points to it. + \p func is a disposer: when \p p can be safely removed, \p func is called. + */ + template + static void retire( T * p, void (* func)(T *)) + { + dhp::thread_data* rec = dhp::smr::tls(); + if ( !rec->retired_.push( dhp::retired_ptr( p, func ) ) ) + dhp::smr::instance().scan( rec ); + } + + /// Retire pointer \p p with functor of type \p Disposer + /** + The function places pointer \p p to array of pointers ready for removing. + (so called retired pointer array). The pointer can be safely removed when no hazard pointer points to it. + + Deleting the pointer is an invocation of some object of type \p Disposer; the interface of \p Disposer is: + \code + template + struct disposer { + void operator()( T * p ) ; // disposing operator + }; + \endcode + Since the functor call can happen at any time after \p retire() call, additional restrictions are imposed to \p Disposer type: + - it should be stateless functor + - it should be default-constructible + - the result of functor call with argument \p p should not depend on where the functor will be called. + + \par Examples: + Operator \p delete functor: + \code + template + struct disposer { + void operator ()( T * p ) { + delete p; + } + }; + + // How to call HP::retire method + int * p = new int; + + // ... use p in lock-free manner + + cds::gc::DHP::retire( p ) ; // place p to retired pointer array of DHP SMR + \endcode + + Functor based on \p std::allocator : + \code + template > + struct disposer { + template + void operator()( T * p ) { + typedef typename Alloc::templare rebind::other alloc_t; + alloc_t a; + a.destroy( p ); + a.deallocate( p, 1 ); + } + }; + \endcode + */ + template + static void retire( T * p ) + { + if ( !dhp::smr::tls()->retired_.push( dhp::retired_ptr( p, cds::details::static_functor::call ))) + scan(); + } + + /// Checks if Dynamic Hazard Pointer GC is constructed and may be used + static bool isUsed() + { + return dhp::smr::isUsed(); + } + + /// Forced GC cycle call for current thread + /** + Usually, this function should not be called directly. + */ + static void scan() + { + dhp::smr::instance().scan( dhp::smr::tls() ); + } + + /// Synonym for \p scan() + static void force_dispose() + { + scan(); + } + }; + +}} // namespace cds::gc + +#endif // #ifndef CDSLIB_GC_DHP_SMR_H + + diff --git a/cds/gc/hp.h b/cds/gc/hp.h index 8dca7a6d..e42fedb6 100644 --- a/cds/gc/hp.h +++ b/cds/gc/hp.h @@ -1,7 +1,7 @@ /* 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/ @@ -31,12 +31,12 @@ #ifndef CDSLIB_GC_HP_H #define CDSLIB_GC_HP_H -#include -#include +#include #include +#include /** - @page cds_garbage_collectors_comparison GC comparison + @page cds_garbage_collectors_comparison SMR (Safe Memory Reclamation schema) comparison @ingroup cds_garbage_collector @@ -47,7 +47,7 @@ - + diff --git a/cds/gc/hp_smr.h b/cds/gc/hp_smr.h new file mode 100644 index 00000000..2fb7c307 --- /dev/null +++ b/cds/gc/hp_smr.h @@ -0,0 +1,1464 @@ +/* + This file is a part of libcds - Concurrent Data Structures library + + (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/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef CDSLIB_GC_HP_SMR_H +#define CDSLIB_GC_HP_SMR_H + +#include +#include +#include +#include +#include +#include + +namespace cds { namespace gc { + namespace hp { + using namespace cds::gc::hp::common; + + /// Exception "Not enough Hazard Pointer" + class not_enought_hazard_ptr: public std::length_error + { + public: + //@cond + not_enought_hazard_ptr() + : std::length_error( "Not enough Hazard Pointer" ) + {} + //@endcond + }; + + /// Exception "Hazard Pointer SMR is not initialized" + class not_initialized: public std::runtime_error + { + public: + not_initialized() + : std::runtime_error( "Global Hazard Pointer SMR object is not initialized" ) + {} + }; + + /// Per-thread hazard pointer storage + class thread_hp_storage { + public: + thread_hp_storage( guard* arr, size_t nSize ) CDS_NOEXCEPT + : free_head_( arr ) + , array_( arr ) + , capacity_( nSize ) +# ifdef CDS_ENABLE_HPSTAT + , alloc_guard_count_(0) + , free_guard_count_(0) +# endif + { + for ( guard* pEnd = arr + nSize - 1; arr < pEnd; ++arr ) + arr->next_ = arr + 1; + arr->next_ = nullptr; + } + + thread_hp_storage() = delete; + thread_hp_storage( thread_hp_storage const& ) = delete; + thread_hp_storage( thread_hp_storage&& ) = delete; + + size_t capacity() const CDS_NOEXCEPT + { + return capacity_; + } + + bool full() const CDS_NOEXCEPT + { + return free_head_ == nullptr; + } + + guard* alloc() + { +# ifdef CDS_DISABLE_SMR_EXCEPTION + assert( !full()); +# else + if ( full() ) + CDS_THROW_EXCEPTION( not_enought_hazard_ptr()); +# endif + guard* g = free_head_; + free_head_ = g->next_; + CDS_HPSTAT( ++alloc_guard_count_ ); + return g; + } + + void free( guard* g ) CDS_NOEXCEPT + { + assert( g >= array_ && g < array_ + capacity() ); + + if ( g ) { + g->clear(); + g->next_ = free_head_; + free_head_ = g; + CDS_HPSTAT( ++free_guard_count_ ); + } + } + + template< size_t Capacity> + size_t alloc( guard_array& arr ) + { + size_t i; + guard* g = free_head_; + for ( i = 0; i < Capacity && g; ++i ) { + arr.reset( i, g ); + g = g->next_; + } + +# ifdef CDS_DISABLE_SMR_EXCEPTION + assert( i == Capacity ); +# else + if ( i != Capacity ) + CDS_THROW_EXCEPTION( not_enought_hazard_ptr()); +# endif + free_head_ = g; + CDS_HPSTAT( alloc_guard_count_ += Capacity ); + return i; + } + + template + void free( guard_array& arr ) CDS_NOEXCEPT + { + guard* gList = free_head_; + for ( size_t i = 0; i < Capacity; ++i ) { + guard* g = arr[i]; + if ( g ) { + g->clear(); + g->next_ = gList; + gList = g; + CDS_HPSTAT( ++free_guard_count_ ); + } + } + free_head_ = gList; + } + + // cppcheck-suppress functionConst + void clear() + { + for ( guard* cur = array_, *last = array_ + capacity(); cur < last; ++cur ) + cur->clear(); + } + + guard& operator[]( size_t idx ) + { + assert( idx < capacity() ); + + return array_[idx]; + } + + static size_t calc_array_size( size_t capacity ) + { + return sizeof( guard ) * capacity; + } + + private: + guard* free_head_; ///< Head of free guard list + guard* const array_; ///< HP array + size_t const capacity_; ///< HP array capacity +# ifdef CDS_ENABLE_HPSTAT + public: + size_t alloc_guard_count_; + size_t free_guard_count_; +# endif + }; + + /// Per-thread retired array + class retired_array + { + public: + retired_array( retired_ptr* arr, size_t capacity ) CDS_NOEXCEPT + : current_( arr ) + , last_( arr + capacity ) + , retired_( arr ) +# ifdef CDS_ENABLE_HPSTAT + , retire_call_count_(0) +# endif + {} + + retired_array() = delete; + retired_array( retired_array const& ) = delete; + retired_array( retired_array&& ) = delete; + + size_t capacity() const CDS_NOEXCEPT + { + return last_ - retired_; + } + + size_t size() const CDS_NOEXCEPT + { + return current_ - retired_; + } + + bool push( retired_ptr&& p ) CDS_NOEXCEPT + { + *current_ = p; + CDS_HPSTAT( ++retire_call_count_ ); + return ++current_ < last_; + } + + retired_ptr* first() const CDS_NOEXCEPT + { + return retired_; + } + + retired_ptr* last() const CDS_NOEXCEPT + { + return current_; + } + + void reset( size_t nSize ) CDS_NOEXCEPT + { + current_ = first() + nSize; + } + + bool full() const CDS_NOEXCEPT + { + return current_ == last_; + } + + static size_t calc_array_size( size_t capacity ) + { + return sizeof( retired_ptr ) * capacity; + } + + private: + retired_ptr* current_; + retired_ptr* const last_; + retired_ptr* const retired_; +# ifdef CDS_ENABLE_HPSTAT + public: + size_t retire_call_count_; +# endif + + }; + + /// Internal statistics + struct stat { + size_t guard_allocated; ///< Count of allocated HP guards + size_t guard_freed; ///< Count of freed HP guards + size_t retired_count; ///< Count of retired pointers + size_t free_count; ///< Count of free pointers + size_t scan_count; ///< Count of \p scan() call + size_t help_scan_count; ///< Count of \p help_scan() call + + size_t thread_rec_count; ///< Count of thread records + + stat() + { + clear(); + } + + void clear() + { + guard_allocated = + guard_freed = + retired_count = + free_count = + scan_count = + help_scan_count = + thread_rec_count = 0; + } + }; + + /// Per-thread data + struct thread_data { + thread_hp_storage hazards_; ///< Hazard pointers private to the thread + retired_array retired_; ///< Retired data private to the thread + + stat stat_; ///< Internal statistics for the thread + + char pad1_[cds::c_nCacheLineSize]; + atomics::atomic sync_; ///< dummy var to introduce synchronizes-with relationship between threads + char pad2_[cds::c_nCacheLineSize]; + + // CppCheck warn: pad1_ and pad2_ is uninitialized in ctor + // cppcheck-suppress uninitMemberVar + thread_data( guard* guards, size_t guard_count, retired_ptr* retired_arr, size_t retired_capacity ) + : hazards_( guards, guard_count ) + , retired_( retired_arr, retired_capacity ) + , sync_(0) + {} + + thread_data() = delete; + thread_data( thread_data const& ) = delete; + thread_data( thread_data&& ) = delete; + + void sync() + { + sync_.fetch_add( 1, atomics::memory_order_acq_rel ); + } + }; + + /// smr::scan() strategy + enum scan_type { + classic, ///< classic scan as described in Michael's works (see smr::classic_scan() ) + inplace ///< inplace scan without allocation (see smr::inplace_scan() ) + }; + + // Hazard Pointer SMR (Safe Memory Reclamation) + class smr + { + struct thread_record; + + public: + /// Returns the instance of Hazard Pointer \ref smr + static smr& instance() + { +# ifdef CDS_DISABLE_SMR_EXCEPTION + assert( instance_ != nullptr ); +# else + if ( !instance_ ) + CDS_THROW_EXCEPTION( not_initialized()); +# endif + return *instance_; + } + + /// Creates Hazard Pointer SMR singleton + /** + Hazard Pointer SMR is a singleton. If HP instance is not initialized then the function creates the instance. + Otherwise it does nothing. + + The Michael's HP reclamation schema depends of three parameters: + - \p nHazardPtrCount - HP pointer count per thread. Usually it is small number (2-4) depending from + the data structure algorithms. By default, if \p nHazardPtrCount = 0, + the function uses maximum of HP count for CDS library + - \p nMaxThreadCount - max count of thread with using HP GC in your application. Default is 100. + - \p nMaxRetiredPtrCount - capacity of array of retired pointers for each thread. Must be greater than + nHazardPtrCount * nMaxThreadCount + Default is 2 * nHazardPtrCount * nMaxThreadCount + */ + static CDS_EXPORT_API void construct( + size_t nHazardPtrCount = 0, ///< Hazard pointer count per thread + size_t nMaxThreadCount = 0, ///< Max count of simultaneous working thread in your application + size_t nMaxRetiredPtrCount = 0, ///< Capacity of the array of retired objects for the thread + scan_type nScanType = inplace ///< Scan type (see \ref scan_type enum) + ); + + //@cond + // for back-copatibility + static void Construct( + size_t nHazardPtrCount = 0, ///< Hazard pointer count per thread + size_t nMaxThreadCount = 0, ///< Max count of simultaneous working thread in your application + size_t nMaxRetiredPtrCount = 0, ///< Capacity of the array of retired objects for the thread + scan_type nScanType = inplace ///< Scan type (see \ref scan_type enum) + ) + { + construct( nHazardPtrCount, nMaxThreadCount, nMaxRetiredPtrCount, nScanType ); + } + + //@endcond + + /// Destroys global instance of \ref smr + /** + The parameter \p bDetachAll should be used carefully: if its value is \p true, + then the object destroyed automatically detaches all attached threads. This feature + can be useful when you have no control over the thread termination, for example, + when \p libcds is injected into existing external thread. + */ + static CDS_EXPORT_API void destruct( + bool bDetachAll = false ///< Detach all threads + ); + + //@cond + // for back-copatibility + static void Destruct( + bool bDetachAll = false ///< Detach all threads + ) + { + destruct( bDetachAll ); + } + //@endcond + + /// Checks if global SMR object is constructed and may be used + static bool isUsed() CDS_NOEXCEPT + { + return instance_ != nullptr; + } + + /// Set memory management functions + /** + @note This function may be called BEFORE creating an instance + of Hazard Pointer SMR + + SMR object allocates some memory for thread-specific data and for + creating SMR object. + By default, a standard \p new and \p delete operators are used for this. + */ + static CDS_EXPORT_API void set_memory_allocator( + void* ( *alloc_func )( size_t size ), + void (*free_func )( void * p ) + ); + + /// Returns max Hazard Pointer count per thread + size_t get_hazard_ptr_count() const CDS_NOEXCEPT + { + return hazard_ptr_count_; + } + + /// Returns max thread count + size_t get_max_thread_count() const CDS_NOEXCEPT + { + return max_thread_count_; + } + + /// Returns max size of retired objects array + size_t get_max_retired_ptr_count() const CDS_NOEXCEPT + { + return max_retired_ptr_count_; + } + + /// Get current scan strategy + scan_type get_scan_type() const + { + return scan_type_; + } + + /// Checks that required hazard pointer count \p nRequiredCount is less or equal then max hazard pointer count + /** + If nRequiredCount > get_hazard_ptr_count() then the exception \p not_enought_hazard_ptr is thrown + */ + static void check_hazard_ptr_count( size_t nRequiredCount ) + { + if ( instance().get_hazard_ptr_count() < nRequiredCount ) { +# ifdef CDS_DISABLE_SMR_EXCEPTION + assert( false ); // not enough hazard ptr +# else + CDS_THROW_EXCEPTION( not_enought_hazard_ptr() ); +# endif + } + } + + /// Returns thread-local data for the current thread + static CDS_EXPORT_API thread_data* tls(); + + static CDS_EXPORT_API void attach_thread(); + static CDS_EXPORT_API void detach_thread(); + + /// Get internal statistics + void statistics( stat& st ); + + public: // for internal use only + /// The main garbage collecting function + /** + This function is called internally when upper bound of thread's list of reclaimed pointers + is reached. + + There are the following scan algorithm: + - \ref hzp_gc_classic_scan "classic_scan" allocates memory for internal use + - \ref hzp_gc_inplace_scan "inplace_scan" does not allocate any memory + + Use \p set_scan_type() member function to setup appropriate scan algorithm. + */ + void scan( thread_data* pRec ) + { + ( this->*scan_func_ )( pRec ); + } + + /// Helper scan routine + /** + The function guarantees that every node that is eligible for reuse is eventually freed, barring + thread failures. To do so, after executing \p scan(), a thread executes a \p %help_scan(), + where it checks every HP record. If an HP record is inactive, the thread moves all "lost" reclaimed pointers + to thread's list of reclaimed pointers. + + The function is called internally by \p scan(). + */ + CDS_EXPORT_API void help_scan( thread_data* pThis ); + + private: + CDS_EXPORT_API smr( + size_t nHazardPtrCount, ///< Hazard pointer count per thread + size_t nMaxThreadCount, ///< Max count of simultaneous working thread in your application + size_t nMaxRetiredPtrCount, ///< Capacity of the array of retired objects for the thread + scan_type nScanType ///< Scan type (see \ref scan_type enum) + ); + + CDS_EXPORT_API ~smr(); + + CDS_EXPORT_API void detach_all_thread(); + + /// Classic scan algorithm + /** @anchor hzp_gc_classic_scan + Classical scan algorithm as described in Michael's paper. + + A scan includes four stages. The first stage involves scanning the array HP for non-null values. + Whenever a non-null value is encountered, it is inserted in a local list of currently protected pointer. + Only stage 1 accesses shared variables. The following stages operate only on private variables. + + The second stage of a scan involves sorting local list of protected pointers to allow + binary search in the third stage. + + The third stage of a scan involves checking each reclaimed node + against the pointers in local list of protected pointers. If the binary search yields + no match, the node is freed. Otherwise, it cannot be deleted now and must kept in thread's list + of reclaimed pointers. + + The forth stage prepares new thread's private list of reclaimed pointers + that could not be freed during the current scan, where they remain until the next scan. + + This algorithm allocates memory for internal HP array. + + This function is called internally by ThreadGC object when upper bound of thread's list of reclaimed pointers + is reached. + */ + CDS_EXPORT_API void classic_scan( thread_data* pRec ); + + /// In-place scan algorithm + /** @anchor hzp_gc_inplace_scan + Unlike the \p classic_scan() algorithm, \p %inplace_scan() does not allocate any memory. + All operations are performed in-place. + */ + CDS_EXPORT_API void inplace_scan( thread_data* pRec ); + + private: + //@cond + CDS_EXPORT_API thread_record* create_thread_data(); + static CDS_EXPORT_API void destroy_thread_data( thread_record* pRec ); + + /// Allocates Hazard Pointer SMR thread private data + CDS_EXPORT_API thread_record* alloc_thread_data(); + + /// Free HP SMR thread-private data + CDS_EXPORT_API void free_thread_data( thread_record* pRec ); + + //@endcond + + private: + static CDS_EXPORT_API smr* instance_; + + atomics::atomic< thread_record*> thread_list_; ///< Head of thread list + + size_t const hazard_ptr_count_; ///< max count of thread's hazard pointer + size_t const max_thread_count_; ///< max count of thread + size_t const max_retired_ptr_count_; ///< max count of retired ptr per thread + scan_type const scan_type_; ///< scan type (see \ref scan_type enum) + void ( smr::*scan_func_ )( thread_data* pRec ); + }; + + // for backward compatibility + typedef smr GarbageCollector; + + } // namespace hp + + + /// @defgroup cds_garbage_collector Garbage collectors + + /// Hazard Pointer SMR (Safe Memory Reclamation) + /** @ingroup cds_garbage_collector + + Implementation of classic Hazard Pointer garbage collector. + + Sources: + - [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes" + - [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects" + - [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers" + + Hazard Pointer garbage collector is a singleton. The main user-level part of Hazard Pointer schema is + \p %cds::gc::HP class and its nested classes. Before use any HP-related class you must initialize HP + by contructing \p %cds::gc::HP object in beginning of your \p main(). + See \ref cds_how_to_use "How to use" section for details how to apply SMR schema. + */ + class HP + { + public: + /// Native guarded pointer type + typedef hp::hazard_ptr guarded_pointer; + + /// Atomic reference + template using atomic_ref = atomics::atomic; + + /// Atomic marked pointer + template using atomic_marked_ptr = atomics::atomic; + + /// Atomic type + template using atomic_type = atomics::atomic; + + /// Exception "Not enough Hazard Pointer" + typedef hp::not_enought_hazard_ptr not_enought_hazard_ptr_exception; + + /// Internal statistics + typedef hp::stat stat; + + /// Hazard Pointer guard + /** + A guard is a hazard pointer. + Additionally, the \p %Guard class manages allocation and deallocation of the hazard pointer. + + \p %Guard object is movable but not copyable. + + The guard object can be in two states: + - unlinked - the guard is not linked with any internal hazard pointer. + In this state no operation except \p link() and move assignment is supported. + - linked (default) - the guard allocates an internal hazard pointer and completely operable. + + Due to performance reason the implementation does not check state of the guard in runtime. + + @warning Move assignment transfers the guard in unlinked state, use with care. + */ + class Guard + { + public: + /// Default ctor allocates a guard (hazard pointer) from thread-private storage + /** + @warning Can throw \p too_many_hazard_ptr_exception if internal hazard pointer objects are exhausted. + */ + Guard() + : guard_( hp::smr::tls()->hazards_.alloc() ) + {} + + /// Initilalizes an unlinked guard i.e. the guard contains no hazard pointer. Used for move semantics support + explicit Guard( std::nullptr_t ) CDS_NOEXCEPT + : guard_( nullptr ) + {} + + /// Move ctor - \p src guard becomes unlinked (transfer internal guard ownership) + Guard( Guard&& src ) CDS_NOEXCEPT + : guard_( src.guard_ ) + { + src.guard_ = nullptr; + } + + /// Move assignment: the internal guards are swapped between \p src and \p this + /** + @warning \p src will become in unlinked state if \p this was unlinked on entry. + */ + Guard& operator=( Guard&& src ) CDS_NOEXCEPT + { + std::swap( guard_, src.guard_ ); + return *this; + } + + /// Copy ctor is prohibited - the guard is not copyable + Guard( Guard const& ) = delete; + + /// Copy assignment is prohibited + Guard& operator=( Guard const& ) = delete; + + /// Frees the internal hazard pointer if the guard is in linked state + ~Guard() + { + unlink(); + } + + /// Checks if the guard object linked with any internal hazard pointer + bool is_linked() const + { + return guard_ != nullptr; + } + + /// Links the guard with internal hazard pointer if the guard is in unlinked state + /** + @warning Can throw \p not_enought_hazard_ptr_exception if internal hazard pointer array is exhausted. + */ + void link() + { + if ( !guard_ ) + guard_ = hp::smr::tls()->hazards_.alloc(); + } + + /// Unlinks the guard from internal hazard pointer; the guard becomes in unlinked state + void unlink() + { + if ( guard_ ) { + hp::smr::tls()->hazards_.free( guard_ ); + guard_ = nullptr; + } + } + + /// Protects a pointer of type \p atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store it + to the HP slot repeatedly until the guard's value equals \p toGuard + + @warning The guad object should be in linked state, otherwise the result is undefined + */ + template + T protect( atomics::atomic const& toGuard ) + { + assert( guard_ != nullptr ); + + T pCur = toGuard.load(atomics::memory_order_acquire); + T pRet; + do { + pRet = assign( pCur ); + pCur = toGuard.load(atomics::memory_order_acquire); + } while ( pRet != pCur ); + return pCur; + } + + /// Protects a converted pointer of type \p atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store result of \p f functor + to the HP slot repeatedly until the guard's value equals \p toGuard. + + The function is useful for intrusive containers when \p toGuard is a node pointer + that should be converted to a pointer to the value before protecting. + The parameter \p f of type Func is a functor that makes this conversion: + \code + struct functor { + value_type * operator()( T * p ); + }; + \endcode + Actually, the result of f( toGuard.load()) is assigned to the hazard pointer. + + @warning The guad object should be in linked state, otherwise the result is undefined + */ + template + T protect( atomics::atomic const& toGuard, Func f ) + { + assert( guard_ != nullptr ); + + T pCur = toGuard.load(atomics::memory_order_acquire); + T pRet; + do { + pRet = pCur; + assign( f( pCur )); + pCur = toGuard.load(atomics::memory_order_acquire); + } while ( pRet != pCur ); + return pCur; + } + + /// Store \p p to the guard + /** + The function equals to a simple assignment the value \p p to guard, no loop is performed. + Can be used for a pointer that cannot be changed concurrently or if the pointer is already + guarded by another guard. + + @warning The guad object should be in linked state, otherwise the result is undefined + */ + template + T * assign( T* p ) + { + assert( guard_ != nullptr ); + + guard_->set( p ); + hp::smr::tls()->sync(); + return p; + } + + //@cond + std::nullptr_t assign( std::nullptr_t ) + { + assert( guard_ != nullptr ); + + guard_->clear(); + return nullptr; + } + //@endcond + + /// Copy a value guarded from \p src guard to \p this guard (valid only in linked state) + void copy( Guard const& src ) + { + assign( src.get_native()); + } + + /// Store marked pointer \p p to the guard + /** + The function equals to a simple assignment of p.ptr(), no loop is performed. + Can be used for a marked pointer that cannot be changed concurrently or if the marked pointer + is already guarded by another guard. + + @warning The guard object should be in linked state, otherwise the result is undefined + */ + template + T * assign( cds::details::marked_ptr p ) + { + return assign( p.ptr()); + } + + /// Clear value of the guard (valid only in linked state) + void clear() + { + assign( nullptr ); + } + + /// Get the value currently protected (valid only in linked state) + template + T * get() const + { + assert( guard_ != nullptr ); + return guard_->get_as(); + } + + /// Get native hazard pointer stored (valid only in linked state) + guarded_pointer get_native() const + { + assert( guard_ != nullptr ); + return guard_->get(); + } + + //@cond + hp::guard* release() + { + hp::guard* g = guard_; + guard_ = nullptr; + return g; + } + + hp::guard*& guard_ref() + { + return guard_; + } + //@endcond + + private: + //@cond + hp::guard* guard_; + //@endcond + }; + + /// Array of Hazard Pointer guards + /** + The class is intended for allocating an array of hazard pointer guards. + Template parameter \p Count defines the size of the array. + */ + template + class GuardArray + { + public: + /// Rebind array for other size \p Count2 + template + struct rebind { + typedef GuardArray other; ///< rebinding result + }; + + /// Array capacity + static CDS_CONSTEXPR const size_t c_nCapacity = Count; + + public: + /// Default ctor allocates \p Count hazard pointers + GuardArray() + { + hp::smr::tls()->hazards_.alloc( guards_ ); + } + + /// Move ctor is prohibited + GuardArray( GuardArray&& ) = delete; + + /// Move assignment is prohibited + GuardArray& operator=( GuardArray&& ) = delete; + + /// Copy ctor is prohibited + GuardArray( GuardArray const& ) = delete; + + /// Copy assignment is prohibited + GuardArray& operator=( GuardArray const& ) = delete; + + /// Frees allocated hazard pointers + ~GuardArray() + { + hp::smr::tls()->hazards_.free( guards_ ); + } + + /// Protects a pointer of type \p atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store it + to the slot \p nIndex repeatedly until the guard's value equals \p toGuard + */ + template + T protect( size_t nIndex, atomics::atomic const& toGuard ) + { + assert( nIndex < capacity()); + + T pRet; + do { + pRet = assign( nIndex, toGuard.load(atomics::memory_order_acquire)); + } while ( pRet != toGuard.load(atomics::memory_order_acquire)); + + return pRet; + } + + /// Protects a pointer of type \p atomic + /** + Return the value of \p toGuard + + The function tries to load \p toGuard and to store it + to the slot \p nIndex repeatedly until the guard's value equals \p toGuard + + The function is useful for intrusive containers when \p toGuard is a node pointer + that should be converted to a pointer to the value type before guarding. + The parameter \p f of type Func is a functor that makes this conversion: + \code + struct functor { + value_type * operator()( T * p ); + }; + \endcode + Really, the result of f( toGuard.load()) is assigned to the hazard pointer. + */ + template + T protect( size_t nIndex, atomics::atomic const& toGuard, Func f ) + { + assert( nIndex < capacity()); + + T pRet; + do { + assign( nIndex, f( pRet = toGuard.load(atomics::memory_order_acquire))); + } while ( pRet != toGuard.load(atomics::memory_order_acquire)); + + return pRet; + } + + /// Store \p to the slot \p nIndex + /** + The function equals to a simple assignment, no loop is performed. + */ + template + T * assign( size_t nIndex, T * p ) + { + assert( nIndex < capacity() ); + + guards_.set( nIndex, p ); + hp::smr::tls()->sync(); + return p; + } + + /// Store marked pointer \p p to the guard + /** + The function equals to a simple assignment of p.ptr(), no loop is performed. + Can be used for a marked pointer that cannot be changed concurrently. + */ + template + T * assign( size_t nIndex, cds::details::marked_ptr p ) + { + return assign( nIndex, p.ptr()); + } + + /// Copy guarded value from \p src guard to slot at index \p nIndex + void copy( size_t nIndex, Guard const& src ) + { + assign( nIndex, src.get_native()); + } + + /// Copy guarded value from slot \p nSrcIndex to the slot \p nDestIndex + void copy( size_t nDestIndex, size_t nSrcIndex ) + { + assign( nDestIndex, get_native( nSrcIndex )); + } + + /// Clear value of the slot \p nIndex + void clear( size_t nIndex ) + { + guards_.clear( nIndex ); + } + + /// Get current value of slot \p nIndex + template + T * get( size_t nIndex ) const + { + assert( nIndex < capacity() ); + return guards_[nIndex]->template get_as(); + } + + /// Get native hazard pointer stored + guarded_pointer get_native( size_t nIndex ) const + { + assert( nIndex < capacity()); + return guards_[nIndex]->get(); + } + + //@cond + hp::guard* release( size_t nIndex ) CDS_NOEXCEPT + { + return guards_.release( nIndex ); + } + //@endcond + + /// Capacity of the guard array + static CDS_CONSTEXPR size_t capacity() + { + return c_nCapacity; + } + + private: + //@cond + hp::guard_array guards_; + //@endcond + }; + + /// Guarded pointer + /** + A guarded pointer is a pair of a pointer and GC's guard. + Usually, it is used for returning a pointer to an element of a lock-free container. + The guard prevents the pointer to be early disposed (freed) by SMR. + After destructing \p %guarded_ptr object the pointer can be disposed (freed) automatically at any time. + + Template arguments: + - \p GuardedType - a type which the guard stores + - \p ValueType - a value type + - \p Cast - a functor for converting GuardedType* to ValueType*. Default is \p void (no casting). + + For intrusive containers, \p GuardedType is the same as \p ValueType and no casting is needed. + In such case the \p %guarded_ptr is: + @code + typedef cds::gc::HP::guarded_ptr< foo > intrusive_guarded_ptr; + @endcode + + For standard (non-intrusive) containers \p GuardedType is not the same as \p ValueType and casting is needed. + For example: + @code + struct foo { + int const key; + std::string value; + }; + + struct value_accessor { + std::string* operator()( foo* pFoo ) const + { + return &(pFoo->value); + } + }; + + // Guarded ptr + typedef cds::gc::HP::guarded_ptr< Foo, std::string, value_accessor > nonintrusive_guarded_ptr; + @endcode + + You don't need use this class directly. + All set/map container classes from \p libcds declare the typedef for \p %guarded_ptr with appropriate casting functor. + */ + template + class guarded_ptr + { + //@cond + struct trivial_cast { + ValueType * operator()( GuardedType * p ) const + { + return p; + } + }; + + template friend class guarded_ptr; + //@endcond + + public: + typedef GuardedType guarded_type; ///< Guarded type + typedef ValueType value_type; ///< Value type + + /// Functor for casting \p guarded_type to \p value_type + typedef typename std::conditional< std::is_same::value, trivial_cast, Cast >::type value_cast; + + public: + /// Creates empty guarded pointer + guarded_ptr() CDS_NOEXCEPT + : guard_(nullptr) + {} + + //@cond + explicit guarded_ptr( hp::guard* g ) CDS_NOEXCEPT + : guard_( g ) + {} + + /// Initializes guarded pointer with \p p + explicit guarded_ptr( guarded_type* p ) CDS_NOEXCEPT + : guard_( nullptr ) + { + reset(p); + } + explicit guarded_ptr( std::nullptr_t ) CDS_NOEXCEPT + : guard_( nullptr ) + {} + //@endcond + + /// Move ctor + guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT + : guard_( gp.guard_ ) + { + gp.guard_ = nullptr; + } + + /// Move ctor + template + guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT + : guard_( gp.guard_ ) + { + gp.guard_ = nullptr; + } + + /// Ctor from \p Guard + explicit guarded_ptr( Guard&& g ) CDS_NOEXCEPT + : guard_( g.release()) + {} + + /// The guarded pointer is not copy-constructible + guarded_ptr( guarded_ptr const& gp ) = delete; + + /// Clears the guarded pointer + /** + \ref release() is called if guarded pointer is not \ref empty() + */ + ~guarded_ptr() CDS_NOEXCEPT + { + release(); + } + + /// Move-assignment operator + guarded_ptr& operator=( guarded_ptr&& gp ) CDS_NOEXCEPT + { + std::swap( guard_, gp.guard_ ); + return *this; + } + + /// Move-assignment from \p Guard + guarded_ptr& operator=( Guard&& g ) CDS_NOEXCEPT + { + std::swap( guard_, g.guard_ref()); + return *this; + } + + /// The guarded pointer is not copy-assignable + guarded_ptr& operator=(guarded_ptr const& gp) = delete; + + /// Returns a pointer to guarded value + value_type * operator ->() const CDS_NOEXCEPT + { + assert( !empty()); + return value_cast()( guard_->get_as()); + } + + /// Returns a reference to guarded value + value_type& operator *() CDS_NOEXCEPT + { + assert( !empty()); + return *value_cast()( guard_->get_as()); + } + + /// Returns const reference to guarded value + value_type const& operator *() const CDS_NOEXCEPT + { + assert( !empty()); + return *value_cast()( guard_->get_as()); + } + + /// Checks if the guarded pointer is \p nullptr + bool empty() const CDS_NOEXCEPT + { + return !guard_ || guard_->get( atomics::memory_order_relaxed ) == nullptr; + } + + /// \p bool operator returns !empty() + explicit operator bool() const CDS_NOEXCEPT + { + return !empty(); + } + + /// Clears guarded pointer + /** + If the guarded pointer has been released, the pointer can be disposed (freed) at any time. + Dereferncing the guarded pointer after \p release() is dangerous. + */ + void release() CDS_NOEXCEPT + { + free_guard(); + } + + //@cond + // For internal use only!!! + void reset(guarded_type * p) CDS_NOEXCEPT + { + alloc_guard(); + assert( guard_ ); + guard_->set(p); + } + //@endcond + + private: + //@cond + void alloc_guard() + { + if ( !guard_ ) + guard_ = hp::smr::tls()->hazards_.alloc(); + } + + void free_guard() + { + if ( guard_ ) { + hp::smr::tls()->hazards_.free( guard_ ); + guard_ = nullptr; + } + } + //@endcond + + private: + //@cond + hp::guard* guard_; + //@endcond + }; + + public: + /// \p scan() type + enum class scan_type { + classic = hp::classic, ///< classic scan as described in Michael's papers + inplace = hp::inplace ///< inplace scan without allocation + }; + + /// Initializes %HP singleton + /** + The constructor initializes Hazard Pointer SMR singleton with passed parameters. + If the instance does not yet exist then the function creates the instance. + Otherwise it does nothing. + + The Michael's %HP reclamation schema depends of three parameters: + - \p nHazardPtrCount - hazard pointer count per thread. Usually it is small number (up to 10) depending from + the data structure algorithms. If \p nHazardPtrCount = 0, the defaul value 8 is used + - \p nMaxThreadCount - max count of thread with using Hazard Pointer GC in your application. Default is 100. + - \p nMaxRetiredPtrCount - capacity of array of retired pointers for each thread. Must be greater than + nHazardPtrCount * nMaxThreadCount . Default is 2 * nHazardPtrCount * nMaxThreadCount . + */ + HP( + size_t nHazardPtrCount = 0, ///< Hazard pointer count per thread + size_t nMaxThreadCount = 0, ///< Max count of simultaneous working thread in your application + size_t nMaxRetiredPtrCount = 0, ///< Capacity of the array of retired objects for the thread + scan_type nScanType = scan_type::inplace ///< Scan type (see \p scan_type enum) + ) + { + hp::smr::construct( + nHazardPtrCount, + nMaxThreadCount, + nMaxRetiredPtrCount, + static_cast(nScanType) + ); + } + + /// Terminates GC singleton + /** + The destructor destroys %HP global object. After calling of this function you may \b NOT + use CDS data structures based on \p %cds::gc::HP. + Usually, %HP object is destroyed at the end of your \p main(). + */ + ~HP() + { + hp::smr::destruct( true ); + } + + /// Checks that required hazard pointer count \p nCountNeeded is less or equal then max hazard pointer count + /** + If nRequiredCount > get_hazard_ptr_count() then the exception \p not_enought_hazard_ptr is thrown + */ + static void check_available_guards( size_t nCountNeeded ) + { + hp::smr::check_hazard_ptr_count( nCountNeeded ); + } + + /// Set memory management functions + /** + @note This function may be called BEFORE creating an instance + of Hazard Pointer SMR + + SMR object allocates some memory for thread-specific data and for + creating SMR object. + By default, a standard \p new and \p delete operators are used for this. + */ + static void set_memory_allocator( + void* ( *alloc_func )( size_t size ), ///< \p malloc() function + void( *free_func )( void * p ) ///< \p free() function + ) + { + hp::smr::set_memory_allocator( alloc_func, free_func ); + } + + /// Returns max Hazard Pointer count + static size_t max_hazard_count() + { + return hp::smr::instance().get_hazard_ptr_count(); + } + + /// Returns max count of thread + static size_t max_thread_count() + { + return hp::smr::instance().get_max_thread_count(); + } + + /// Returns capacity of retired pointer array + static size_t retired_array_capacity() + { + return hp::smr::instance().get_max_retired_ptr_count(); + } + + /// Retire pointer \p p with function \p func + /** + The function places pointer \p p to array of pointers ready for removing. + (so called retired pointer array). The pointer can be safely removed when no hazard pointer points to it. + \p func is a disposer: when \p p can be safely removed, \p func is called. + */ + template + static void retire( T * p, void( *func )( T * )) + { + hp::thread_data* rec = hp::smr::tls(); + if ( !rec->retired_.push( hp::retired_ptr( p, func ))) + hp::smr::instance().scan( rec ); + } + + /// Retire pointer \p p with functor of type \p Disposer + /** + The function places pointer \p p to array of pointers ready for removing. + (so called retired pointer array). The pointer can be safely removed when no hazard pointer points to it. + + Deleting the pointer is an invocation of some object of type \p Disposer; the interface of \p Disposer is: + \code + template + struct disposer { + void operator()( T * p ) ; // disposing operator + }; + \endcode + Since the functor call can happen at any time after \p retire() call, additional restrictions are imposed to \p Disposer type: + - it should be stateless functor + - it should be default-constructible + - the result of functor call with argument \p p should not depend on where the functor will be called. + + \par Examples: + Operator \p delete functor: + \code + template + struct disposer { + void operator ()( T * p ) { + delete p; + } + }; + + // How to call HP::retire method + int * p = new int; + + // ... use p in lock-free manner + + cds::gc::HP::retire( p ) ; // place p to retired pointer array of HP GC + \endcode + + Functor based on \p std::allocator : + \code + template > + struct disposer { + template + void operator()( T * p ) { + typedef typename Alloc::templare rebind::other alloc_t; + alloc_t a; + a.destroy( p ); + a.deallocate( p, 1 ); + } + }; + \endcode + */ + template + static void retire( T * p ) + { + if ( !hp::smr::tls()->retired_.push( hp::retired_ptr( p, cds::details::static_functor::call ))) + scan(); + } + + /// Get current scan strategy + static scan_type getScanType() + { + return static_cast( hp::smr::instance().get_scan_type()); + } + + /// Checks if Hazard Pointer GC is constructed and may be used + static bool isUsed() + { + return hp::smr::isUsed(); + } + + /// Forces SMR call for current thread + /** + Usually, this function should not be called directly. + */ + static void scan() + { + hp::smr::instance().scan( hp::smr::tls()); + } + + /// Synonym for \p scan() + static void force_dispose() + { + scan(); + } + + /// Returns internal statistics + /** + The function clears \p st before gathering statistics. + + @note Internal statistics is available only if you compile + \p libcds and your program with \p -DCDS_ENABLE_HPSTAT key. + */ + static void statistics( stat& st ) + { + hp::smr::instance().statistics( st ); + } + + /// Returns post-mortem statistics + /** + Post-mortem statistics is gathered in the \p %HP object destructor + and can be accessible after destructing the global \p %HP object. + + @note Internal statistics is available only if you compile + \p libcds and your program with \p -DCDS_ENABLE_HPSTAT key. + + Usage: + \code + int main() + { + cds::Initialize(); + { + // Initialize HP SMR + cds::gc::HP hp; + + // deal with HP-based data structured + // ... + } + + // HP object destroyed + // Get total post-mortem statistics + cds::gc::HP::stat const& st = cds::gc::HP::postmortem_statistics(); + + printf( "HP statistics:\n" + "\tthread count = %llu\n" + "\tguard allocated = %llu\n" + "\tguard freed = %llu\n" + "\tretired data count = %llu\n" + "\tfree data count = %llu\n" + "\tscan() call count = %llu\n" + "\thelp_scan() call count = %llu\n", + st.thread_rec_count, + st.guard_allocated, st.guard_freed, + st.retired_count, st.free_count, + st.scan_count, st.help_scan_count + ); + + cds::Terminate(); + } + \endcode + */ + static stat const& postmortem_statistics(); + }; + +}} // namespace cds::gc + +#endif // #ifndef CDSLIB_GC_HP_SMR_H + diff --git a/cds/gc/impl/dhp_decl.h b/cds/gc/impl/dhp_decl.h deleted file mode 100644 index e4a46ad5..00000000 --- a/cds/gc/impl/dhp_decl.h +++ /dev/null @@ -1,823 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_IMPL_DHP_DECL_H -#define CDSLIB_GC_IMPL_DHP_DECL_H - -#include -#include -#include - -namespace cds { namespace gc { - - /// Dynamic Hazard Pointer garbage collector - /** @ingroup cds_garbage_collector - @headerfile cds/gc/dhp.h - - Implementation of Dynamic Hazard Pointer garbage collector. - - Sources: - - [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes" - - [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects" - - [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers" - - Dynamic Hazard Pointers SMR (safe memory reclamation) provides an unbounded number of hazard pointer per thread - despite of classic Hazard Pointer SMR in which the count of the hazard pointef per thread is limited. - - See \ref cds_how_to_use "How to use" section for details how to apply garbage collector. - */ - class DHP - { - public: - /// Native guarded pointer type - /** - @headerfile cds/gc/dhp.h - */ - typedef void * guarded_pointer; - - /// Atomic reference - /** - @headerfile cds/gc/dhp.h - */ - template using atomic_ref = atomics::atomic; - - /// Atomic type - /** - @headerfile cds/gc/dhp.h - */ - template using atomic_type = atomics::atomic; - - /// Atomic marked pointer - /** - @headerfile cds/gc/dhp.h - */ - template using atomic_marked_ptr = atomics::atomic; - - /// Thread GC implementation for internal usage - /** - @headerfile cds/gc/dhp.h - */ - typedef dhp::ThreadGC thread_gc_impl; - - /// Thread-level garbage collector - /** - @headerfile cds/gc/dhp.h - This class performs automatically attaching/detaching Dynamic Hazard Pointer GC - for the current thread. - */ - class thread_gc: public thread_gc_impl - { - //@cond - bool m_bPersistent; - //@endcond - public: - /// Constructor - /** - The constructor attaches the current thread to the Dynamic Hazard Pointer GC - if it is not yet attached. - The \p bPersistent parameter specifies attachment persistence: - - \p true - the class destructor will not detach the thread from Dynamic Hazard Pointer GC. - - \p false (default) - the class destructor will detach the thread from Dynamic Hazard Pointer GC. - */ - thread_gc( - bool bPersistent = false - ) ; // inline in dhp_impl.h - - /// Destructor - /** - If the object has been created in persistent mode, the destructor does nothing. - Otherwise it detaches the current thread from Dynamic Hazard Pointer GC. - */ - ~thread_gc() ; // inline in dhp_impl.h - - public: // for internal use only!!! - //@cond - static dhp::details::guard_data* alloc_guard(); // inline in dhp_impl.h - static void free_guard( dhp::details::guard_data* g ); // inline in dhp_impl.h - //@endcond - }; - - - /// Dynamic Hazard Pointer guard - /** - @headerfile cds/gc/dhp.h - - A guard is the hazard pointer. - Additionally, the \p %Guard class manages allocation and deallocation of the hazard pointer - - \p %Guard object is movable but not copyable. - - The guard object can be in two states: - - unlinked - the guard is not linked with any internal hazard pointer. - In this state no operation except \p link() and move assignment is supported. - - linked (default) - the guard allocates an internal hazard pointer and fully operable. - - Due to performance reason the implementation does not check state of the guard in runtime. - - @warning Move assignment can transfer the guard in unlinked state, use with care. - */ - class Guard - { - public: - /// Default ctor allocates a guard (hazard pointer) from thread-private storage - Guard() CDS_NOEXCEPT - : m_guard( thread_gc::alloc_guard()) - {} - - /// Initilalizes an unlinked guard i.e. the guard contains no hazard pointer. Used for move semantics support - explicit Guard( std::nullptr_t ) CDS_NOEXCEPT - : m_guard( nullptr ) - {} - - /// Move ctor - \p src guard becomes unlinked (transfer internal guard ownership) - Guard( Guard&& src ) CDS_NOEXCEPT - : m_guard( src.m_guard ) - { - src.m_guard = nullptr; - } - - /// Move assignment: the internal guards are swapped between \p src and \p this - /** - @warning \p src will become in unlinked state if \p this was unlinked on entry. - */ - Guard& operator=( Guard&& src ) CDS_NOEXCEPT - { - std::swap( m_guard, src.m_guard ); - return *this; - } - - /// Copy ctor is prohibited - the guard is not copyable - Guard( Guard const& ) = delete; - - /// Copy assignment is prohibited - Guard& operator=( Guard const& ) = delete; - - ~Guard() - { - if ( m_guard ) - thread_gc::free_guard( m_guard ); - } - - /// Checks if the guard object linked with any internal hazard pointer - bool is_linked() const - { - return m_guard != nullptr; - } - - /// Links the guard with internal hazard pointer if the guard is in unlinked state - void link() - { - if ( !m_guard ) - m_guard = thread_gc::alloc_guard(); - } - - /// Unlinks the guard from internal hazard pointer; the guard becomes in unlinked state - void unlink() - { - if ( m_guard ) { - thread_gc::free_guard( m_guard ); - m_guard = nullptr; - } - } - - /// Protects a pointer of type atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store it - to the HP slot repeatedly until the guard's value equals \p toGuard - */ - template - T protect( atomics::atomic const& toGuard ) - { - T pCur = toGuard.load(atomics::memory_order_acquire); - T pRet; - do { - pRet = assign( pCur ); - pCur = toGuard.load(atomics::memory_order_acquire); - } while ( pRet != pCur ); - return pCur; - } - - /// Protects a converted pointer of type atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store result of \p f functor - to the HP slot repeatedly until the guard's value equals \p toGuard. - - The function is useful for intrusive containers when \p toGuard is a node pointer - that should be converted to a pointer to the value type before guarding. - The parameter \p f of type Func is a functor that makes this conversion: - \code - struct functor { - value_type * operator()( T * p ); - }; - \endcode - Really, the result of f( toGuard.load()) is assigned to the hazard pointer. - */ - template - T protect( atomics::atomic const& toGuard, Func f ) - { - T pCur = toGuard.load(atomics::memory_order_acquire); - T pRet; - do { - pRet = pCur; - assign( f( pCur )); - pCur = toGuard.load(atomics::memory_order_acquire); - } while ( pRet != pCur ); - return pCur; - } - - /// Store \p p to the guard - /** - The function is just an assignment, no loop is performed. - Can be used for a pointer that cannot be changed concurrently - or for already guarded pointer. - */ - template - T* assign( T* p ) - { - assert( m_guard != nullptr ); - m_guard->pPost.store( p, atomics::memory_order_release ); - return p; - } - - //@cond - std::nullptr_t assign( std::nullptr_t ) - { - clear(); - return nullptr; - } - //@endcond - - /// Store marked pointer \p p to the guard - /** - The function is just an assignment of p.ptr(), no loop is performed. - Can be used for a marked pointer that cannot be changed concurrently - or for already guarded pointer. - */ - template - T* assign( cds::details::marked_ptr p ) - { - return assign( p.ptr()); - } - - /// Copy from \p src guard to \p this guard - void copy( Guard const& src ) - { - assign( src.get_native()); - } - - /// Clears value of the guard - void clear() - { - assert( m_guard != nullptr ); - m_guard->pPost.store( nullptr, atomics::memory_order_release ); - } - - /// Gets the value currently protected (relaxed read) - template - T * get() const - { - return reinterpret_cast( get_native()); - } - - /// Gets native guarded pointer stored - void* get_native() const - { - assert( m_guard != nullptr ); - return m_guard->pPost.load( atomics::memory_order_acquire ); - } - - //@cond - dhp::details::guard_data* release() - { - dhp::details::guard_data* g = m_guard; - m_guard = nullptr; - return g; - } - - dhp::details::guard_data*& guard_ref() - { - return m_guard; - } - //@endcond - - private: - //@cond - dhp::details::guard_data* m_guard; - //@endcond - }; - - /// Array of Dynamic Hazard Pointer guards - /** - @headerfile cds/gc/dhp.h - The class is intended for allocating an array of hazard pointer guards. - Template parameter \p Count defines the size of the array. - - A \p %GuardArray object is not copy- and move-constructible - and not copy- and move-assignable. - */ - template - class GuardArray - { - public: - /// Rebind array for other size \p OtherCount - template - struct rebind { - typedef GuardArray other ; ///< rebinding result - }; - - /// Array capacity - static CDS_CONSTEXPR const size_t c_nCapacity = Count; - - public: - /// Default ctor allocates \p Count hazard pointers - GuardArray(); // inline in dhp_impl.h - - /// Move ctor is prohibited - GuardArray( GuardArray&& ) = delete; - - /// Move assignment is prohibited - GuardArray& operator=( GuardArray&& ) = delete; - - /// Copy ctor is prohibited - GuardArray( GuardArray const& ) = delete; - - /// Copy assignment is prohibited - GuardArray& operator=( GuardArray const& ) = delete; - - /// Frees allocated hazard pointers - ~GuardArray(); // inline in dhp_impl.h - - /// Protects a pointer of type \p atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store it - to the slot \p nIndex repeatedly until the guard's value equals \p toGuard - */ - template - T protect( size_t nIndex, atomics::atomic const& toGuard ) - { - T pRet; - do { - pRet = assign( nIndex, toGuard.load(atomics::memory_order_acquire)); - } while ( pRet != toGuard.load(atomics::memory_order_relaxed)); - - return pRet; - } - - /// Protects a pointer of type \p atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store it - to the slot \p nIndex repeatedly until the guard's value equals \p toGuard - - The function is useful for intrusive containers when \p toGuard is a node pointer - that should be converted to a pointer to the value type before guarding. - The parameter \p f of type Func is a functor to make that conversion: - \code - struct functor { - value_type * operator()( T * p ); - }; - \endcode - Actually, the result of f( toGuard.load()) is assigned to the hazard pointer. - */ - template - T protect( size_t nIndex, atomics::atomic const& toGuard, Func f ) - { - T pRet; - do { - assign( nIndex, f( pRet = toGuard.load(atomics::memory_order_acquire))); - } while ( pRet != toGuard.load(atomics::memory_order_relaxed)); - - return pRet; - } - - /// Store \p p to the slot \p nIndex - /** - The function is just an assignment, no loop is performed. - */ - template - T * assign( size_t nIndex, T * p ) - { - assert( nIndex < capacity()); - assert( m_arr[nIndex] != nullptr ); - - m_arr[nIndex]->pPost.store( p, atomics::memory_order_release ); - return p; - } - - /// Store marked pointer \p p to the guard - /** - The function is just an assignment of p.ptr(), no loop is performed. - Can be used for a marked pointer that cannot be changed concurrently - or for already guarded pointer. - */ - template - T * assign( size_t nIndex, cds::details::marked_ptr p ) - { - return assign( nIndex, p.ptr()); - } - - /// Copy guarded value from \p src guard to slot at index \p nIndex - void copy( size_t nIndex, Guard const& src ) - { - assign( nIndex, src.get_native()); - } - - /// Copy guarded value from slot \p nSrcIndex to slot at index \p nDestIndex - void copy( size_t nDestIndex, size_t nSrcIndex ) - { - assign( nDestIndex, get_native( nSrcIndex )); - } - - /// Clear value of the slot \p nIndex - void clear( size_t nIndex ) - { - assert( nIndex < capacity()); - assert( m_arr[nIndex] != nullptr ); - - m_arr[nIndex]->pPost.store( nullptr, atomics::memory_order_release ); - } - - /// Get current value of slot \p nIndex - template - T * get( size_t nIndex ) const - { - return reinterpret_cast( get_native( nIndex )); - } - - /// Get native guarded pointer stored - guarded_pointer get_native( size_t nIndex ) const - { - assert( nIndex < capacity()); - assert( m_arr[nIndex] != nullptr ); - - return m_arr[nIndex]->pPost.load( atomics::memory_order_acquire ); - } - - //@cond - dhp::details::guard_data* release( size_t nIndex ) CDS_NOEXCEPT - { - assert( nIndex < capacity()); - - dhp::details::guard_data* ret = m_arr[ nIndex ]; - m_arr[nIndex] = nullptr; - return ret; - } - //@endcond - - /// Capacity of the guard array - static CDS_CONSTEXPR size_t capacity() - { - return Count; - } - - private: - //@cond - dhp::details::guard_data* m_arr[c_nCapacity]; - //@endcond - }; - - /// Guarded pointer - /** - A guarded pointer is a pair of a pointer and GC's guard. - Usually, it is used for returning a pointer to the item from an lock-free container. - The guard prevents the pointer to be early disposed (freed) by GC. - After destructing \p %guarded_ptr object the pointer can be disposed (freed) automatically at any time. - - Template arguments: - - \p GuardedType - a type which the guard stores - - \p ValueType - a value type - - \p Cast - a functor for converting GuardedType* to ValueType*. Default is \p void (no casting). - - For intrusive containers, \p GuardedType is the same as \p ValueType and no casting is needed. - In such case the \p %guarded_ptr is: - @code - typedef cds::gc::DHP::guarded_ptr< foo > intrusive_guarded_ptr; - @endcode - - For standard (non-intrusive) containers \p GuardedType is not the same as \p ValueType and casting is needed. - For example: - @code - struct foo { - int const key; - std::string value; - }; - - struct value_accessor { - std::string* operator()( foo* pFoo ) const - { - return &(pFoo->value); - } - }; - - // Guarded ptr - typedef cds::gc::DHP::guarded_ptr< Foo, std::string, value_accessor > nonintrusive_guarded_ptr; - @endcode - - You don't need use this class directly. - All set/map container classes from \p libcds declare the typedef for \p %guarded_ptr with appropriate casting functor. - */ - template - class guarded_ptr - { - //@cond - struct trivial_cast { - ValueType * operator()( GuardedType * p ) const - { - return p; - } - }; - - template friend class guarded_ptr; - //@endcond - - public: - typedef GuardedType guarded_type; ///< Guarded type - typedef ValueType value_type; ///< Value type - - /// Functor for casting \p guarded_type to \p value_type - typedef typename std::conditional< std::is_same::value, trivial_cast, Cast >::type value_cast; - - public: - /// Creates empty guarded pointer - guarded_ptr() CDS_NOEXCEPT - : m_guard( nullptr ) - {} - - //@cond - explicit guarded_ptr( dhp::details::guard_data* g ) CDS_NOEXCEPT - : m_guard( g ) - {} - - /// Initializes guarded pointer with \p p - explicit guarded_ptr( guarded_type * p ) CDS_NOEXCEPT - { - reset( p ); - } - explicit guarded_ptr( std::nullptr_t ) CDS_NOEXCEPT - : m_guard( nullptr ) - {} - //@endcond - - /// Move ctor - guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT - : m_guard( gp.m_guard ) - { - gp.m_guard = nullptr; - } - - /// Move ctor - template - guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT - : m_guard( gp.m_guard ) - { - gp.m_guard = nullptr; - } - - /// Ctor from \p Guard - explicit guarded_ptr( Guard&& g ) CDS_NOEXCEPT - : m_guard( g.release()) - {} - - /// The guarded pointer is not copy-constructible - guarded_ptr( guarded_ptr const& gp ) = delete; - - /// Clears the guarded pointer - /** - \ref release is called if guarded pointer is not \ref empty - */ - ~guarded_ptr() CDS_NOEXCEPT - { - release(); - } - - /// Move-assignment operator - guarded_ptr& operator=( guarded_ptr&& gp ) CDS_NOEXCEPT - { - std::swap( m_guard, gp.m_guard ); - return *this; - } - - /// Move-assignment from \p Guard - guarded_ptr& operator=( Guard&& g ) CDS_NOEXCEPT - { - std::swap( m_guard, g.guard_ref()); - return *this; - } - - /// The guarded pointer is not copy-assignable - guarded_ptr& operator=(guarded_ptr const& gp) = delete; - - /// Returns a pointer to guarded value - value_type * operator ->() const CDS_NOEXCEPT - { - assert( !empty()); - return value_cast()( reinterpret_cast(m_guard->get())); - } - - /// Returns a reference to guarded value - value_type& operator *() CDS_NOEXCEPT - { - assert( !empty()); - return *value_cast()(reinterpret_cast(m_guard->get())); - } - - /// Returns const reference to guarded value - value_type const& operator *() const CDS_NOEXCEPT - { - assert( !empty()); - return *value_cast()(reinterpret_cast(m_guard->get())); - } - - /// Checks if the guarded pointer is \p nullptr - bool empty() const CDS_NOEXCEPT - { - return m_guard == nullptr || m_guard->get( atomics::memory_order_relaxed ) == nullptr; - } - - /// \p bool operator returns !empty() - explicit operator bool() const CDS_NOEXCEPT - { - return !empty(); - } - - /// Clears guarded pointer - /** - If the guarded pointer has been released, the pointer can be disposed (freed) at any time. - Dereferncing the guarded pointer after \p release() is dangerous. - */ - void release() CDS_NOEXCEPT - { - free_guard(); - } - - //@cond - // For internal use only!!! - void reset(guarded_type * p) CDS_NOEXCEPT - { - alloc_guard(); - assert( m_guard ); - m_guard->set( p ); - } - - //@endcond - - private: - //@cond - void alloc_guard() - { - if ( !m_guard ) - m_guard = thread_gc::alloc_guard(); - } - - void free_guard() - { - if ( m_guard ) { - thread_gc::free_guard( m_guard ); - m_guard = nullptr; - } - } - //@endcond - - private: - //@cond - dhp::details::guard_data* m_guard; - //@endcond - }; - - public: - /// Initializes %DHP memory manager singleton - /** - Constructor creates and initializes %DHP global object. - %DHP object should be created before using CDS data structure based on \p %cds::gc::DHP GC. Usually, - it is created in the \p main() function. - After creating of global object you may use CDS data structures based on \p %cds::gc::DHP. - - \par Parameters - - \p nLiberateThreshold - \p scan() threshold. When count of retired pointers reaches this value, - the \p scan() member function would be called for freeing retired pointers. - - \p nInitialThreadGuardCount - initial count of guard allocated for each thread. - When a thread is initialized the GC allocates local guard pool for the thread from common guard pool. - 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, - i.e. the count of simultaneously working threads that remove the elements - of DHP-based concurrent data structure. Default value is 16. - */ - DHP( - size_t nLiberateThreshold = 1024 - , size_t nInitialThreadGuardCount = 8 - , size_t nEpochCount = 16 - ) - { - dhp::GarbageCollector::Construct( nLiberateThreshold, nInitialThreadGuardCount, nEpochCount ); - } - - /// Destroys %DHP memory manager - /** - The destructor destroys %DHP global object. After calling of this function you may \b NOT - use CDS data structures based on \p %cds::gc::DHP. - Usually, %DHP object is destroyed at the end of your \p main(). - */ - ~DHP() - { - dhp::GarbageCollector::Destruct(); - } - - /// Checks if count of hazard pointer is no less than \p nCountNeeded - /** - The function always returns \p true since the guard count is unlimited for - \p %gc::DHP garbage collector. - */ - static CDS_CONSTEXPR bool check_available_guards( -#ifdef CDS_DOXYGEN_INVOKED - size_t nCountNeeded, -#else - size_t, -#endif - bool /*bRaiseException*/ = true ) - { - return true; - } - - /// Retire pointer \p p with function \p pFunc - /** - The function places pointer \p p to array of pointers ready for removing. - (so called retired pointer array). The pointer can be safely removed when no guarded pointer points to it. - Deleting the pointer is the function \p pFunc call. - */ - template - static void retire( T * p, void (* pFunc)(T *)) - { - dhp::GarbageCollector::instance().retirePtr( p, pFunc ); - } - - /// Retire pointer \p p with functor of type \p Disposer - /** - The function places pointer \p p to array of pointers ready for removing. - (so called retired pointer array). The pointer can be safely removed when no guarded pointer points to it. - - See \p gc::HP::retire for \p Disposer requirements. - */ - template - static void retire( T * p ) - { - retire( p, cds::details::static_functor::call ); - } - - /// Checks if Dynamic Hazard Pointer GC is constructed and may be used - static bool isUsed() - { - return dhp::GarbageCollector::isUsed(); - } - - /// Forced GC cycle call for current thread - /** - Usually, this function should not be called directly. - */ - static void scan() ; // inline in dhp_impl.h - - /// Synonym for \ref scan() - static void force_dispose() - { - scan(); - } - }; - -}} // namespace cds::gc - -#endif // #ifndef CDSLIB_GC_IMPL_DHP_DECL_H diff --git a/cds/gc/impl/dhp_impl.h b/cds/gc/impl/dhp_impl.h deleted file mode 100644 index 70a68df7..00000000 --- a/cds/gc/impl/dhp_impl.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_IMPL_DHP_IMPL_H -#define CDSLIB_GC_IMPL_DHP_IMPL_H - -#include - -//@cond -namespace cds { namespace gc { - - namespace dhp { - - static inline ThreadGC& get_thread_gc() - { - return cds::threading::getGC(); - } - - //inline Guard::Guard() - //{ - // cds::threading::getGC().allocGuard( *this ); - //} - - //inline Guard::~Guard() - //{ - // cds::threading::getGC().freeGuard( *this ); - //} - - //template - //inline GuardArray::GuardArray() - //{ - // cds::threading::getGC().allocGuard( *this ); - //} - - //template - //inline GuardArray::~GuardArray() - //{ - // cds::threading::getGC().freeGuard( *this ); - //} - } // namespace dhp - - - inline DHP::thread_gc::thread_gc( - bool bPersistent - ) - : m_bPersistent( bPersistent ) - { - if ( !cds::threading::Manager::isThreadAttached()) - cds::threading::Manager::attachThread(); - } - - inline DHP::thread_gc::~thread_gc() - { - if ( !m_bPersistent ) - cds::threading::Manager::detachThread(); - } - - inline /*static*/ dhp::details::guard_data* DHP::thread_gc::alloc_guard() - { - return dhp::get_thread_gc().allocGuard(); - } - inline /*static*/ void DHP::thread_gc::free_guard( dhp::details::guard_data* g ) - { - if ( g ) - dhp::get_thread_gc().freeGuard( g ); - } - - template - inline DHP::GuardArray::GuardArray() - { - dhp::get_thread_gc().allocGuard( m_arr ); - } - - template - inline DHP::GuardArray::~GuardArray() - { - dhp::get_thread_gc().freeGuard( m_arr ); - } - - inline void DHP::scan() - { - cds::threading::getGC().scan(); - } - -}} // namespace cds::gc -//@endcond - -#endif // #ifndef CDSLIB_GC_IMPL_DHP_IMPL_H diff --git a/cds/gc/impl/hp_decl.h b/cds/gc/impl/hp_decl.h deleted file mode 100644 index b35cc2a2..00000000 --- a/cds/gc/impl/hp_decl.h +++ /dev/null @@ -1,883 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_IMPL_HP_DECL_H -#define CDSLIB_GC_IMPL_HP_DECL_H - -#include // overflow_error -#include -#include - -namespace cds { namespace gc { - /// @defgroup cds_garbage_collector Garbage collectors - - /// Hazard Pointer garbage collector - /** @ingroup cds_garbage_collector - @headerfile cds/gc/hp.h - - Implementation of classic Hazard Pointer garbage collector. - - Sources: - - [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes" - - [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects" - - [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers" - - Hazard Pointer garbage collector is a singleton. The main user-level part of Hazard Pointer schema is - GC class \p %cds::gc::HP and its nested classes. Before use any HP-related class you must initialize HP garbage collector - by contructing \p %cds::gc::HP object in beginning of your \p main(). - See \ref cds_how_to_use "How to use" section for details how to apply garbage collector. - */ - class HP - { - public: - /// Native guarded pointer type - /** - @headerfile cds/gc/hp.h - */ - typedef gc::hp::hazard_pointer guarded_pointer; - - /// Atomic reference - /** - @headerfile cds/gc/hp.h - */ - template using atomic_ref = atomics::atomic; - - /// Atomic marked pointer - /** - @headerfile cds/gc/hp.h - */ - template using atomic_marked_ptr = atomics::atomic; - - /// Atomic type - /** - @headerfile cds/gc/hp.h - */ - template using atomic_type = atomics::atomic; - - /// Thread GC implementation for internal usage - /** - @headerfile cds/gc/hp.h - */ - typedef hp::ThreadGC thread_gc_impl; - - /// Exception "Too many Hazard Pointer" - typedef hp::GarbageCollector::too_many_hazard_ptr too_many_hazard_ptr_exception; - - /// Wrapper for hp::ThreadGC class - /** - @headerfile cds/gc/hp.h - This class performs automatically attaching/detaching Hazard Pointer GC - for the current thread. - */ - class thread_gc: public thread_gc_impl - { - //@cond - bool m_bPersistent; - //@endcond - public: - - /// Constructor - /** - The constructor attaches the current thread to the Hazard Pointer GC - if it is not yet attached. - The \p bPersistent parameter specifies attachment persistence: - - \p true - the class destructor will not detach the thread from Hazard Pointer GC. - - \p false (default) - the class destructor will detach the thread from Hazard Pointer GC. - */ - thread_gc( - bool bPersistent = false - ) ; //inline in hp_impl.h - - /// Destructor - /** - If the object has been created in persistent mode, the destructor does nothing. - Otherwise it detaches the current thread from Hazard Pointer GC. - */ - ~thread_gc() ; // inline in hp_impl.h - - public: // for internal use only!!! - //@cond - static cds::gc::hp::details::hp_guard* alloc_guard(); // inline in hp_impl.h - static void free_guard( cds::gc::hp::details::hp_guard* g ); // inline in hp_impl.h - //@endcond - }; - - /// Hazard Pointer guard - /** - @headerfile cds/gc/hp.h - - A guard is a hazard pointer. - Additionally, the \p %Guard class manages allocation and deallocation of the hazard pointer. - - \p %Guard object is movable but not copyable. - - The guard object can be in two states: - - unlinked - the guard is not linked with any internal hazard pointer. - In this state no operation except \p link() and move assignment is supported. - - linked (default) - the guard allocates an internal hazard pointer and fully operable. - - Due to performance reason the implementation does not check state of the guard in runtime. - - @warning Move assignment can transfer the guard in unlinked state, use with care. - */ - class Guard - { - public: - /// Default ctor allocates a guard (hazard pointer) from thread-private storage - /** - @warning Can throw \p too_many_hazard_ptr_exception if internal hazard pointer objects are exhausted. - */ - Guard(); // inline in hp_impl.h - - /// Initilalizes an unlinked guard i.e. the guard contains no hazard pointer. Used for move semantics support - explicit Guard( std::nullptr_t ) CDS_NOEXCEPT - : m_guard( nullptr ) - {} - - /// Move ctor - \p src guard becomes unlinked (transfer internal guard ownership) - Guard( Guard&& src ) CDS_NOEXCEPT - : m_guard( src.m_guard ) - { - src.m_guard = nullptr; - } - - /// Move assignment: the internal guards are swapped between \p src and \p this - /** - @warning \p src will become in unlinked state if \p this was unlinked on entry. - */ - Guard& operator=( Guard&& src ) CDS_NOEXCEPT - { - std::swap( m_guard, src.m_guard ); - return *this; - } - - /// Copy ctor is prohibited - the guard is not copyable - Guard( Guard const& ) = delete; - - /// Copy assignment is prohibited - Guard& operator=( Guard const& ) = delete; - - /// Frees the internal hazard pointer if the guard is in linked state - ~Guard() - { - unlink(); - } - - /// Checks if the guard object linked with any internal hazard pointer - bool is_linked() const - { - return m_guard != nullptr; - } - - /// Links the guard with internal hazard pointer if the guard is in unlinked state - /** - @warning Can throw \p too_many_hazard_ptr_exception if internal hazard pointer objects are exhausted. - */ - void link(); // inline in hp_impl.h - - /// Unlinks the guard from internal hazard pointer; the guard becomes in unlinked state - void unlink(); // inline in hp_impl.h - - /// Protects a pointer of type \p atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store it - to the HP slot repeatedly until the guard's value equals \p toGuard - - @warning The guad object should be in linked state, otherwise the result is undefined - */ - template - T protect( atomics::atomic const& toGuard ) - { - assert( m_guard != nullptr ); - - T pCur = toGuard.load(atomics::memory_order_acquire); - T pRet; - do { - pRet = assign( pCur ); - pCur = toGuard.load(atomics::memory_order_acquire); - } while ( pRet != pCur ); - return pCur; - } - - /// Protects a converted pointer of type \p atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store result of \p f functor - to the HP slot repeatedly until the guard's value equals \p toGuard. - - The function is useful for intrusive containers when \p toGuard is a node pointer - that should be converted to a pointer to the value before protecting. - The parameter \p f of type Func is a functor that makes this conversion: - \code - struct functor { - value_type * operator()( T * p ); - }; - \endcode - Actually, the result of f( toGuard.load()) is assigned to the hazard pointer. - - @warning The guad object should be in linked state, otherwise the result is undefined - */ - template - T protect( atomics::atomic const& toGuard, Func f ) - { - assert( m_guard != nullptr ); - - T pCur = toGuard.load(atomics::memory_order_acquire); - T pRet; - do { - pRet = pCur; - assign( f( pCur )); - pCur = toGuard.load(atomics::memory_order_acquire); - } while ( pRet != pCur ); - return pCur; - } - - /// Store \p p to the guard - /** - The function equals to a simple assignment the value \p p to guard, no loop is performed. - Can be used for a pointer that cannot be changed concurrently - - @warning The guad object should be in linked state, otherwise the result is undefined - */ - template - T * assign( T* p ); // inline in hp_impl.h - - //@cond - std::nullptr_t assign( std::nullptr_t ) - { - assert(m_guard != nullptr ); - return *m_guard = nullptr; - } - //@endcond - - /// Copy a value guarded from \p src guard to \p this guard (valid only in linked state) - void copy( Guard const& src ) - { - assign( src.get_native()); - } - - /// Store marked pointer \p p to the guard - /** - The function equals to a simple assignment of p.ptr(), no loop is performed. - Can be used for a marked pointer that cannot be changed concurrently. - - @warning The guad object should be in linked state, otherwise the result is undefined - */ - template - T * assign( cds::details::marked_ptr p ) - { - return assign( p.ptr()); - } - - /// Clear value of the guard (valid only in linked state) - void clear() - { - assign( nullptr ); - } - - /// Get the value currently protected (valid only in linked state) - template - T * get() const - { - return reinterpret_cast( get_native()); - } - - /// Get native hazard pointer stored (valid only in linked state) - guarded_pointer get_native() const - { - assert( m_guard != nullptr ); - return m_guard->get(); - } - - //@cond - hp::details::hp_guard* release() - { - hp::details::hp_guard* g = m_guard; - m_guard = nullptr; - return g; - } - - hp::details::hp_guard*& guard_ref() - { - return m_guard; - } - //@endcond - - private: - //@cond - hp::details::hp_guard* m_guard; - //@endcond - }; - - /// Array of Hazard Pointer guards - /** - @headerfile cds/gc/hp.h - The class is intended for allocating an array of hazard pointer guards. - Template parameter \p Count defines the size of the array. - - */ - template - class GuardArray - { - public: - /// Rebind array for other size \p Count2 - template - struct rebind { - typedef GuardArray other; ///< rebinding result - }; - - /// Array capacity - static CDS_CONSTEXPR const size_t c_nCapacity = Count; - - public: - /// Default ctor allocates \p Count hazard pointers - GuardArray(); // inline in hp_impl.h - - /// Move ctor is prohibited - GuardArray( GuardArray&& ) = delete; - - /// Move assignment is prohibited - GuardArray& operator=( GuardArray&& ) = delete; - - /// Copy ctor is prohibited - GuardArray( GuardArray const& ) = delete; - - /// Copy assignment is prohibited - GuardArray& operator=( GuardArray const& ) = delete; - - /// Frees allocated hazard pointers - ~GuardArray(); // inline in hp_impl.h - - /// Protects a pointer of type \p atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store it - to the slot \p nIndex repeatedly until the guard's value equals \p toGuard - */ - template - T protect( size_t nIndex, atomics::atomic const& toGuard ) - { - assert( nIndex < capacity()); - - T pRet; - do { - pRet = assign( nIndex, toGuard.load(atomics::memory_order_acquire)); - } while ( pRet != toGuard.load(atomics::memory_order_acquire)); - - return pRet; - } - - /// Protects a pointer of type \p atomic - /** - Return the value of \p toGuard - - The function tries to load \p toGuard and to store it - to the slot \p nIndex repeatedly until the guard's value equals \p toGuard - - The function is useful for intrusive containers when \p toGuard is a node pointer - that should be converted to a pointer to the value type before guarding. - The parameter \p f of type Func is a functor that makes this conversion: - \code - struct functor { - value_type * operator()( T * p ); - }; - \endcode - Really, the result of f( toGuard.load()) is assigned to the hazard pointer. - */ - template - T protect( size_t nIndex, atomics::atomic const& toGuard, Func f ) - { - assert( nIndex < capacity()); - - T pRet; - do { - assign( nIndex, f( pRet = toGuard.load(atomics::memory_order_acquire))); - } while ( pRet != toGuard.load(atomics::memory_order_acquire)); - - return pRet; - } - - /// Store \p to the slot \p nIndex - /** - The function equals to a simple assignment, no loop is performed. - */ - template - T * assign( size_t nIndex, T * p ); // inline in hp_impl.h - - /// Store marked pointer \p p to the guard - /** - The function equals to a simple assignment of p.ptr(), no loop is performed. - Can be used for a marked pointer that cannot be changed concurrently. - */ - template - T * assign( size_t nIndex, cds::details::marked_ptr p ) - { - return assign( nIndex, p.ptr()); - } - - /// Copy guarded value from \p src guard to slot at index \p nIndex - void copy( size_t nIndex, Guard const& src ) - { - assign( nIndex, src.get_native()); - } - - /// Copy guarded value from slot \p nSrcIndex to the slot \p nDestIndex - void copy( size_t nDestIndex, size_t nSrcIndex ) - { - assign( nDestIndex, get_native( nSrcIndex )); - } - - /// Clear value of the slot \p nIndex - void clear( size_t nIndex ) - { - m_arr.clear( nIndex ); - } - - /// Get current value of slot \p nIndex - template - T * get( size_t nIndex ) const - { - return reinterpret_cast( get_native( nIndex )); - } - - /// Get native hazard pointer stored - guarded_pointer get_native( size_t nIndex ) const - { - assert( nIndex < capacity()); - return m_arr[nIndex]->get(); - } - - //@cond - hp::details::hp_guard* release( size_t nIndex ) CDS_NOEXCEPT - { - return m_arr.release( nIndex ); - } - //@endcond - - /// Capacity of the guard array - static CDS_CONSTEXPR size_t capacity() - { - return c_nCapacity; - } - - private: - //@cond - hp::details::hp_array m_arr; - //@endcond - }; - - /// Guarded pointer - /** - A guarded pointer is a pair of a pointer and GC's guard. - Usually, it is used for returning a pointer to the item from an lock-free container. - The guard prevents the pointer to be early disposed (freed) by GC. - After destructing \p %guarded_ptr object the pointer can be disposed (freed) automatically at any time. - - Template arguments: - - \p GuardedType - a type which the guard stores - - \p ValueType - a value type - - \p Cast - a functor for converting GuardedType* to ValueType*. Default is \p void (no casting). - - For intrusive containers, \p GuardedType is the same as \p ValueType and no casting is needed. - In such case the \p %guarded_ptr is: - @code - typedef cds::gc::HP::guarded_ptr< foo > intrusive_guarded_ptr; - @endcode - - For standard (non-intrusive) containers \p GuardedType is not the same as \p ValueType and casting is needed. - For example: - @code - struct foo { - int const key; - std::string value; - }; - - struct value_accessor { - std::string* operator()( foo* pFoo ) const - { - return &(pFoo->value); - } - }; - - // Guarded ptr - typedef cds::gc::HP::guarded_ptr< Foo, std::string, value_accessor > nonintrusive_guarded_ptr; - @endcode - - You don't need use this class directly. - All set/map container classes from \p libcds declare the typedef for \p %guarded_ptr with appropriate casting functor. - */ - template - class guarded_ptr - { - //@cond - struct trivial_cast { - ValueType * operator()( GuardedType * p ) const - { - return p; - } - }; - - template friend class guarded_ptr; - //@endcond - - public: - typedef GuardedType guarded_type; ///< Guarded type - typedef ValueType value_type; ///< Value type - - /// Functor for casting \p guarded_type to \p value_type - typedef typename std::conditional< std::is_same::value, trivial_cast, Cast >::type value_cast; - - public: - /// Creates empty guarded pointer - guarded_ptr() CDS_NOEXCEPT - : m_pGuard(nullptr) - {} - - //@cond - explicit guarded_ptr( hp::details::hp_guard* g ) CDS_NOEXCEPT - : m_pGuard( g ) - {} - - /// Initializes guarded pointer with \p p - explicit guarded_ptr( guarded_type* p ) CDS_NOEXCEPT - : m_pGuard( nullptr ) - { - reset(p); - } - explicit guarded_ptr( std::nullptr_t ) CDS_NOEXCEPT - : m_pGuard( nullptr ) - {} - //@endcond - - /// Move ctor - guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT - : m_pGuard( gp.m_pGuard ) - { - gp.m_pGuard = nullptr; - } - - /// Move ctor - template - guarded_ptr( guarded_ptr&& gp ) CDS_NOEXCEPT - : m_pGuard( gp.m_pGuard ) - { - gp.m_pGuard = nullptr; - } - - /// Ctor from \p Guard - explicit guarded_ptr( Guard&& g ) CDS_NOEXCEPT - : m_pGuard( g.release()) - {} - - /// The guarded pointer is not copy-constructible - guarded_ptr( guarded_ptr const& gp ) = delete; - - /// Clears the guarded pointer - /** - \ref release() is called if guarded pointer is not \ref empty() - */ - ~guarded_ptr() CDS_NOEXCEPT - { - release(); - } - - /// Move-assignment operator - guarded_ptr& operator=( guarded_ptr&& gp ) CDS_NOEXCEPT - { - std::swap( m_pGuard, gp.m_pGuard ); - return *this; - } - - /// Move-assignment from \p Guard - guarded_ptr& operator=( Guard&& g ) CDS_NOEXCEPT - { - std::swap( m_pGuard, g.guard_ref()); - return *this; - } - - /// The guarded pointer is not copy-assignable - guarded_ptr& operator=(guarded_ptr const& gp) = delete; - - /// Returns a pointer to guarded value - value_type * operator ->() const CDS_NOEXCEPT - { - assert( !empty()); - return value_cast()( reinterpret_cast(m_pGuard->get())); - } - - /// Returns a reference to guarded value - value_type& operator *() CDS_NOEXCEPT - { - assert( !empty()); - return *value_cast()(reinterpret_cast(m_pGuard->get())); - } - - /// Returns const reference to guarded value - value_type const& operator *() const CDS_NOEXCEPT - { - assert( !empty()); - return *value_cast()(reinterpret_cast(m_pGuard->get())); - } - - /// Checks if the guarded pointer is \p nullptr - bool empty() const CDS_NOEXCEPT - { - return !m_pGuard || m_pGuard->get( atomics::memory_order_relaxed ) == nullptr; - } - - /// \p bool operator returns !empty() - explicit operator bool() const CDS_NOEXCEPT - { - return !empty(); - } - - /// Clears guarded pointer - /** - If the guarded pointer has been released, the pointer can be disposed (freed) at any time. - Dereferncing the guarded pointer after \p release() is dangerous. - */ - void release() CDS_NOEXCEPT - { - free_guard(); - } - - //@cond - // For internal use only!!! - void reset(guarded_type * p) CDS_NOEXCEPT - { - alloc_guard(); - assert( m_pGuard ); - m_pGuard->set(p); - } - //@endcond - - private: - //@cond - void alloc_guard() - { - if ( !m_pGuard ) - m_pGuard = thread_gc::alloc_guard(); - } - - void free_guard() - { - if ( m_pGuard ) { - thread_gc::free_guard( m_pGuard ); - m_pGuard = nullptr; - } - } - //@endcond - - private: - //@cond - hp::details::hp_guard* m_pGuard; - //@endcond - }; - - public: - /// \p scan() type - enum class scan_type { - classic = hp::classic, ///< classic scan as described in Michael's papers - inplace = hp::inplace ///< inplace scan without allocation - }; - /// Initializes %HP singleton - /** - The constructor initializes GC singleton with passed parameters. - If GC instance is not exist then the function creates the instance. - Otherwise it does nothing. - - The Michael's %HP reclamation schema depends of three parameters: - - \p nHazardPtrCount - hazard pointer count per thread. Usually it is small number (up to 10) depending from - the data structure algorithms. By default, if \p nHazardPtrCount = 0, the function - uses maximum of the hazard pointer count for CDS library. - - \p nMaxThreadCount - max count of thread with using Hazard Pointer GC in your application. Default is 100. - - \p nMaxRetiredPtrCount - capacity of array of retired pointers for each thread. Must be greater than - nHazardPtrCount * nMaxThreadCount . Default is 2 * nHazardPtrCount * nMaxThreadCount . - */ - HP( - size_t nHazardPtrCount = 0, ///< Hazard pointer count per thread - size_t nMaxThreadCount = 0, ///< Max count of simultaneous working thread in your application - size_t nMaxRetiredPtrCount = 0, ///< Capacity of the array of retired objects for the thread - scan_type nScanType = scan_type::inplace ///< Scan type (see \p scan_type enum) - ) - { - hp::GarbageCollector::Construct( - nHazardPtrCount, - nMaxThreadCount, - nMaxRetiredPtrCount, - static_cast(nScanType) - ); - } - - /// Terminates GC singleton - /** - The destructor destroys %HP global object. After calling of this function you may \b NOT - use CDS data structures based on \p %cds::gc::HP. - Usually, %HP object is destroyed at the end of your \p main(). - */ - ~HP() - { - hp::GarbageCollector::Destruct( true ); - } - - /// Checks if count of hazard pointer is no less than \p nCountNeeded - /** - If \p bRaiseException is \p true (that is the default), the function raises - an \p std::overflow_error exception "Too few hazard pointers" - if \p nCountNeeded is more than the count of hazard pointer per thread. - */ - static bool check_available_guards( size_t nCountNeeded, bool bRaiseException = true ) - { - if ( hp::GarbageCollector::instance().getHazardPointerCount() < nCountNeeded ) { - if ( bRaiseException ) - throw std::overflow_error( "Too few hazard pointers" ); - return false; - } - return true; - } - - /// Returns max Hazard Pointer count - static size_t max_hazard_count() - { - return hp::GarbageCollector::instance().getHazardPointerCount(); - } - - /// Returns max count of thread - static size_t max_thread_count() - { - return hp::GarbageCollector::instance().getMaxThreadCount(); - } - - /// Returns capacity of retired pointer array - static size_t retired_array_capacity() - { - return hp::GarbageCollector::instance().getMaxRetiredPtrCount(); - } - - /// Retire pointer \p p with function \p pFunc - /** - The function places pointer \p p to array of pointers ready for removing. - (so called retired pointer array). The pointer can be safely removed when no hazard pointer points to it. - Deleting the pointer is the function \p pFunc call. - */ - template - static void retire( T * p, void (* pFunc)(T *)); // inline in hp_impl.h - - /// Retire pointer \p p with functor of type \p Disposer - /** - The function places pointer \p p to array of pointers ready for removing. - (so called retired pointer array). The pointer can be safely removed when no hazard pointer points to it. - - Deleting the pointer is an invocation of some object of type \p Disposer; the interface of \p Disposer is: - \code - template - struct disposer { - void operator()( T * p ) ; // disposing operator - }; - \endcode - Since the functor call can happen at any time after \p retire call, additional restrictions are imposed to \p Disposer type: - - it should be stateless functor - - it should be default-constructible - - the result of functor call with argument \p p should not depend on where the functor will be called. - - \par Examples: - Operator \p delete functor: - \code - template - struct disposer { - void operator ()( T * p ) { - delete p; - } - }; - - // How to call GC::retire method - int * p = new int; - - // ... use p in lock-free manner - - cds::gc::HP::retire( p ) ; // place p to retired pointer array of HP GC - \endcode - - Functor based on \p std::allocator : - \code - template > - struct disposer { - template - void operator()( T * p ) { - typedef typename ALLOC::templare rebind::other alloc_t; - alloc_t a; - a.destroy( p ); - a.deallocate( p, 1 ); - } - }; - \endcode - */ - template - static void retire( T * p ); // inline in hp_impl.h - - /// Get current scan strategy - static scan_type getScanType() - { - return static_cast( hp::GarbageCollector::instance().getScanType()); - } - - /// Set current scan strategy - static void setScanType( - scan_type nScanType ///< new scan strategy - ) - { - hp::GarbageCollector::instance().setScanType( static_cast(nScanType)); - } - - /// Checks if Hazard Pointer GC is constructed and may be used - static bool isUsed() - { - return hp::GarbageCollector::isUsed(); - } - - /// Forced GC cycle call for current thread - /** - Usually, this function should not be called directly. - */ - static void scan() ; // inline in hp_impl.h - - /// Synonym for \ref scan() - static void force_dispose() - { - scan(); - } - }; -}} // namespace cds::gc - -#endif // #ifndef CDSLIB_GC_IMPL_HP_DECL_H diff --git a/cds/gc/impl/hp_impl.h b/cds/gc/impl/hp_impl.h deleted file mode 100644 index 36398880..00000000 --- a/cds/gc/impl/hp_impl.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_GC_IMPL_HP_IMPL_H -#define CDSLIB_GC_IMPL_HP_IMPL_H - -#include -#include - -//@cond -namespace cds { namespace gc { - - namespace hp { - static inline ThreadGC& get_thread_gc() - { - return cds::threading::getGC(); - } - } // namespace hp - - inline HP::thread_gc::thread_gc( - bool bPersistent - ) - : m_bPersistent( bPersistent ) - { - if ( !threading::Manager::isThreadAttached()) - threading::Manager::attachThread(); - } - - inline HP::thread_gc::~thread_gc() - { - if ( !m_bPersistent ) - cds::threading::Manager::detachThread(); - } - - inline /*static*/ cds::gc::hp::details::hp_guard* HP::thread_gc::alloc_guard() - { - return hp::get_thread_gc().allocGuard(); - } - - inline /*static*/ void HP::thread_gc::free_guard( cds::gc::hp::details::hp_guard* g ) - { - hp::get_thread_gc().freeGuard( g ); - } - - inline HP::Guard::Guard() - : m_guard( hp::get_thread_gc().allocGuard()) - { - if ( !m_guard ) - throw too_many_hazard_ptr_exception(); - } - - template - inline T * HP::Guard::assign( T * p ) - { - assert( m_guard != nullptr ); - - T * pp = ( *m_guard = p ); - hp::get_thread_gc().sync(); - return pp; - } - - inline void HP::Guard::link() - { - if ( !m_guard ) { - m_guard = hp::get_thread_gc().allocGuard(); - if ( !m_guard ) - throw too_many_hazard_ptr_exception(); - } - } - - inline void HP::Guard::unlink() - { - if ( m_guard ) { - hp::get_thread_gc().freeGuard( m_guard ); - m_guard = nullptr; - } - } - - template - inline HP::GuardArray::GuardArray() - { - if ( hp::get_thread_gc().allocGuard( m_arr ) != Count ) - throw too_many_hazard_ptr_exception(); - } - - template - inline HP::GuardArray::~GuardArray() - { - hp::get_thread_gc().freeGuard( m_arr ); - } - - template - template - inline T * HP::GuardArray::assign( size_t nIndex, T* p ) - { - assert( nIndex < capacity()); - - m_arr.set(nIndex, p); - hp::get_thread_gc().sync(); - return p; - } - - template - inline void HP::retire( T * p, void (* pFunc)(T *)) - { - cds::threading::getGC().retirePtr( p, pFunc ); - } - - template - inline void HP::retire( T * p ) - { - hp::get_thread_gc().retirePtr( p, cds::details::static_functor::call ); - } - - inline void HP::scan() - { - hp::get_thread_gc().scan(); - } - -}} // namespace cds::gc -//@endcond - -#endif // #ifndef CDSLIB_GC_IMPL_HP_IMPL_H diff --git a/cds/gc/nogc.h b/cds/gc/nogc.h index 9cc40389..e5773a00 100644 --- a/cds/gc/nogc.h +++ b/cds/gc/nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/init.h b/cds/init.h index bf7fac3a..e13ed2d5 100644 --- a/cds/init.h +++ b/cds/init.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/basket_queue.h b/cds/intrusive/basket_queue.h index d1b77002..890d33f5 100644 --- a/cds/intrusive/basket_queue.h +++ b/cds/intrusive/basket_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/cuckoo_set.h b/cds/intrusive/cuckoo_set.h index a279bd56..3ba7c81c 100644 --- a/cds/intrusive/cuckoo_set.h +++ b/cds/intrusive/cuckoo_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/base.h b/cds/intrusive/details/base.h index c4e18b6c..331e3b7c 100644 --- a/cds/intrusive/details/base.h +++ b/cds/intrusive/details/base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/ellen_bintree_base.h b/cds/intrusive/details/ellen_bintree_base.h index 41cb8b18..a0a8363b 100644 --- a/cds/intrusive/details/ellen_bintree_base.h +++ b/cds/intrusive/details/ellen_bintree_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/feldman_hashset_base.h b/cds/intrusive/details/feldman_hashset_base.h index 3ea4ccd5..00707e06 100644 --- a/cds/intrusive/details/feldman_hashset_base.h +++ b/cds/intrusive/details/feldman_hashset_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/iterable_list_base.h b/cds/intrusive/details/iterable_list_base.h index 83ca5d3e..3c69cf9f 100644 --- a/cds/intrusive/details/iterable_list_base.h +++ b/cds/intrusive/details/iterable_list_base.h @@ -1,7 +1,7 @@ /* 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/ @@ -221,12 +221,6 @@ namespace cds { namespace intrusive { or \p opt::v::sequential_consistent (sequentially consisnent memory model). */ typedef opt::v::relaxed_ordering memory_model; - - /// RCU deadlock checking policy (only for \ref cds_intrusive_IterableList_rcu "RCU-based IterableList") - /** - List of available policy see \p opt::rcu_check_deadlock - */ - typedef opt::v::rcu_throw_deadlock rcu_check_deadlock; }; /// Metafunction converting option list to \p iterable_list::traits @@ -245,8 +239,6 @@ namespace cds { namespace intrusive { To enable it use \p iterable_list::stat - \p opt::memory_model - C++ memory ordering model. Can be \p opt::v::relaxed_ordering (relaxed memory model, the default) or \p opt::v::sequential_consistent (sequentially consistent memory model). - - \p opt::rcu_check_deadlock - a deadlock checking policy for \ref cds_intrusive_IterableList_rcu "RCU-based IterableList" - Default is \p opt::v::rcu_throw_deadlock */ template struct make_traits { diff --git a/cds/intrusive/details/lazy_list_base.h b/cds/intrusive/details/lazy_list_base.h index d2d6ede4..bda8b449 100644 --- a/cds/intrusive/details/lazy_list_base.h +++ b/cds/intrusive/details/lazy_list_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/michael_list_base.h b/cds/intrusive/details/michael_list_base.h index e7773e32..48e63c78 100644 --- a/cds/intrusive/details/michael_list_base.h +++ b/cds/intrusive/details/michael_list_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/michael_set_base.h b/cds/intrusive/details/michael_set_base.h index 7abd08e6..070ee0fb 100644 --- a/cds/intrusive/details/michael_set_base.h +++ b/cds/intrusive/details/michael_set_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/node_traits.h b/cds/intrusive/details/node_traits.h index 10cb55e5..958ee6a7 100644 --- a/cds/intrusive/details/node_traits.h +++ b/cds/intrusive/details/node_traits.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/raw_ptr_disposer.h b/cds/intrusive/details/raw_ptr_disposer.h index 5d411320..eda2da57 100644 --- a/cds/intrusive/details/raw_ptr_disposer.h +++ b/cds/intrusive/details/raw_ptr_disposer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/single_link_struct.h b/cds/intrusive/details/single_link_struct.h index 9fc095ab..cc470581 100644 --- a/cds/intrusive/details/single_link_struct.h +++ b/cds/intrusive/details/single_link_struct.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/details/skip_list_base.h b/cds/intrusive/details/skip_list_base.h index 97d30e30..00c5676f 100644 --- a/cds/intrusive/details/skip_list_base.h +++ b/cds/intrusive/details/skip_list_base.h @@ -1,7 +1,7 @@ /* 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/ @@ -70,7 +70,7 @@ namespace cds { namespace intrusive { atomic_marked_ptr m_pNext; ///< Next item in bottom-list (list at level 0) unsigned int m_nHeight; ///< Node height (size of \p m_arrNext array). For node at level 0 the height is 1. atomic_marked_ptr * m_arrNext; ///< Array of next items for levels 1 .. m_nHeight - 1. For node at level 0 \p m_arrNext is \p nullptr - atomics::atomic m_nUnlink; ///< How many levels has been unlinked + atomics::atomic m_nUnlink; ///< Unlink helper //@endcond public: @@ -78,7 +78,7 @@ namespace cds { namespace intrusive { : m_pNext( nullptr ) , m_nHeight( 1 ) , m_arrNext( nullptr ) - , m_nUnlink( 0 ) + , m_nUnlink( 1 ) {} @@ -92,7 +92,7 @@ namespace cds { namespace intrusive { m_arrNext = nextTower; m_nHeight = nHeight; - atomics::atomic_thread_fence( atomics::memory_order_release ); + m_nUnlink.store( nHeight, atomics::memory_order_release ); } //@cond @@ -168,7 +168,12 @@ namespace cds { namespace intrusive { bool level_unlinked( unsigned nCount = 1 ) { - return m_nUnlink.fetch_add( nCount, std::memory_order_relaxed ) + 1 == height(); + return m_nUnlink.fetch_sub( nCount, atomics::memory_order_relaxed ) == 1; + } + + bool is_upper_level( unsigned nLevel ) const + { + return m_nUnlink.load( atomics::memory_order_relaxed ) == nLevel + 1; } //@endcond }; @@ -403,12 +408,9 @@ namespace cds { namespace intrusive { event_counter m_nFindSlowFailed ; ///< Count of failed call of \p find and all derivatives (via slow-path) event_counter m_nRenewInsertPosition ; ///< Count of renewing position events while inserting event_counter m_nLogicDeleteWhileInsert; ///< Count of events "The node has been logically deleted while inserting" - event_counter m_nEraseWhileInsert ; ///< Count of events "The node has been disposed while inserting" - event_counter m_nNotFoundWhileInsert ; ///< Count of events "Inserting node is not found" + event_counter m_nRemoveWhileInsert ; ///< Count of evnts "The node is removing while inserting" event_counter m_nFastErase ; ///< Fast erase event counter - event_counter m_nFastEraseHelped ; ///< Fast erase with helping of other thread event_counter m_nFastExtract ; ///< Fast extract event counter - event_counter m_nFastExtractHelped ; ///< Fast extract with helping of other thread event_counter m_nSlowErase ; ///< Slow erase event counter event_counter m_nSlowExtract ; ///< Slow extract event counter event_counter m_nExtractSuccess ; ///< Count of successful call of \p extract @@ -455,12 +457,9 @@ namespace cds { namespace intrusive { void onExtractWhileFind() { ++m_nExtractWhileFind ; } void onRenewInsertPosition() { ++m_nRenewInsertPosition; } void onLogicDeleteWhileInsert() { ++m_nLogicDeleteWhileInsert; } - void onEraseWhileInsert() { ++m_nEraseWhileInsert; } - void onNotFoundWhileInsert() { ++m_nNotFoundWhileInsert; } + void onRemoveWhileInsert() { ++m_nRemoveWhileInsert; } void onFastErase() { ++m_nFastErase; } - void onFastEraseHelped() { ++m_nFastEraseHelped; } void onFastExtract() { ++m_nFastExtract; } - void onFastExtractHelped() { ++m_nFastExtractHelped; } void onSlowErase() { ++m_nSlowErase; } void onSlowExtract() { ++m_nSlowExtract; } void onExtractSuccess() { ++m_nExtractSuccess; } @@ -500,12 +499,9 @@ namespace cds { namespace intrusive { void onExtractWhileFind() const {} void onRenewInsertPosition() const {} void onLogicDeleteWhileInsert() const {} - void onEraseWhileInsert() const {} - void onNotFoundWhileInsert() const {} + void onRemoveWhileInsert() const {} void onFastErase() const {} - void onFastEraseHelped() const {} void onFastExtract() const {} - void onFastExtractHelped() const {} void onSlowErase() const {} void onSlowExtract() const {} void onExtractSuccess() const {} diff --git a/cds/intrusive/details/split_list_base.h b/cds/intrusive/details/split_list_base.h index d54f2646..76b76913 100644 --- a/cds/intrusive/details/split_list_base.h +++ b/cds/intrusive/details/split_list_base.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/ellen_bintree_dhp.h b/cds/intrusive/ellen_bintree_dhp.h index 3af84aae..c527e900 100644 --- a/cds/intrusive/ellen_bintree_dhp.h +++ b/cds/intrusive/ellen_bintree_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/ellen_bintree_hp.h b/cds/intrusive/ellen_bintree_hp.h index ca3f9dd5..e5dbed24 100644 --- a/cds/intrusive/ellen_bintree_hp.h +++ b/cds/intrusive/ellen_bintree_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/ellen_bintree_rcu.h b/cds/intrusive/ellen_bintree_rcu.h index 7e47370d..50e9cf02 100644 --- a/cds/intrusive/ellen_bintree_rcu.h +++ b/cds/intrusive/ellen_bintree_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/fcqueue.h b/cds/intrusive/fcqueue.h index 23b0bb4f..6fe82547 100644 --- a/cds/intrusive/fcqueue.h +++ b/cds/intrusive/fcqueue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/fcstack.h b/cds/intrusive/fcstack.h index 7e634cfb..57d1fbd6 100644 --- a/cds/intrusive/fcstack.h +++ b/cds/intrusive/fcstack.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/feldman_hashset_dhp.h b/cds/intrusive/feldman_hashset_dhp.h index a2dabf58..a5a4300b 100644 --- a/cds/intrusive/feldman_hashset_dhp.h +++ b/cds/intrusive/feldman_hashset_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/feldman_hashset_hp.h b/cds/intrusive/feldman_hashset_hp.h index 26622dcd..a9894a62 100644 --- a/cds/intrusive/feldman_hashset_hp.h +++ b/cds/intrusive/feldman_hashset_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/feldman_hashset_rcu.h b/cds/intrusive/feldman_hashset_rcu.h index af451990..446582fc 100644 --- a/cds/intrusive/feldman_hashset_rcu.h +++ b/cds/intrusive/feldman_hashset_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/free_list.h b/cds/intrusive/free_list.h index 4bbcfa9e..7a5ca45d 100644 --- a/cds/intrusive/free_list.h +++ b/cds/intrusive/free_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/free_list_cached.h b/cds/intrusive/free_list_cached.h index 1f86a279..9c9adea2 100644 --- a/cds/intrusive/free_list_cached.h +++ b/cds/intrusive/free_list_cached.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/free_list_selector.h b/cds/intrusive/free_list_selector.h index 25297baf..10b7cc9d 100644 --- a/cds/intrusive/free_list_selector.h +++ b/cds/intrusive/free_list_selector.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/free_list_tagged.h b/cds/intrusive/free_list_tagged.h index a7340838..3704b6e0 100644 --- a/cds/intrusive/free_list_tagged.h +++ b/cds/intrusive/free_list_tagged.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/impl/ellen_bintree.h b/cds/intrusive/impl/ellen_bintree.h index 27c513fa..c17b090e 100644 --- a/cds/intrusive/impl/ellen_bintree.h +++ b/cds/intrusive/impl/ellen_bintree.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/impl/feldman_hashset.h b/cds/intrusive/impl/feldman_hashset.h index 9b6d9b80..279641b3 100644 --- a/cds/intrusive/impl/feldman_hashset.h +++ b/cds/intrusive/impl/feldman_hashset.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/impl/iterable_list.h b/cds/intrusive/impl/iterable_list.h index 9ef5cf10..33a99054 100644 --- a/cds/intrusive/impl/iterable_list.h +++ b/cds/intrusive/impl/iterable_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -108,7 +108,6 @@ namespace cds { namespace intrusive { You should select GC you want and include appropriate .h-file: - for \p gc::HP: - for \p gc::DHP: - - for \ref cds_urcu_gc "RCU type" - see \ref cds_intrusive_IterableList_rcu "RCU-based IterableList" */ template < class GC diff --git a/cds/intrusive/impl/lazy_list.h b/cds/intrusive/impl/lazy_list.h index e438c10e..e44fd7dd 100644 --- a/cds/intrusive/impl/lazy_list.h +++ b/cds/intrusive/impl/lazy_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/impl/michael_list.h b/cds/intrusive/impl/michael_list.h index 3072fe20..dd03673f 100644 --- a/cds/intrusive/impl/michael_list.h +++ b/cds/intrusive/impl/michael_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/impl/skip_list.h b/cds/intrusive/impl/skip_list.h index c3b38f0e..61772430 100644 --- a/cds/intrusive/impl/skip_list.h +++ b/cds/intrusive/impl/skip_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -394,7 +394,8 @@ namespace cds { namespace intrusive { // c_nMaxHeight * 2 - pPred/pSucc guards // + 1 - for erase, unlink // + 1 - for clear - static size_t const c_nHazardPtrCount = c_nMaxHeight * 2 + 2; ///< Count of hazard pointer required for the skip-list + // + 1 - for help_remove() + static size_t const c_nHazardPtrCount = c_nMaxHeight * 2 + 3; ///< Count of hazard pointer required for the skip-list protected: typedef typename node_type::atomic_marked_ptr atomic_node_ptr; ///< Atomic marked node pointer @@ -1137,25 +1138,31 @@ namespace cds { namespace intrusive { static value_type * gc_protect( marked_node_ptr p ) { - return node_traits::to_value_ptr( p.ptr() ); + return node_traits::to_value_ptr( p.ptr()); } static void dispose_node( value_type * pVal ) { assert( pVal != nullptr ); - typename node_builder::node_disposer()( node_traits::to_node_ptr( pVal ) ); + typename node_builder::node_disposer()( node_traits::to_node_ptr( pVal )); disposer()( pVal ); } - void help_remove( int nLevel, node_type* pPred, marked_node_ptr pCur, marked_node_ptr pSucc ) + void help_remove( int nLevel, node_type* pPred, marked_node_ptr pCur ) { - marked_node_ptr p( pCur.ptr() ); - if ( pPred->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr()), - memory_model::memory_order_acquire, atomics::memory_order_relaxed ) ) - { - if ( pCur->level_unlinked() ) { - gc::retire( node_traits::to_value_ptr( pCur.ptr() ), dispose_node ); - m_Stat.onEraseWhileFind(); + if ( pCur->is_upper_level( nLevel )) { + marked_node_ptr p( pCur.ptr()); + typename gc::Guard hp; + marked_node_ptr pSucc = hp.protect( pCur->next( nLevel ), gc_protect ); + + if ( pSucc.bits() && + pPred->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr()), + memory_model::memory_order_acquire, atomics::memory_order_relaxed )) + { + if ( pCur->level_unlinked()) { + gc::retire( node_traits::to_value_ptr( pCur.ptr()), dispose_node ); + m_Stat.onEraseWhileFind(); + } } } } @@ -1176,10 +1183,10 @@ namespace cds { namespace intrusive { int nCmp = 1; for ( int nLevel = static_cast( c_nMaxHeight - 1 ); nLevel >= 0; --nLevel ) { - pos.guards.assign( nLevel * 2, node_traits::to_value_ptr( pPred ) ); + pos.guards.assign( nLevel * 2, node_traits::to_value_ptr( pPred )); while ( true ) { pCur = pos.guards.protect( nLevel * 2 + 1, pPred->next( nLevel ), gc_protect ); - if ( pCur.bits() ) { + if ( pCur.bits()) { // pCur.bits() means that pPred is logically deleted goto retry; } @@ -1192,17 +1199,17 @@ namespace cds { namespace intrusive { // pSucc contains deletion mark for pCur pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr() ) + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) goto retry; - if ( pSucc.bits() ) { + if ( pSucc.bits()) { // pCur is marked, i.e. logically deleted // try to help deleting pCur - help_remove( nLevel, pPred, pCur, pSucc ); + help_remove( nLevel, pPred, pCur ); goto retry; } else { - nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr() ), val ); + nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr()), val ); if ( nCmp < 0 ) { pPred = pCur.ptr(); pos.guards.copy( nLevel * 2, nLevel * 2 + 1 ); // pPrev guard := cur guard @@ -1241,25 +1248,25 @@ namespace cds { namespace intrusive { pPred = m_Head.head(); for ( int nLevel = static_cast( c_nMaxHeight - 1 ); nLevel >= 0; --nLevel ) { - pos.guards.assign( nLevel * 2, node_traits::to_value_ptr( pPred ) ); + pos.guards.assign( nLevel * 2, node_traits::to_value_ptr( pPred )); pCur = pos.guards.protect( nLevel * 2 + 1, pPred->next( nLevel ), gc_protect ); // pCur.bits() means that pPred is logically deleted // head cannot be deleted assert( pCur.bits() == 0 ); - if ( pCur.ptr() ) { + if ( pCur.ptr()) { // pSucc contains deletion mark for pCur pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr() ) + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) goto retry; - if ( pSucc.bits() ) { + if ( pSucc.bits()) { // pCur is marked, i.e. logically deleted. // try to help deleting pCur - help_remove( nLevel, pPred, pCur, pSucc ); + help_remove( nLevel, pPred, pCur ); goto retry; } } @@ -1269,7 +1276,7 @@ namespace cds { namespace intrusive { pos.pSucc[nLevel] = pCur.ptr(); } - return ( pos.pCur = pCur.ptr() ) != nullptr; + return ( pos.pCur = pCur.ptr()) != nullptr; } bool find_max_position( position& pos ) @@ -1286,10 +1293,10 @@ namespace cds { namespace intrusive { pPred = m_Head.head(); for ( int nLevel = static_cast( c_nMaxHeight - 1 ); nLevel >= 0; --nLevel ) { - pos.guards.assign( nLevel * 2, node_traits::to_value_ptr( pPred ) ); + pos.guards.assign( nLevel * 2, node_traits::to_value_ptr( pPred )); while ( true ) { pCur = pos.guards.protect( nLevel * 2 + 1, pPred->next( nLevel ), gc_protect ); - if ( pCur.bits() ) { + if ( pCur.bits()) { // pCur.bits() means that pPred is logically deleted goto retry; } @@ -1302,21 +1309,85 @@ namespace cds { namespace intrusive { // pSucc contains deletion mark for pCur pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr() ) + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) goto retry; - if ( pSucc.bits() ) { + if ( pSucc.bits()) { // pCur is marked, i.e. logically deleted. // try to help deleting pCur - help_remove( nLevel, pPred, pCur, pSucc ); + help_remove( nLevel, pPred, pCur ); goto retry; } else { - if ( !pSucc.ptr() ) + if ( !pSucc.ptr()) break; pPred = pCur.ptr(); - pos.guards.copy( nLevel * 2, nLevel * 2 + 1 ); + pos.guards.copy( nLevel * 2, nLevel * 2 + 1 ); + } + } + + // Next level + pos.pPrev[nLevel] = pPred; + pos.pSucc[nLevel] = pCur.ptr(); + } + + return ( pos.pCur = pCur.ptr()) != nullptr; + } + + bool renew_insert_position( value_type& val, node_type * pNode, position& pos ) + { + node_type * pPred; + marked_node_ptr pSucc; + marked_node_ptr pCur; + key_comparator cmp; + + // Hazard pointer array: + // pPred: [nLevel * 2] + // pSucc: [nLevel * 2 + 1] + + retry: + pPred = m_Head.head(); + int nCmp = 1; + + for ( int nLevel = static_cast( c_nMaxHeight - 1 ); nLevel >= 0; --nLevel ) { + pos.guards.assign( nLevel * 2, node_traits::to_value_ptr( pPred )); + while ( true ) { + pCur = pos.guards.protect( nLevel * 2 + 1, pPred->next( nLevel ), gc_protect ); + if ( pCur.bits()) { + // pCur.bits() means that pPred is logically deleted + goto retry; + } + + if ( pCur.ptr() == nullptr ) { + // end of list at level nLevel - goto next level + break; + } + + // pSucc contains deletion mark for pCur + pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); + + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) + goto retry; + + if ( pSucc.bits()) { + // pCur is marked, i.e. logically deleted + if ( pCur.ptr() == pNode ) { + // Node is removing while we are inserting it + return false; + } + // try to help deleting pCur + help_remove( nLevel, pPred, pCur ); + goto retry; + } + else { + nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr()), val ); + if ( nCmp < 0 ) { + pPred = pCur.ptr(); + pos.guards.copy( nLevel * 2, nLevel * 2 + 1 ); // pPrev guard := cur guard + } + else + break; } } @@ -1325,7 +1396,7 @@ namespace cds { namespace intrusive { pos.pSucc[nLevel] = pCur.ptr(); } - return ( pos.pCur = pCur.ptr() ) != nullptr; + return nCmp == 0; } template @@ -1353,20 +1424,22 @@ namespace cds { namespace intrusive { marked_node_ptr pSucc( pos.pSucc[nLevel] ); // Set pNode->next - // pNode->next must be null but can have a "logical deleted" flag if another thread is removing pNode right now + // pNode->next can have "logical deleted" flag if another thread is removing pNode right now if ( !pNode->next( nLevel ).compare_exchange_strong( p, pSucc, - memory_model::memory_order_acq_rel, atomics::memory_order_acquire )) + memory_model::memory_order_acq_rel, atomics::memory_order_acquire )) { // pNode has been marked as removed while we are inserting it // Stop inserting assert( p.bits() != 0 ); - if ( pNode->level_unlinked( nHeight - nLevel )) { - gc::retire( node_traits::to_value_ptr( pNode ), dispose_node ); - m_Stat.onEraseWhileInsert(); - } - else - m_Stat.onLogicDeleteWhileInsert(); + // Here pNode is linked at least level 0 so level_unlinked() cannot returns true + CDS_VERIFY_FALSE( pNode->level_unlinked( nHeight - nLevel )); + + // pNode is linked up to nLevel - 1 + // Remove it via find_position() + find_position( val, pos, key_comparator(), false ); + + m_Stat.onLogicDeleteWhileInsert(); return true; } p = pSucc; @@ -1381,9 +1454,16 @@ namespace cds { namespace intrusive { // Renew insert position m_Stat.onRenewInsertPosition(); - if ( !find_position( val, pos, key_comparator(), false )) { + + if ( !renew_insert_position( val, pNode, pos )) { // The node has been deleted while we are inserting it - m_Stat.onNotFoundWhileInsert(); + // Update current height for concurent removing + CDS_VERIFY_FALSE( pNode->level_unlinked( nHeight - nLevel )); + + m_Stat.onRemoveWhileInsert(); + + // help to removing val + find_position( val, pos, key_comparator(), false ); return true; } } @@ -1405,7 +1485,7 @@ namespace cds { namespace intrusive { if ( pSucc.bits() == 0 ) { bkoff.reset(); while ( !( pDel->next( nLevel ).compare_exchange_weak( pSucc, pSucc | 1, - memory_model::memory_order_release, atomics::memory_order_acquire ) + memory_model::memory_order_release, atomics::memory_order_acquire ) || pSucc.bits() != 0 )) { bkoff(); @@ -1418,34 +1498,31 @@ namespace cds { namespace intrusive { while ( true ) { if ( pDel->next( 0 ).compare_exchange_strong( p, p | 1, memory_model::memory_order_release, atomics::memory_order_acquire )) { - f( *node_traits::to_value_ptr( pDel ) ); + f( *node_traits::to_value_ptr( pDel )); // Physical deletion // try fast erase p = pDel; - unsigned nCount = 0; for ( int nLevel = static_cast( pDel->height() - 1 ); nLevel >= 0; --nLevel ) { - pSucc = pDel->next( nLevel ).load( memory_model::memory_order_relaxed ); - if ( !pos.pPrev[nLevel]->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr()), - memory_model::memory_order_acquire, atomics::memory_order_relaxed )) + pSucc = pDel->next( nLevel ).load( memory_model::memory_order_acquire ); + if ( pos.pPrev[nLevel]->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr()), + memory_model::memory_order_acq_rel, atomics::memory_order_relaxed )) { - // Maybe, another threads already helped us to delete the node?.. - if ( nCount ) { - if ( pDel->level_unlinked( nCount )) { - gc::retire( node_traits::to_value_ptr( pDel ), dispose_node ); - m_Stat.onFastEraseHelped(); - return true; - } - } - + pDel->level_unlinked(); + } + else { // Make slow erase +# ifdef CDS_DEBUG + if ( find_position( *node_traits::to_value_ptr( pDel ), pos, key_comparator(), false )) + assert( pDel != pos.pCur ); +# else find_position( *node_traits::to_value_ptr( pDel ), pos, key_comparator(), false ); +# endif m_Stat.onSlowErase(); return true; } - ++nCount; } // Fast erasing success @@ -1486,11 +1563,9 @@ namespace cds { namespace intrusive { pPred = m_Head.head(); for ( int nLevel = static_cast( m_nHeight.load( memory_model::memory_order_relaxed ) - 1 ); nLevel >= 0; --nLevel ) { pCur = guards.protect( 1, pPred->next( nLevel ), gc_protect ); - if ( pCur == pNull ) - continue; while ( pCur != pNull ) { - if ( pCur.bits() ) { + if ( pCur.bits()) { // pPred is being removed if ( ++attempt < 4 ) { bkoff(); @@ -1500,7 +1575,7 @@ namespace cds { namespace intrusive { return find_fastpath_abort; } - if ( pCur.ptr() ) { + if ( pCur.ptr()) { int nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr()), val ); if ( nCmp < 0 ) { guards.copy( 0, 1 ); @@ -1509,7 +1584,7 @@ namespace cds { namespace intrusive { } else if ( nCmp == 0 ) { // found - f( *node_traits::to_value_ptr( pCur.ptr() ), val ); + f( *node_traits::to_value_ptr( pCur.ptr()), val ); return find_fastpath_found; } else { @@ -1527,7 +1602,7 @@ namespace cds { namespace intrusive { bool find_slowpath( Q& val, Compare cmp, Func f ) { position pos; - if ( find_position( val, pos, cmp, true ) ) { + if ( find_position( val, pos, cmp, true )) { assert( cmp( *node_traits::to_value_ptr( pos.pCur ), val ) == 0 ); f( *node_traits::to_value_ptr( pos.pCur ), val ); @@ -1540,7 +1615,7 @@ namespace cds { namespace intrusive { template bool find_with_( Q& val, Compare cmp, Func f ) { - switch ( find_fastpath( val, cmp, f ) ) { + switch ( find_fastpath( val, cmp, f )) { case find_fastpath_found: m_Stat.onFindFastSuccess(); return true; @@ -1551,7 +1626,7 @@ namespace cds { namespace intrusive { break; } - if ( find_slowpath( val, cmp, f ) ) { + if ( find_slowpath( val, cmp, f )) { m_Stat.onFindSlowSuccess(); return true; } @@ -1564,7 +1639,7 @@ namespace cds { namespace intrusive { guarded_ptr get_with_( Q const& val, Compare cmp ) { guarded_ptr gp; - if ( find_with_( val, cmp, [&gp]( value_type& found, Q const& ) { gp.reset( &found ); } ) ) + if ( find_with_( val, cmp, [&gp]( value_type& found, Q const& ) { gp.reset( &found ); } )) return gp; return guarded_ptr(); } @@ -1574,18 +1649,18 @@ namespace cds { namespace intrusive { { position pos; - if ( !find_position( val, pos, cmp, false ) ) { + if ( !find_position( val, pos, cmp, false )) { m_Stat.onEraseFailed(); return false; } node_type * pDel = pos.pCur; typename gc::Guard gDel; - gDel.assign( node_traits::to_value_ptr( pDel ) ); + gDel.assign( node_traits::to_value_ptr( pDel )); assert( cmp( *node_traits::to_value_ptr( pDel ), val ) == 0 ); unsigned int nHeight = pDel->height(); - if ( try_remove_at( pDel, pos, f ) ) { + if ( try_remove_at( pDel, pos, f )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onEraseSuccess(); @@ -1603,17 +1678,17 @@ namespace cds { namespace intrusive { guarded_ptr gp; for (;;) { - if ( !find_position( val, pos, cmp, false ) ) { + if ( !find_position( val, pos, cmp, false )) { m_Stat.onExtractFailed(); return guarded_ptr(); } node_type * pDel = pos.pCur; - gp.reset( node_traits::to_value_ptr( pDel ) ); + gp.reset( node_traits::to_value_ptr( pDel )); assert( cmp( *node_traits::to_value_ptr( pDel ), val ) == 0 ); unsigned int nHeight = pDel->height(); - if ( try_remove_at( pDel, pos, []( value_type const& ) {} ) ) { + if ( try_remove_at( pDel, pos, []( value_type const& ) {} )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onExtractSuccess(); @@ -1629,7 +1704,7 @@ namespace cds { namespace intrusive { guarded_ptr gp; for ( ;;) { - if ( !find_min_position( pos ) ) { + if ( !find_min_position( pos )) { // The list is empty m_Stat.onExtractMinFailed(); return guarded_ptr(); @@ -1638,9 +1713,9 @@ namespace cds { namespace intrusive { node_type * pDel = pos.pCur; unsigned int nHeight = pDel->height(); - gp.reset( node_traits::to_value_ptr( pDel ) ); + gp.reset( node_traits::to_value_ptr( pDel )); - if ( try_remove_at( pDel, pos, []( value_type const& ) {} ) ) { + if ( try_remove_at( pDel, pos, []( value_type const& ) {} )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onExtractMinSuccess(); @@ -1657,7 +1732,7 @@ namespace cds { namespace intrusive { guarded_ptr gp; for ( ;;) { - if ( !find_max_position( pos ) ) { + if ( !find_max_position( pos )) { // The list is empty m_Stat.onExtractMaxFailed(); return guarded_ptr(); @@ -1666,9 +1741,9 @@ namespace cds { namespace intrusive { node_type * pDel = pos.pCur; unsigned int nHeight = pDel->height(); - gp.reset( node_traits::to_value_ptr( pDel ) ); + gp.reset( node_traits::to_value_ptr( pDel )); - if ( try_remove_at( pDel, pos, []( value_type const& ) {} ) ) { + if ( try_remove_at( pDel, pos, []( value_type const& ) {} )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onExtractMaxSuccess(); diff --git a/cds/intrusive/iterable_list_dhp.h b/cds/intrusive/iterable_list_dhp.h index 3581c870..0cdeb22f 100644 --- a/cds/intrusive/iterable_list_dhp.h +++ b/cds/intrusive/iterable_list_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/iterable_list_hp.h b/cds/intrusive/iterable_list_hp.h index 8d5af74a..38bf2219 100644 --- a/cds/intrusive/iterable_list_hp.h +++ b/cds/intrusive/iterable_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/lazy_list_dhp.h b/cds/intrusive/lazy_list_dhp.h index bfc39321..73376f76 100644 --- a/cds/intrusive/lazy_list_dhp.h +++ b/cds/intrusive/lazy_list_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/lazy_list_hp.h b/cds/intrusive/lazy_list_hp.h index a488e0e4..a84c6447 100644 --- a/cds/intrusive/lazy_list_hp.h +++ b/cds/intrusive/lazy_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/lazy_list_nogc.h b/cds/intrusive/lazy_list_nogc.h index e5a86f20..01fc656e 100644 --- a/cds/intrusive/lazy_list_nogc.h +++ b/cds/intrusive/lazy_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/lazy_list_rcu.h b/cds/intrusive/lazy_list_rcu.h index 10be3213..4fa7dbdf 100644 --- a/cds/intrusive/lazy_list_rcu.h +++ b/cds/intrusive/lazy_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/michael_list_dhp.h b/cds/intrusive/michael_list_dhp.h index 0f4557a9..4ae6e599 100644 --- a/cds/intrusive/michael_list_dhp.h +++ b/cds/intrusive/michael_list_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/michael_list_hp.h b/cds/intrusive/michael_list_hp.h index c525dd28..d95ab49a 100644 --- a/cds/intrusive/michael_list_hp.h +++ b/cds/intrusive/michael_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/michael_list_nogc.h b/cds/intrusive/michael_list_nogc.h index 3cf21e23..6b4fd537 100644 --- a/cds/intrusive/michael_list_nogc.h +++ b/cds/intrusive/michael_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/michael_list_rcu.h b/cds/intrusive/michael_list_rcu.h index 0ed92529..89055e65 100644 --- a/cds/intrusive/michael_list_rcu.h +++ b/cds/intrusive/michael_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/michael_set.h b/cds/intrusive/michael_set.h index 63a3dccd..a2aac0b4 100644 --- a/cds/intrusive/michael_set.h +++ b/cds/intrusive/michael_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/michael_set_nogc.h b/cds/intrusive/michael_set_nogc.h index bea9ee56..cd6b675b 100644 --- a/cds/intrusive/michael_set_nogc.h +++ b/cds/intrusive/michael_set_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/michael_set_rcu.h b/cds/intrusive/michael_set_rcu.h index bbf53cc1..b105a8ef 100644 --- a/cds/intrusive/michael_set_rcu.h +++ b/cds/intrusive/michael_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/moir_queue.h b/cds/intrusive/moir_queue.h index 34984423..70afe030 100644 --- a/cds/intrusive/moir_queue.h +++ b/cds/intrusive/moir_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/mspriority_queue.h b/cds/intrusive/mspriority_queue.h index d79e6026..e342fcc5 100644 --- a/cds/intrusive/mspriority_queue.h +++ b/cds/intrusive/mspriority_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/msqueue.h b/cds/intrusive/msqueue.h index 240124cd..98d8a64e 100644 --- a/cds/intrusive/msqueue.h +++ b/cds/intrusive/msqueue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/optimistic_queue.h b/cds/intrusive/optimistic_queue.h index 63c9f6ee..3e6118a1 100644 --- a/cds/intrusive/optimistic_queue.h +++ b/cds/intrusive/optimistic_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/options.h b/cds/intrusive/options.h index 7e9df4aa..2e7486c1 100644 --- a/cds/intrusive/options.h +++ b/cds/intrusive/options.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/segmented_queue.h b/cds/intrusive/segmented_queue.h index a463751f..d9204143 100644 --- a/cds/intrusive/segmented_queue.h +++ b/cds/intrusive/segmented_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/skip_list_dhp.h b/cds/intrusive/skip_list_dhp.h index f42c89f0..b90eeea4 100644 --- a/cds/intrusive/skip_list_dhp.h +++ b/cds/intrusive/skip_list_dhp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/skip_list_hp.h b/cds/intrusive/skip_list_hp.h index a19c744e..42b60ca5 100644 --- a/cds/intrusive/skip_list_hp.h +++ b/cds/intrusive/skip_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/skip_list_nogc.h b/cds/intrusive/skip_list_nogc.h index f3c7e735..a37ec3dd 100644 --- a/cds/intrusive/skip_list_nogc.h +++ b/cds/intrusive/skip_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/skip_list_rcu.h b/cds/intrusive/skip_list_rcu.h index 24a12cee..1d3a9774 100644 --- a/cds/intrusive/skip_list_rcu.h +++ b/cds/intrusive/skip_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ @@ -67,7 +67,7 @@ namespace cds { namespace intrusive { protected: unsigned int m_nHeight; ///< Node height (size of m_arrNext array). For node at level 0 the height is 1. atomic_marked_ptr * m_arrNext; ///< Array of next items for levels 1 .. m_nHeight - 1. For node at level 0 \p m_arrNext is \p nullptr - atomics::atomic m_nUnlink; ///< How many levels has been unlinked + atomics::atomic m_nUnlink; ///< Unlink helper public: /// Constructs a node of height 1 (a bottom-list node) @@ -76,7 +76,7 @@ namespace cds { namespace intrusive { , m_pDelChain( nullptr ) , m_nHeight(1) , m_arrNext( nullptr ) - , m_nUnlink(0) + , m_nUnlink(1) {} /// Constructs a node of height \p nHeight @@ -89,6 +89,7 @@ namespace cds { namespace intrusive { m_arrNext = nextTower; m_nHeight = nHeight; + m_nUnlink.store( nHeight, atomics::memory_order_release ); } atomic_marked_ptr * release_tower() @@ -179,7 +180,12 @@ namespace cds { namespace intrusive { bool level_unlinked( unsigned nCount = 1 ) { - return m_nUnlink.fetch_add( nCount, std::memory_order_relaxed ) + 1 == height(); + return m_nUnlink.fetch_sub( nCount, std::memory_order_relaxed ) == 1; + } + + bool is_upper_level( unsigned nLevel ) const + { + return m_nUnlink.load( atomics::memory_order_relaxed ) == nLevel + 1; } }; } // namespace skip_list @@ -1402,15 +1408,17 @@ namespace cds { namespace intrusive { void help_remove( int nLevel, node_type* pPred, marked_node_ptr pCur, marked_node_ptr pSucc, position& pos ) { - marked_node_ptr p( pCur.ptr() ); - if ( pPred->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr() ), - memory_model::memory_order_release, atomics::memory_order_relaxed ) ) + marked_node_ptr p( pCur.ptr()); + + if ( pCur->is_upper_level( nLevel ) + && pPred->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr()), + memory_model::memory_order_release, atomics::memory_order_relaxed )) { if ( pCur->level_unlinked()) { - if ( !is_extracted( pSucc ) ) { + if ( !is_extracted( pSucc )) { // We cannot free the node at this moment because RCU is locked // Link deleted nodes to a chain to free later - pos.dispose( pCur.ptr() ); + pos.dispose( pCur.ptr()); m_Stat.onEraseWhileFind(); } else @@ -1422,7 +1430,7 @@ namespace cds { namespace intrusive { template bool find_position( Q const& val, position& pos, Compare cmp, bool bStopIfFound ) { - assert( gc::is_locked() ); + assert( gc::is_locked()); node_type * pPred; marked_node_ptr pSucc; @@ -1436,7 +1444,7 @@ namespace cds { namespace intrusive { while ( true ) { pCur = pPred->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pCur.bits() ) { + if ( pCur.bits()) { // pCur.bits() means that pPred is logically deleted goto retry; } @@ -1449,16 +1457,16 @@ namespace cds { namespace intrusive { // pSucc contains deletion mark for pCur pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr() ) + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) goto retry; - if ( pSucc.bits() ) { + if ( pSucc.bits()) { // pCur is marked, i.e. logically deleted. help_remove( nLevel, pPred, pCur, pSucc, pos ); goto retry; } else { - nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr() ), val ); + nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr()), val ); if ( nCmp < 0 ) pPred = pCur.ptr(); else if ( nCmp == 0 && bStopIfFound ) @@ -1483,7 +1491,7 @@ namespace cds { namespace intrusive { bool find_min_position( position& pos ) { - assert( gc::is_locked() ); + assert( gc::is_locked()); node_type * pPred; marked_node_ptr pSucc; @@ -1499,15 +1507,15 @@ namespace cds { namespace intrusive { // head cannot be deleted assert( pCur.bits() == 0 ); - if ( pCur.ptr() ) { + if ( pCur.ptr()) { // pSucc contains deletion mark for pCur pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr() ) + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) goto retry; - if ( pSucc.bits() ) { + if ( pSucc.bits()) { // pCur is marked, i.e. logically deleted. help_remove( nLevel, pPred, pCur, pSucc, pos ); goto retry; @@ -1518,12 +1526,12 @@ namespace cds { namespace intrusive { pos.pPrev[nLevel] = pPred; pos.pSucc[nLevel] = pCur.ptr(); } - return ( pos.pCur = pCur.ptr() ) != nullptr; + return ( pos.pCur = pCur.ptr()) != nullptr; } bool find_max_position( position& pos ) { - assert( gc::is_locked() ); + assert( gc::is_locked()); node_type * pPred; marked_node_ptr pSucc; @@ -1536,7 +1544,7 @@ namespace cds { namespace intrusive { while ( true ) { pCur = pPred->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pCur.bits() ) { + if ( pCur.bits()) { // pCur.bits() means that pPred is logically deleted goto retry; } @@ -1549,16 +1557,16 @@ namespace cds { namespace intrusive { // pSucc contains deletion mark for pCur pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr() ) + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) goto retry; - if ( pSucc.bits() ) { + if ( pSucc.bits()) { // pCur is marked, i.e. logically deleted. help_remove( nLevel, pPred, pCur, pSucc, pos ); goto retry; } else { - if ( !pSucc.ptr() ) + if ( !pSucc.ptr()) break; pPred = pCur.ptr(); @@ -1570,13 +1578,74 @@ namespace cds { namespace intrusive { pos.pSucc[nLevel] = pCur.ptr(); } - return ( pos.pCur = pCur.ptr() ) != nullptr; + return ( pos.pCur = pCur.ptr()) != nullptr; + } + + bool renew_insert_position( value_type& val, node_type * pNode, position& pos ) + { + assert( gc::is_locked()); + + node_type * pPred; + marked_node_ptr pSucc; + marked_node_ptr pCur; + key_comparator cmp; + int nCmp = 1; + + retry: + pPred = m_Head.head(); + + for ( int nLevel = static_cast( c_nMaxHeight - 1 ); nLevel >= 0; --nLevel ) { + + while ( true ) { + pCur = pPred->next( nLevel ).load( memory_model::memory_order_acquire ); + if ( pCur.bits()) { + // pCur.bits() means that pPred is logically deleted + goto retry; + } + + if ( pCur.ptr() == nullptr ) { + // end of the list at level nLevel - goto next level + break; + } + + // pSucc contains deletion mark for pCur + pSucc = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); + + if ( pPred->next( nLevel ).load( memory_model::memory_order_acquire ).all() != pCur.ptr()) + goto retry; + + if ( pSucc.bits()) { + // pCur is marked, i.e. logically deleted. + if ( pCur.ptr() == pNode ) { + // Node is removing while we are inserting it + return false; + } + + // try to help deleting pCur + help_remove( nLevel, pPred, pCur, pSucc, pos ); + goto retry; + } + else { + nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr()), val ); + if ( nCmp < 0 ) + pPred = pCur.ptr(); + else + break; + } + } + + // Next level + pos.pPrev[nLevel] = pPred; + pos.pSucc[nLevel] = pCur.ptr(); + } + + return nCmp == 0; } template bool insert_at_position( value_type& val, node_type * pNode, position& pos, Func f ) { - assert( gc::is_locked() ); + assert( gc::is_locked()); unsigned int const nHeight = pNode->height(); pNode->clear_tower(); @@ -1585,9 +1654,8 @@ namespace cds { namespace intrusive { { marked_node_ptr p( pos.pSucc[0] ); pNode->next( 0 ).store( p, memory_model::memory_order_relaxed ); - if ( !pos.pPrev[0]->next( 0 ).compare_exchange_strong( p, marked_node_ptr( pNode ), memory_model::memory_order_release, atomics::memory_order_relaxed ) ) { + if ( !pos.pPrev[0]->next( 0 ).compare_exchange_strong( p, marked_node_ptr( pNode ), memory_model::memory_order_release, atomics::memory_order_relaxed )) return false; - } f( val ); } @@ -1607,13 +1675,14 @@ namespace cds { namespace intrusive { // Stop inserting assert( p.bits() != 0 ); - if ( pNode->level_unlinked( nHeight - nLevel ) && p.bits() == 1 ) { - pos.dispose( pNode ); - m_Stat.onEraseWhileInsert(); - } - else - m_Stat.onLogicDeleteWhileInsert(); + // Here pNode is linked at least level 0 so level_unlinked() cannot returns true + CDS_VERIFY_FALSE( pNode->level_unlinked( nHeight - nLevel )); + // pNode is linked up to nLevel - 1 + // Remove it via find_position() + find_position( val, pos, key_comparator(), false ); + + m_Stat.onLogicDeleteWhileInsert(); return true; } p = pSucc; @@ -1628,9 +1697,16 @@ namespace cds { namespace intrusive { // Renew insert position m_Stat.onRenewInsertPosition(); - if ( !find_position( val, pos, key_comparator(), false ) ) { + + if ( !renew_insert_position( val, pNode, pos )) { // The node has been deleted while we are inserting it - m_Stat.onNotFoundWhileInsert(); + // Update current height for concurent removing + CDS_VERIFY_FALSE( pNode->level_unlinked( nHeight - nLevel )); + + m_Stat.onRemoveWhileInsert(); + + // help to removing val + find_position( val, pos, key_comparator(), false ); return true; } } @@ -1642,7 +1718,7 @@ namespace cds { namespace intrusive { bool try_remove_at( node_type * pDel, position& pos, Func f, bool bExtract ) { assert( pDel != nullptr ); - assert( gc::is_locked() ); + assert( gc::is_locked()); marked_node_ptr pSucc; back_off bkoff; @@ -1667,37 +1743,31 @@ namespace cds { namespace intrusive { } } - marked_node_ptr p( pDel->next( 0 ).load( memory_model::memory_order_relaxed ).ptr() ); + marked_node_ptr p( pDel->next( 0 ).load( memory_model::memory_order_relaxed ).ptr()); while ( true ) { if ( pDel->next( 0 ).compare_exchange_strong( p, p | nMask, memory_model::memory_order_release, atomics::memory_order_acquire )) { - f( *node_traits::to_value_ptr( pDel ) ); + f( *node_traits::to_value_ptr( pDel )); // physical deletion // try fast erase p = pDel; - unsigned nCount = 0; for ( int nLevel = static_cast( pDel->height() - 1 ); nLevel >= 0; --nLevel ) { - pSucc = pDel->next( nLevel ).load( memory_model::memory_order_relaxed ); - if ( !pos.pPrev[nLevel]->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr()), - memory_model::memory_order_acq_rel, atomics::memory_order_acquire ) ) + pSucc = pDel->next( nLevel ).load( memory_model::memory_order_acquire ); + if ( pos.pPrev[nLevel]->next( nLevel ).compare_exchange_strong( p, marked_node_ptr( pSucc.ptr()), + memory_model::memory_order_acq_rel, atomics::memory_order_relaxed )) { - // Do slow erase - if ( nCount ) { - if ( pDel->level_unlinked( nCount )) { - if ( p.bits() == 1 ) { - pos.dispose( pDel ); - m_Stat.onFastEraseHelped(); - } - else - m_Stat.onFastExtractHelped(); - return true; - } - } - + pDel->level_unlinked(); + } + else { // Make slow erase +# ifdef CDS_DEBUG + if ( find_position( *node_traits::to_value_ptr( pDel ), pos, key_comparator(), false )) + assert( pDel != pos.pCur ); +# else find_position( *node_traits::to_value_ptr( pDel ), pos, key_comparator(), false ); +# endif if ( bExtract ) m_Stat.onSlowExtract(); else @@ -1705,9 +1775,9 @@ namespace cds { namespace intrusive { return true; } - ++nCount; } + // Fast erasing success if ( !bExtract ) { // We cannot free the node at this moment since RCU is locked // Link deleted nodes to a chain to free later @@ -1718,7 +1788,7 @@ namespace cds { namespace intrusive { m_Stat.onFastExtract(); return true; } - else if ( p.bits() ) { + else if ( p.bits()) { // Another thread is deleting pDel right now m_Stat.onEraseContention(); return false; @@ -1749,12 +1819,10 @@ namespace cds { namespace intrusive { pPred = m_Head.head(); for ( int nLevel = static_cast( m_nHeight.load( memory_model::memory_order_relaxed ) - 1 ); nLevel >= 0; --nLevel ) { pCur = pPred->next( nLevel ).load( memory_model::memory_order_acquire ); - if ( pCur == pNull ) - continue; while ( pCur != pNull ) { - if ( pCur.bits() ) { - // pPrev is being removed + if ( pCur.bits()) { + // pPred is being removed if ( ++attempt < 4 ) { bkoff(); goto try_again; @@ -1763,15 +1831,15 @@ namespace cds { namespace intrusive { return find_fastpath_abort; } - if ( pCur.ptr() ) { - int nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr() ), val ); + if ( pCur.ptr()) { + int nCmp = cmp( *node_traits::to_value_ptr( pCur.ptr()), val ); if ( nCmp < 0 ) { pPred = pCur.ptr(); pCur = pCur->next( nLevel ).load( memory_model::memory_order_acquire ); } else if ( nCmp == 0 ) { // found - f( *node_traits::to_value_ptr( pCur.ptr() ), val ); + f( *node_traits::to_value_ptr( pCur.ptr()), val ); return find_fastpath_found; } else // pCur > val - go down @@ -1786,7 +1854,7 @@ namespace cds { namespace intrusive { template bool find_slowpath( Q& val, Compare cmp, Func f, position& pos ) { - if ( find_position( val, pos, cmp, true ) ) { + if ( find_position( val, pos, cmp, true )) { assert( cmp( *node_traits::to_value_ptr( pos.pCur ), val ) == 0 ); f( *node_traits::to_value_ptr( pos.pCur ), val ); @@ -1811,7 +1879,7 @@ namespace cds { namespace intrusive { { rcu_lock l; - switch ( find_fastpath( val, cmp, f ) ) { + switch ( find_fastpath( val, cmp, f )) { case find_fastpath_found: m_Stat.onFindFastSuccess(); return true; @@ -1822,7 +1890,7 @@ namespace cds { namespace intrusive { break; } - if ( find_slowpath( val, cmp, f, pos ) ) { + if ( find_slowpath( val, cmp, f, pos )) { m_Stat.onFindSlowSuccess(); bRet = true; } @@ -1845,7 +1913,7 @@ namespace cds { namespace intrusive { { rcu_lock rcuLock; - if ( !find_position( val, pos, cmp, false ) ) { + if ( !find_position( val, pos, cmp, false )) { m_Stat.onEraseFailed(); bRet = false; } @@ -1854,7 +1922,7 @@ namespace cds { namespace intrusive { assert( cmp( *node_traits::to_value_ptr( pDel ), val ) == 0 ); unsigned int nHeight = pDel->height(); - if ( try_remove_at( pDel, pos, f, false ) ) { + if ( try_remove_at( pDel, pos, f, false )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onEraseSuccess(); @@ -1874,11 +1942,11 @@ namespace cds { namespace intrusive { value_type * do_extract_key( Q const& key, Compare cmp, position& pos ) { // RCU should be locked!!! - assert( gc::is_locked() ); + assert( gc::is_locked()); node_type * pDel; - if ( !find_position( key, pos, cmp, false ) ) { + if ( !find_position( key, pos, cmp, false )) { m_Stat.onExtractFailed(); pDel = nullptr; } @@ -1888,7 +1956,7 @@ namespace cds { namespace intrusive { unsigned int const nHeight = pDel->height(); - if ( try_remove_at( pDel, pos, []( value_type const& ) {}, true ) ) { + if ( try_remove_at( pDel, pos, []( value_type const& ) {}, true )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onExtractSuccess(); @@ -1933,7 +2001,7 @@ namespace cds { namespace intrusive { value_type * do_extract_min() { - assert( !gc::is_locked() ); + assert( !gc::is_locked()); position pos; node_type * pDel; @@ -1941,7 +2009,7 @@ namespace cds { namespace intrusive { { rcu_lock l; - if ( !find_min_position( pos ) ) { + if ( !find_min_position( pos )) { m_Stat.onExtractMinFailed(); pDel = nullptr; } @@ -1949,7 +2017,7 @@ namespace cds { namespace intrusive { pDel = pos.pCur; unsigned int const nHeight = pDel->height(); - if ( try_remove_at( pDel, pos, []( value_type const& ) {}, true ) ) { + if ( try_remove_at( pDel, pos, []( value_type const& ) {}, true )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onExtractMinSuccess(); @@ -1966,7 +2034,7 @@ namespace cds { namespace intrusive { value_type * do_extract_max() { - assert( !gc::is_locked() ); + assert( !gc::is_locked()); position pos; node_type * pDel; @@ -1974,7 +2042,7 @@ namespace cds { namespace intrusive { { rcu_lock l; - if ( !find_max_position( pos ) ) { + if ( !find_max_position( pos )) { m_Stat.onExtractMaxFailed(); pDel = nullptr; } @@ -1982,7 +2050,7 @@ namespace cds { namespace intrusive { pDel = pos.pCur; unsigned int const nHeight = pDel->height(); - if ( try_remove_at( pDel, pos, []( value_type const& ) {}, true ) ) { + if ( try_remove_at( pDel, pos, []( value_type const& ) {}, true )) { --m_ItemCounter; m_Stat.onRemoveNode( nHeight ); m_Stat.onExtractMaxSuccess(); @@ -2009,7 +2077,7 @@ namespace cds { namespace intrusive { node_type* p = m_Head.head()->next( 0 ).load( atomics::memory_order_relaxed ).ptr(); while ( p ) { node_type* pNext = p->next( 0 ).load( atomics::memory_order_relaxed ).ptr(); - dispose_node( node_traits::to_value_ptr( p ) ); + dispose_node( node_traits::to_value_ptr( p )); p = pNext; } } diff --git a/cds/intrusive/split_list.h b/cds/intrusive/split_list.h index f8183cad..b4e31dfb 100644 --- a/cds/intrusive/split_list.h +++ b/cds/intrusive/split_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/split_list_nogc.h b/cds/intrusive/split_list_nogc.h index e49e3b3a..d959cbe7 100644 --- a/cds/intrusive/split_list_nogc.h +++ b/cds/intrusive/split_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/split_list_rcu.h b/cds/intrusive/split_list_rcu.h index b6f60d44..c8902d11 100644 --- a/cds/intrusive/split_list_rcu.h +++ b/cds/intrusive/split_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set.h b/cds/intrusive/striped_set.h index 50003437..923fdfb3 100644 --- a/cds/intrusive/striped_set.h +++ b/cds/intrusive/striped_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/adapter.h b/cds/intrusive/striped_set/adapter.h index cb1574aa..01d90bb2 100644 --- a/cds/intrusive/striped_set/adapter.h +++ b/cds/intrusive/striped_set/adapter.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_avl_set.h b/cds/intrusive/striped_set/boost_avl_set.h index d8557b83..e4d4854a 100644 --- a/cds/intrusive/striped_set/boost_avl_set.h +++ b/cds/intrusive/striped_set/boost_avl_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_list.h b/cds/intrusive/striped_set/boost_list.h index ac52bbb5..25e32b20 100644 --- a/cds/intrusive/striped_set/boost_list.h +++ b/cds/intrusive/striped_set/boost_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_set.h b/cds/intrusive/striped_set/boost_set.h index aa461bbf..802e5943 100644 --- a/cds/intrusive/striped_set/boost_set.h +++ b/cds/intrusive/striped_set/boost_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_sg_set.h b/cds/intrusive/striped_set/boost_sg_set.h index 4256dc33..7ffd142d 100644 --- a/cds/intrusive/striped_set/boost_sg_set.h +++ b/cds/intrusive/striped_set/boost_sg_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_slist.h b/cds/intrusive/striped_set/boost_slist.h index dc3787c9..2d7596d8 100644 --- a/cds/intrusive/striped_set/boost_slist.h +++ b/cds/intrusive/striped_set/boost_slist.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_splay_set.h b/cds/intrusive/striped_set/boost_splay_set.h index 27a5e07d..8c0167fc 100644 --- a/cds/intrusive/striped_set/boost_splay_set.h +++ b/cds/intrusive/striped_set/boost_splay_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_treap_set.h b/cds/intrusive/striped_set/boost_treap_set.h index b865faf0..307b2042 100644 --- a/cds/intrusive/striped_set/boost_treap_set.h +++ b/cds/intrusive/striped_set/boost_treap_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/boost_unordered_set.h b/cds/intrusive/striped_set/boost_unordered_set.h index 5ff616d5..ae2cb8bc 100644 --- a/cds/intrusive/striped_set/boost_unordered_set.h +++ b/cds/intrusive/striped_set/boost_unordered_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/resizing_policy.h b/cds/intrusive/striped_set/resizing_policy.h index e00e95ef..72eaaa88 100644 --- a/cds/intrusive/striped_set/resizing_policy.h +++ b/cds/intrusive/striped_set/resizing_policy.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/striped_set/striping_policy.h b/cds/intrusive/striped_set/striping_policy.h index 4eebba12..b841a17c 100644 --- a/cds/intrusive/striped_set/striping_policy.h +++ b/cds/intrusive/striped_set/striping_policy.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/treiber_stack.h b/cds/intrusive/treiber_stack.h index f0514ed1..19b009ea 100644 --- a/cds/intrusive/treiber_stack.h +++ b/cds/intrusive/treiber_stack.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/intrusive/vyukov_mpmc_cycle_queue.h b/cds/intrusive/vyukov_mpmc_cycle_queue.h index 3be7a7f7..8c98e36d 100644 --- a/cds/intrusive/vyukov_mpmc_cycle_queue.h +++ b/cds/intrusive/vyukov_mpmc_cycle_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/lock/array.h b/cds/lock/array.h index 469cfed7..6d3a8969 100644 --- a/cds/lock/array.h +++ b/cds/lock/array.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/lock/spinlock.h b/cds/lock/spinlock.h index 6e60c816..22897850 100644 --- a/cds/lock/spinlock.h +++ b/cds/lock/spinlock.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/memory/michael/allocator.h b/cds/memory/michael/allocator.h deleted file mode 100644 index cdb12a37..00000000 --- a/cds/memory/michael/allocator.h +++ /dev/null @@ -1,1919 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_MEMORY_MICHAEL_ALLOCATOR_TMPL_H -#define CDSLIB_MEMORY_MICHAEL_ALLOCATOR_TMPL_H - -/* - Michael allocator implementation - Source: - [2004] Maged Michael "Scalable Lock-Free Dynamic Memory Allocation" - - Editions: - 2011.09.07 khizmax Optimization: small page (about 64K) is allocated by Heap::alloc call. - This optimization allows to allocate system memory more regularly, - in blocks of 1M that leads to less memory fragmentation. - 2011.01.02 khizmax Created -*/ - -#include -#include // unique_lock -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace cds { - /// Memory-related algorithms: allocators etc. -namespace memory { - /// Michael's allocator (class Heap) - /** - \par Source - \li [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation" - - This namespace declares the main class Heap and a lot of helper classes. - */ -namespace michael { - - /// Size class - struct size_class { - unsigned int nBlockSize ; ///< block size in bytes - unsigned int nSBSize ; ///< superblock size (64K or 1M) - unsigned int nCapacity ; ///< superblock capacity (nSBSize / nBlockSize) - unsigned int nSBSizeIdx ; ///< internal superblock size index (page index) - }; - - /// %Heap based on system \p malloc and \p free functions - struct malloc_heap - { - /// Allocates memory block of \p nSize bytes (\p malloc wrapper) - static void * alloc( size_t nSize ) - { - void * p = ::malloc( nSize ); - return p; - } - /// Returning memory block to the system (\p free wrapper) - static void free( void * p ) - { - ::free( p ); - } - }; - - /// %Heap based on system provided aligned \p malloc and \p free functions - struct aligned_malloc_heap - { - /// Allocates aligned memory block of \p nSize bytes with alignment \p nAlignment - static void * alloc( size_t nSize, size_t nAlignment ) - { - return cds::OS::aligned_malloc( nSize, nAlignment ); - } - /// Frees aligned memory block \p p that has been previosly allocated by \ref alloc call - static void free( void * p ) - { - cds::OS::aligned_free( p ); - } - }; - - /// Page heap based on \p Heap - /** - Page heap can allocate memory by page-sized block only. - \p Heap may be any heap that provides interface like \ref malloc_heap. - - This class is one of available implementation of opt::page_heap option. - */ - template - class page_allocator: public Heap - { - //@cond - typedef Heap base_class; - size_t m_nPageSize; - //@endcond - - public: - /// Initializes heap - page_allocator( - size_t nPageSize ///< page size in bytes - ) - : m_nPageSize( nPageSize ) - {} - - /// Allocate new page - void * alloc() - { - return base_class::alloc( m_nPageSize ); - } - - /// Free page \p pPage - void free( void * pPage ) - { - base_class::free( pPage ); - } - }; - - /// Page cacheable heap - /** - To improve performance this allocator maintains small list of free pages. - Page heap can allocate memory by page-sized block only. - - Template parameters: - \li \p FreeListCapacity - capacity of free-list, default value is 64 page - \li \p Heap may be any heap that provides interface like \ref malloc_heap. - - This class is one of available implementation of opt::page_heap option. - */ - template - class page_cached_allocator: public page_allocator - { - //@cond - typedef page_allocator base_class; - -#ifdef _DEBUG - struct make_null_ptr { - void operator ()(void *& p) - { - p = nullptr; - } - }; -#endif - struct free_list_traits : public cds::container::vyukov_queue::traits - { - typedef opt::v::initialized_static_buffer buffer; -#ifdef _DEBUG - typedef make_null_ptr value_cleaner; -#endif - }; - typedef container::VyukovMPMCCycleQueue< void *, free_list_traits > free_list; - - free_list m_FreeList; - //@endcond - - public: - /// Initializes heap - page_cached_allocator( - size_t nPageSize ///< page size in bytes - ) - : base_class( nPageSize ) - , m_FreeList( FreeListCapacity ) - {} - - //@cond - ~page_cached_allocator() - { - void * pPage; - while ( m_FreeList.pop(pPage)) - base_class::free( pPage ); - } - //@endcond - - /// Allocate new page - void * alloc() - { - void * pPage; - if ( !m_FreeList.pop( pPage )) - pPage = base_class::alloc(); - return pPage; - } - - /// Free page \p pPage - void free( void * pPage ) - { - if ( !m_FreeList.push( pPage )) - base_class::free( pPage ); - } - }; - - /// Implementation of opt::sizeclass_selector option - /** - Default size-class selector can manage memory blocks up to 64K. - */ - class CDS_EXPORT_API default_sizeclass_selector - { - //@cond - /// Count of different size-classes - static const size_t c_nSizeClassCount = 63; - - /// Max block size - static const size_t c_nMaxBlockSize = 64 * 1024; - - /// Page size of type 0 (64K) - static const unsigned int c_nPage64K = 64 * 1024 - 32; - - /// Page size of type 1 (1M) - static const unsigned int c_nPage1M = 1024 * 1024; - - static CDS_DATA_ALIGNMENT(128) unsigned int const m_szClassBounds[c_nSizeClassCount]; - static size_class const m_szClass[c_nSizeClassCount]; - static unsigned char const m_szClassMap[]; - //@endcond - public: - /// Type of size-class index - typedef unsigned int sizeclass_index; - -#ifdef _DEBUG - default_sizeclass_selector(); -#endif - - /// "No size class" index - static const sizeclass_index c_nNoSizeClass = (unsigned int) (0 - 1); - - /// Returns size-class count - static sizeclass_index size() - { - return c_nSizeClassCount; - } - - /// Returns page size in bytes for given page type \p nPageType - static size_t page_size(size_t nPageType ) - { - switch (nPageType) { - case 0: - return c_nPage64K; - case 1: - return c_nPage1M; - default: - assert(false) ; // anything forgotten?.. - } - return c_nPage1M; - } - - /// Returns count of page size-class - /** - This class supports pages of two types: 64K page for small objects and 1M page for other objects. - */ - static size_t pageTypeCount() - { - return 2; - } - - /// Returns size-class index for \p nSize - /** - For large blocks that cannot be allocated by Michael's allocator - the function must return -1. - */ - static sizeclass_index find( size_t nSize ) - { - if ( nSize > c_nMaxBlockSize ) { - // Too large block - allocate from system - return c_nNoSizeClass; - } - sizeclass_index szClass = m_szClassMap[ (nSize + 15) / 16 ]; - assert( nSize <= m_szClassBounds[ szClass ] ); - assert( szClass == 0 || m_szClassBounds[ szClass - 1] < nSize ); - - return szClass; - } - - /// Gets details::size_class struct for size-class index \p nIndex - static const size_class * at( sizeclass_index nIndex ) - { - assert( nIndex < size()); - return m_szClass + nIndex; - } - }; - - //@cond - namespace details { - struct free_list_tag; - typedef boost::intrusive::list_base_hook< boost::intrusive::tag< free_list_tag > > free_list_locked_hook; - - struct partial_list_tag; - typedef boost::intrusive::list_base_hook< boost::intrusive::tag< partial_list_tag > > partial_list_locked_hook; - - struct intrusive_superblock_desc: public free_list_locked_hook, partial_list_locked_hook - {}; - } - //@endcond - - /// List of free superblock descriptor - /** - This class is a implementation of \ref opt::free_list option - */ - template - class free_list_locked: public boost::intrusive::list > - { - //@cond - typedef boost::intrusive::list > base_class; - public: - typedef details::free_list_locked_hook item_hook; - typedef Lock lock_type; - protected: - typedef std::unique_lock auto_lock; - - mutable lock_type m_access; - //@endcond - - public: - /// Rebinds to other item type \p T2 - template - struct rebind { - typedef free_list_locked other ; ///< rebind result - }; - - public: - /// Push superblock descriptor to free-list - void push( T * pDesc ) - { - assert( base_class::node_algorithms::inited( static_cast(pDesc))); - auto_lock al(m_access); - base_class::push_back( *pDesc ); - } - - /// Pop superblock descriptor from free-list - T * pop() - { - auto_lock al(m_access); - if ( base_class::empty()) - return nullptr; - T& rDesc = base_class::front(); - base_class::pop_front(); - assert( base_class::node_algorithms::inited( static_cast(&rDesc))); - return &rDesc; - } - - /// Returns current count of superblocks in free-list - size_t size() const - { - auto_lock al(m_access); - return base_class::size(); - } - }; - - /// List of partial filled superblock descriptor - /** - This class is a implementation of \ref opt::partial_list option - */ - template - class partial_list_locked: public boost::intrusive::list > - { - //@cond - typedef boost::intrusive::list > base_class; - public: - typedef details::partial_list_locked_hook item_hook; - typedef Lock lock_type; - protected: - typedef std::unique_lock auto_lock; - - mutable lock_type m_access; - //@endcond - - public: - /// Rebinds to other item type \p T2 - template - struct rebind { - typedef partial_list_locked other ; ///< rebind result - }; - - public: - /// Push a superblock \p pDesc to the list - void push( T * pDesc ) - { - auto_lock al( m_access ); - assert( base_class::node_algorithms::inited( static_cast(pDesc))); - base_class::push_back( *pDesc ); - } - - /// Pop superblock from the list - T * pop() - { - auto_lock al( m_access ); - if ( base_class::empty()) - return nullptr; - T& rDesc = base_class::front(); - base_class::pop_front(); - assert( base_class::node_algorithms::inited( static_cast(&rDesc))); - return &rDesc; - } - - /// Removes \p pDesc descriptor from the free-list - bool unlink( T * pDesc ) - { - assert(pDesc != nullptr); - auto_lock al( m_access ); - // !inited(pDesc) is equal to "pDesc is being linked to partial list" - if ( !base_class::node_algorithms::inited( static_cast(pDesc))) { - base_class::erase( base_class::iterator_to( *pDesc )); - return true; - } - return false; - } - - /// Count of element in the list - size_t size() const - { - auto_lock al( m_access ); - return base_class::size(); - } - }; - - /// Summary processor heap statistics - /** - Summary heap statistics for use with Heap::summaryStat function. - */ - struct summary_stat - { - size_t nAllocFromActive ; ///< Event count of allocation from active superblock - size_t nAllocFromPartial ; ///< Event count of allocation from partial superblock - size_t nAllocFromNew ; ///< Event count of allocation from new superblock - size_t nFreeCount ; ///< Count of \p free function call - size_t nPageAllocCount ; ///< Count of page (superblock) allocated - size_t nPageDeallocCount ; ///< Count of page (superblock) deallocated - size_t nDescAllocCount ; ///< Count of superblock descriptors - size_t nDescFull ; ///< Count of full superblock - uint64_t nBytesAllocated ; ///< Count of allocated bytes (for heap managed memory blocks) - uint64_t nBytesDeallocated ; ///< Count of deallocated bytes (for heap managed memory blocks) - - size_t nSysAllocCount ; ///< Count of \p alloc and \p alloc_aligned function call (for large memory blocks that allocated directly from OS) - size_t nSysFreeCount ; ///< Count of \p free and \p free_aligned function call (for large memory blocks that allocated directly from OS) - uint64_t nSysBytesAllocated ; ///< Count of allocated bytes (for large memory blocks that allocated directly from OS) - int64_t nSysBytesDeallocated; ///< Count of deallocated bytes (for large memory blocks that allocated directly from OS) - - // Internal contention indicators - /// CAS failure counter for updating active field of active block of \p alloc_from_active Heap internal function - /** - Contention indicator. The less value is better - */ - size_t nActiveDescCASFailureCount; - /// CAS failure counter for updating active field of active block of \p alloc_from_active Heap internal function - /** - Contention indicator. The less value is better - */ - size_t nActiveAnchorCASFailureCount; - /// CAS failure counter for updating anchor field of partial block of \p alloc_from_partial Heap internal function - /** - Contention indicator. The less value is better - */ - size_t nPartialDescCASFailureCount; - /// CAS failure counter for updating anchor field of partial block of \p alloc_from_partial Heap internal function - /** - Contention indicator. The less value is better - */ - size_t nPartialAnchorCASFailureCount; - - - public: - /// Constructs empty statistics. All counters are zero. - summary_stat() - { - clear(); - } - - /// Difference statistics - /** - This operator computes difference between \p *this and \p stat and places the difference to \p this. - Returns \p *this; - */ - summary_stat& operator -=( const summary_stat& stat ) - { - nAllocFromActive -= stat.nAllocFromActive; - nAllocFromPartial -= stat.nAllocFromPartial; - nAllocFromNew -= stat.nAllocFromNew; - nFreeCount -= stat.nFreeCount; - nPageAllocCount -= stat.nPageAllocCount; - nPageDeallocCount -= stat.nPageDeallocCount; - nDescAllocCount -= stat.nDescAllocCount; - nDescFull -= stat.nDescFull; - nBytesAllocated -= stat.nBytesAllocated; - nBytesDeallocated -= stat.nBytesDeallocated; - - nSysAllocCount -= stat.nSysAllocCount; - nSysFreeCount -= stat.nSysFreeCount; - nSysBytesAllocated -= stat.nSysBytesAllocated; - nSysBytesDeallocated -= stat.nSysBytesDeallocated; - - nActiveDescCASFailureCount -= stat.nActiveDescCASFailureCount; - nActiveAnchorCASFailureCount -= stat.nActiveAnchorCASFailureCount; - nPartialDescCASFailureCount -= stat.nPartialDescCASFailureCount; - nPartialAnchorCASFailureCount -= stat.nPartialAnchorCASFailureCount; - - return *this; - } - - /// Clears statistics - /** - All counters are set to zero. - */ - void clear() - { - memset( this, 0, sizeof(*this)); - } - - //@cond - template - summary_stat& add_procheap_stat( const Stat& stat ) - { - nAllocFromActive += stat.allocFromActive(); - nAllocFromPartial += stat.allocFromPartial(); - nAllocFromNew += stat.allocFromNew(); - nFreeCount += stat.freeCount(); - nPageAllocCount += stat.blockAllocated(); - nPageDeallocCount += stat.blockDeallocated(); - nDescAllocCount += stat.descAllocCount(); - nDescFull += stat.descFull(); - nBytesAllocated += stat.allocatedBytes(); - nBytesDeallocated += stat.deallocatedBytes(); - - nActiveDescCASFailureCount += stat.activeDescCASFailureCount(); - nActiveAnchorCASFailureCount += stat.activeAnchorCASFailureCount(); - nPartialDescCASFailureCount += stat.partialDescCASFailureCount(); - nPartialAnchorCASFailureCount += stat.partialAnchorCASFailureCount(); - - return *this; - } - - template - summary_stat& add_heap_stat( const Stat& stat ) - { - nSysAllocCount += stat.allocCount(); - nSysFreeCount += stat.freeCount(); - - nSysBytesAllocated += stat.allocatedBytes(); - nSysBytesDeallocated+= stat.deallocatedBytes(); - - return *this; - } - //@endcond - }; - - /// Michael's allocator - /** - This class provides base functionality for Michael's allocator. It does not provide - the interface described by \p std::allocator, therefore, we name it as a heap, not as an allocator. - The heap interface is closer to semantics of \p malloc / \p free system functions. - The heap supports allocation of aligned and unaligned data. - - The algorithm is based on simplified version of - \li [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation" - - that, in turn, is concurrent version of well-known Hoard allocator developed by Emery Berger, see - \li [2002] Emery Berger "Memory Management for High-Performance Application", PhD thesis - - This is powerful, scalable, fully customizable heap with fast-path without any locks - that has been developed specifically for multi-threading. - With opt:sys_topology you can set as many allocation arena ("processor heap") as you need. - You can manually bound any your thread to any arena ("processor"). With opt::sizeclass_selector option you can manage - allocation granularity. With opt::page_heap you can utilize any OS-provided features for page allocation - like \p mmap, \p VirtualAlloc etc. The heap can gather internal statistics that helps you to tune your application. - The opt::check_bounds feature can help you to find a memory buffer overflow. - - Brief algorithm description from Michael's work: - - Large blocks (greater than 64K) are allocated directly from the OS and freed directly to the OS. For smaller block sizes, - the heap is composed of large superblocks (64 KB or 1MB size). Each superblock is divided into multiple equal-sized blocks. - Superblocks are distributed among size classes based on their block sizes. Each size class contains multiple processor - heaps proportional to the number of processors in the system. A processor heap contains at most one active superblock. - An active superblock contains one or more blocks available for reservation that are guaranteed to be available to threads - that reach them through the header of the processor heap. Each superblock is associated with a descriptor. Each allocated - block contains a prefix (8 bytes) that points to the descriptor of its superblock. On the first call to malloc, the static - structures for the size classes and processor heaps (about 16 KB for a 16 processor machine) are allocated and initialized - in a lock-free manner. - - Malloc starts by identifying the appropriate processor heap, based on the requested block size and the identity of - the calling thread. Typically, the heap already has an active superblock with blocks available for reservation. The thread - atomically reads a pointer to the descriptor of the active superblock and reserves a block. Next, the thread atomically - pops a block from that superblock and updates its descriptor. A typical free pushes the freed block into the list of - available blocks of its original superblock by atomically updating its descriptor. - - Constraint: one superblock may contain up to 2048 block. This restriction imposes a restriction on the maximum - superblock size. - - Available \p Options: - - \ref opt::sys_topology - class that describes system topology needed for allocator. - Default is \p cds::OS::topology (see cds::OS::Win32::topology for interface description) - - \ref opt::system_heap - option setter for an allocator for large blocks that is used for direct allocation from OS. - Default is \ref malloc_heap. - - \ref opt::aligned_heap - option setter for a heap used for internal aligned memory management. - Default is \ref aligned_malloc_heap - - \ref opt::page_heap - option setter for a heap used for page (superblock) allocation of 64K/1M size. - Default is \ref page_cached_allocator - - \ref opt::sizeclass_selector - option setter for a class used to select appropriate size-class - for incoming allocation request. - Default is \ref default_sizeclass_selector - - \ref opt::free_list - option setter for a class to manage a list of free superblock descriptors - Default is \ref free_list_locked - - \ref opt::partial_list - option setter for a class to manage a list of partial filled superblocks - Default is \ref partial_list_locked - - \ref opt::procheap_stat - option setter for a class to gather internal statistics for memory allocation - that is maintained by the heap. - Default is \ref procheap_empty_stat - - \ref opt::os_allocated_stat - option setter for a class to gather internal statistics for large block - allocation. Term "large block" is specified by the size-class selector (see \ref opt::sizeclass_selector) - and it is 64K for \ref default_sizeclass_selector. Any block that is large that 64K is allocated from - OS directly. \p os_allocated_stat option is set a class to gather statistics for large blocks. - Default is \ref os_allocated_empty - - \ref opt::check_bounds - a bound checker. - Default is no bound checker (cds::opt::none) - - \par Usage: - The heap is the basic building block for your allocator or operator new implementation. - - \code - #include - - // Heap with explicitly defined options: - cds::memory::michael::Heap< - opt::aligned_heap< aligned_malloc_heap >, - opt::page_heap< page_cached_allocator<16, malloc_heap> > - > myHeap; - - // Heap with default options: - cds::memory::michael::Heap<> myDefHeap; - \endcode - - \par How to make std-like allocator - - There are serious differencies of heap and std::allocator interface: - - Heap is stateful, and \p std::allocator is stateless. - - Heap has much more template parameters than \p std::allocator - - Heap has low-level interface for memory allocating only unlike the allocator - interface that can construct/destroy objects of any type T. - - To convert heap interface into \p std::allocator -like interface you should: - - Declare object of class cds::memory::michael::Heap specifying the necessary - template parameters; this is usually static object - - Create a class with \p std::allocator interface that uses the function of heap. - \code - #include - - template - class MichaelAllocator - { - typedef std::allocator std_allocator; - typedef cds::memory::michael::Heap<> michael_heap; - - // Michael heap static object - static michael_heap s_Heap; - public: - // Declare typedefs from std::allocator - typedef typename std_allocator::const_pointer const_pointer; - typedef typename std_allocator::pointer pointer; - typedef typename std_allocator::const_reference const_reference; - typedef typename std_allocator::reference reference; - typedef typename std_allocator::difference_type difference_type; - typedef typename std_allocator::size_type size_type; - typedef typename std_allocator::value_type value_type; - - // Allocation function - pointer allocate( size_type _Count, const void* _Hint ) - { - return reinterpret_cast( s_Heap.alloc( sizeof(T) * _Count )); - } - - // Deallocation function - void deallocate( pointer _Ptr, size_type _Count ) - { - s_Heap.free( _Ptr ); - } - - // Other std::allocator specific functions: address, construct, destroy, etc. - ... - - // Rebinding allocator to other type - template - struct rebind { - typedef MichaelAllocator<_Other> other; - }; - }; - - // In .cpp file: - MichaelAllocator::michael_heap MichaelAllocator::s_Heap; - - \endcode - */ - template - class Heap { - protected: - - //@cond - static const unsigned int c_nAlignment = cds::c_nCacheLineSize; - static const unsigned int c_nDefaultBlockAlignment = 8; - - struct default_options { - typedef cds::OS::topology sys_topology; - typedef malloc_heap system_heap; - typedef page_cached_allocator<> page_heap; - typedef aligned_malloc_heap aligned_heap; - typedef default_sizeclass_selector sizeclass_selector; - typedef free_list_locked free_list; - typedef partial_list_locked partial_list; - typedef procheap_empty_stat procheap_stat; - typedef os_allocated_empty os_allocated_stat; - typedef cds::opt::none check_bounds; - }; - //@endcond - - protected: - //@cond - typedef typename opt::make_options::type options; - //@endcond - - //@cond - typedef unsigned char byte; - //@endcond - public: - typedef typename options::sys_topology sys_topology ; ///< effective system topology - typedef typename options::system_heap system_heap ; ///< effective system heap - typedef typename options::aligned_heap aligned_heap ; ///< effective aligned heap - typedef typename options::sizeclass_selector sizeclass_selector ; ///< effective sizeclass selector - typedef typename options::page_heap page_heap ; ///< effective page heap - typedef typename options::procheap_stat procheap_stat ; ///< effective processor heap statistics - typedef typename options::os_allocated_stat os_allocated_stat ; ///< effective OS-allocated memory statistics - typedef details::bound_checker_selector< typename options::check_bounds > bound_checker ; ///< effective bound checker - - // forward declarations - //@cond - struct superblock_desc; - struct processor_heap_base; - struct processor_desc; - //@endcond - - /// Superblock states - /** - A superblock can be in one of four states: \p ACTIVE, \p FULL, - \p PARTIAL, or \p EMPTY. A superblock is \p ACTIVE if it is the active - superblock in a heap, or if a thread intends to try to install it - as such. A superblock is \p FULL if all its blocks are either allocated - or reserved. A superblock is \p PARTIAL if it is not \p ACTIVE - and contains unreserved available blocks. A superblock is - \p EMPTY if all its blocks are free and it is not \p ACTIVE. - */ - enum superblock_state { - SBSTATE_ACTIVE = 0, ///< superblock is active - SBSTATE_FULL = 1, ///< superblock is full - SBSTATE_PARTIAL = 2, ///< superblock is partially allocated - SBSTATE_EMPTY = 3 ///< superblock is empty and may be freed - }; - - static const size_t c_nMaxBlockInSuperBlock = 1024 * 2 ; ///< Max count of blocks in superblock (2 ** 11) - - /// Anchor of the superblock descriptor. Updated by CAS - struct anchor_tag { - unsigned long long avail:11 ; ///< index of first available block in the superblock - unsigned long long count:11 ; ///< number of unreserved blocks in the superblock - unsigned long long state: 2 ; ///< state of the superblock (see \ref superblock_state enum) - unsigned long long tag:40 ; ///< ABA prevention tag - }; - - /// Superblock descriptor - struct superblock_desc - : public options::free_list::item_hook - , public options::partial_list::item_hook - { - atomics::atomic anchor ; ///< anchor, see \ref anchor_tag - byte * pSB ; ///< ptr to superblock - processor_heap_base * pProcHeap ; ///< pointer to owner processor heap - unsigned int nBlockSize ; ///< block size in bytes - unsigned int nCapacity ; ///< superblock size/block size - - //@cond - superblock_desc() - : pSB(nullptr) - , pProcHeap( nullptr ) - {} - //@endcond - }; - - //@cond - typedef typename options::free_list::template rebind::other free_list; - typedef typename options::partial_list::template rebind::other partial_list; - //@endcond - -#if CDS_BUILD_BITS == 32 - /// Allocated block header - /** - Each allocated block has 8-byte header. - The header contains pointer to owner superblock descriptor and the redirection flag. - If the block has been allocated by \ref alloc, then the redirection flag is 0 and the block's structure is: - \code - +---------------+ - | blockHeader | [8 byte] pointer to owner superblock (flag=0) - +---------------+ - | | <- memory allocated - | memory | - | | - +---------------+ - \endcode - If the block has been allocated by \ref alloc_aligned, then it is possible that pointer returned must be aligned. - In this case the redirection flag is 1 and the block's structure is: - \code - +---------------+ - +-> | blockHeader | [8 byte] pointer to owner superblock (flag=0) - | +---------------+ - | | padding | - | | (unused) | - | | | - | +---------------+ - +-- | blockHeader | [8 byte] pointer to block head (flag=1) - +---------------+ - | | <- memory allocated - | memory | - | | - +---------------+ - \endcode - */ - class block_header - { - //@cond - enum { - bitAligned = 1, - bitOSAllocated = 2 - }; - - union { - superblock_desc * pDesc ; // pointer to superblock descriptor - uint32_t nSize ; // block size (allocated form OS) - }; - uint32_t nFlags; - - public: - void set( superblock_desc * pdesc, uint32_t isAligned ) - { - pDesc = pdesc; - nFlags = isAligned ? bitAligned : 0; - } - - superblock_desc * desc() - { - assert( (nFlags & bitOSAllocated) == 0 ); - return (nFlags & bitAligned) ? reinterpret_cast( pDesc )->desc() : pDesc; - } - - block_header * begin() - { - return (nFlags & bitAligned) ? reinterpret_cast(pDesc) : this; - } - - bool isAligned() const - { - return (nFlags & bitAligned) != 0; - } - - bool isOSAllocated() const - { - return (nFlags & bitOSAllocated) != 0; - } - - void setOSAllocated( size_t sz ) - { - nSize = sz; - nFlags = bitOSAllocated; - } - - size_t getOSAllocSize() const - { - assert( isOSAllocated()); - return nSize; - } - - //@endcond - }; -#elif CDS_BUILD_BITS == 64 - //@cond - class block_header - { - enum { - bitAligned = 1, - bitOSAllocated = 2 - }; - typedef cds::details::marked_ptr marked_desc_ptr; - // If bitOSAllocated is set the pDesc contains size of memory block - // allocated from OS - marked_desc_ptr pDesc; - public: - void set( superblock_desc * pdesc, uint32_t isAligned ) - { - pDesc = marked_desc_ptr( pdesc, isAligned ); - } - - superblock_desc * desc() - { - assert( !isOSAllocated()); - return (pDesc.bits() & bitAligned) ? reinterpret_cast( pDesc.ptr())->desc() : pDesc.ptr(); - } - - block_header * begin() - { - return (pDesc.bits() & bitAligned) ? reinterpret_cast( pDesc.ptr()) : this; - } - - bool isAligned() const - { - return (pDesc.bits() & bitAligned) != 0; - } - - bool isOSAllocated() const - { - return (pDesc.bits() & bitOSAllocated) != 0; - } - - void setOSAllocated( size_t nSize ) - { - - pDesc = marked_desc_ptr( reinterpret_cast(nSize << 2), bitOSAllocated ); - } - - size_t getOSAllocSize() const - { - assert( isOSAllocated()); - return reinterpret_cast( pDesc.ptr()) >> 2; - } - - }; - //@endcond -#else -# error "Unexpected value of CDS_BUILD_BITS" -#endif // CDS_BUILD_BITS - - //@cond - struct free_block_header: block_header { - unsigned int nNextFree; - }; - //@endcond - -#if CDS_BUILD_BITS == 32 - /// Processor heap's \p active field - /** - The \p active field in the processor heap structure is primarily a pointer to the descriptor - of the active superblock owned by the processor heap. If the value of \p active is not \p nullptr, it is - guaranteed that the active superblock has at least one block available for reservation. - Since the addresses of superblock descriptors can be guaranteed to be aligned to some power - of 2 (e.g., 64), as an optimization, we can carve a credits subfield to hold the number - of blocks available for reservation in the active superblock less one. That is, if the value - of credits is n, then the active superblock contains n+1 blocks available for reservation - through the \p active field. Note that the number of blocks in a superblock is not limited - to the maximum reservations that can be held in the credits subfield. In a typical malloc operation - (i.e., when \p active != \p nullptr and \p credits > 0), the thread reads \p active and then - atomically decrements credits while validating that the active superblock is still valid. - */ - class active_tag { - //@cond - superblock_desc * pDesc; - uint32_t nCredits; - - public: - static const unsigned int c_nMaxCredits = 0 - 1; - - public: - CDS_CONSTEXPR active_tag() CDS_NOEXCEPT - : pDesc( nullptr ) - , nCredits(0) - {} - - active_tag( active_tag const& ) CDS_NOEXCEPT = default; - ~active_tag() CDS_NOEXCEPT = default; - active_tag& operator=(active_tag const& ) CDS_NOEXCEPT = default; -# if !defined(CDS_DISABLE_DEFAULT_MOVE_CTOR) - active_tag( active_tag&& ) CDS_NOEXCEPT = default; - active_tag& operator=(active_tag&&) CDS_NOEXCEPT = default; -# endif - - /// Returns pointer to superblock descriptor - superblock_desc * ptr() const - { - return pDesc; - } - - /// Sets superblock descriptor - void ptr( superblock_desc * p ) - { - pDesc = p; - } - - unsigned int credits() const - { - return nCredits; - } - - void credits( unsigned int n ) - { - nCredits = n; - } - - void clear() - { - pDesc = nullptr; - nCredits = 0; - } - - void set( superblock_desc * pSB, unsigned int n ) - { - pDesc = pSB; - nCredits = n; - } - //@endcond - }; -#elif CDS_BUILD_BITS == 64 - //@cond - class active_tag - { - public: - static const unsigned int c_nMaxCredits = c_nAlignment - 1 ; // 0x003F; - protected: - typedef cds::details::marked_ptr marked_desc_ptr; - marked_desc_ptr pDesc; - - public: - active_tag() CDS_NOEXCEPT - : pDesc( nullptr ) - {} - // Clang 3.1: error: first argument to atomic operation must be a pointer to a trivially-copyable type - //active_tag() CDS_NOEXCEPT = default; - active_tag( active_tag const& ) CDS_NOEXCEPT = default; - ~active_tag() CDS_NOEXCEPT = default; - active_tag& operator=(active_tag const&) CDS_NOEXCEPT = default; -# if !defined(CDS_DISABLE_DEFAULT_MOVE_CTOR) - active_tag( active_tag&& ) CDS_NOEXCEPT = default; - active_tag& operator=(active_tag&&) CDS_NOEXCEPT = default; -# endif - superblock_desc * ptr() const - { - return pDesc.ptr(); - } - - void ptr( superblock_desc * p ) - { - assert( (reinterpret_cast(p) & c_nMaxCredits) == 0 ); - pDesc = marked_desc_ptr( p, pDesc.bits()); - } - - unsigned int credits() - { - return (unsigned int) pDesc.bits(); - } - - void credits( unsigned int n ) - { - assert( n <= c_nMaxCredits ); - pDesc = marked_desc_ptr( pDesc.ptr(), n ); - } - - void clear() - { - pDesc = marked_desc_ptr(); - } - - void set( superblock_desc * pSB, unsigned int n ) - { - assert( (reinterpret_cast(pSB) & c_nMaxCredits) == 0 ); - pDesc = marked_desc_ptr( pSB, n ); - } - - }; - //@endcond -#else -# error "Unexpected value of CDS_BUILD_BITS" -#endif // CDS_BUILD_BITS - - - /// Processor heap - struct processor_heap_base - { - CDS_DATA_ALIGNMENT(8) atomics::atomic active; ///< pointer to the descriptor of active superblock owned by processor heap - processor_desc * pProcDesc ; ///< pointer to parent processor descriptor - const size_class * pSizeClass ; ///< pointer to size class - atomics::atomic pPartial ; ///< pointer to partial filled superblock (may be \p nullptr) - partial_list partialList ; ///< list of partial filled superblocks owned by the processor heap - unsigned int nPageIdx ; ///< page size-class index, \ref c_nPageSelfAllocation - "small page" - - /// Small page marker - /** - If page is small and can be allocated by the Heap, the \p nPageIdx value is \p c_nPageSelfAllocation. - This optimization allows to allocate system memory more regularly, in blocks of 1M that leads - to less memory fragmentation. - */ - static const unsigned int c_nPageSelfAllocation = (unsigned int) -1; - - procheap_stat stat ; ///< heap statistics - //processor_heap_statistics stat; - - //@cond - processor_heap_base() CDS_NOEXCEPT - : pProcDesc( nullptr ) - , pSizeClass( nullptr ) - , pPartial( nullptr ) - { - assert( (reinterpret_cast(this) & (c_nAlignment - 1)) == 0 ); - } - //@endcond - - /// Get partial superblock owned by the processor heap - superblock_desc * get_partial() - { - superblock_desc * pDesc = pPartial.load(atomics::memory_order_acquire); - do { - if ( !pDesc ) { - pDesc = partialList.pop(); - break; - } - } while ( !pPartial.compare_exchange_weak( pDesc, nullptr, atomics::memory_order_release, atomics::memory_order_relaxed )); - - //assert( pDesc == nullptr || free_desc_list::node_algorithms::inited( static_cast(pDesc))); - //assert( pDesc == nullptr || partial_desc_list::node_algorithms::inited( static_cast(pDesc))); - return pDesc; - } - - /// Add partial superblock \p pDesc to the list - void add_partial( superblock_desc * pDesc ) - { - assert( pPartial != pDesc ); - //assert( partial_desc_list::node_algorithms::inited( static_cast(pDesc))); - - superblock_desc * pCur = nullptr; - if ( !pPartial.compare_exchange_strong(pCur, pDesc, atomics::memory_order_acq_rel, atomics::memory_order_relaxed)) - partialList.push( pDesc ); - } - - - /// Remove superblock \p pDesc from the list of partial superblock - bool unlink_partial( superblock_desc * pDesc ) - { - return partialList.unlink( pDesc ); - } - }; - - /// Aligned superblock descriptor - typedef typename cds::details::type_padding::type processor_heap; - - /// Processor descriptor - struct processor_desc - { - processor_heap * arrProcHeap ; ///< array of processor heap - free_list listSBDescFree ; ///< List of free superblock descriptors - page_heap * pageHeaps ; ///< array of page heap (one for each page size) - - //@cond - processor_desc() - : arrProcHeap( nullptr ) - , pageHeaps( nullptr ) - {} - //@endcond - }; - - - protected: - sys_topology m_Topology ; ///< System topology - system_heap m_LargeHeap ; ///< Heap for large block - aligned_heap m_AlignedHeap ; ///< Internal aligned heap - sizeclass_selector m_SizeClassSelector ; ///< Size-class selector - atomics::atomic * m_arrProcDesc ; ///< array of pointers to the processor descriptors - unsigned int m_nProcessorCount ; ///< Processor count - bound_checker m_BoundChecker ; ///< Bound checker - - os_allocated_stat m_OSAllocStat ; ///< OS-allocated memory statistics - - protected: - //@cond - - /// Allocates large block from system memory - block_header * alloc_from_OS( size_t nSize ) - { - block_header * p = reinterpret_cast( m_LargeHeap.alloc( nSize )); - m_OSAllocStat.incBytesAllocated( nSize ); - p->setOSAllocated( nSize ); - return p; - } - - /// Allocates from the active superblock if it possible - block_header * alloc_from_active( processor_heap * pProcHeap ) - { - active_tag oldActive; - int nCollision = -1; - - // Reserve block - while ( true ) { - ++nCollision; - oldActive = pProcHeap->active.load(atomics::memory_order_acquire); - if ( !oldActive.ptr()) - return nullptr; - unsigned int nCredits = oldActive.credits(); - active_tag newActive ; // default = 0 - if ( nCredits != 0 ) { - newActive = oldActive; - newActive.credits( nCredits - 1 ); - } - if ( pProcHeap->active.compare_exchange_strong( oldActive, newActive, atomics::memory_order_release, atomics::memory_order_relaxed )) - break; - } - - if ( nCollision ) - pProcHeap->stat.incActiveDescCASFailureCount( nCollision ); - - // pop block - superblock_desc * pDesc = oldActive.ptr(); - - anchor_tag oldAnchor; - anchor_tag newAnchor; - byte * pAddr; - unsigned int nMoreCredits = 0; - - nCollision = -1; - do { - ++nCollision; - newAnchor = oldAnchor = pDesc->anchor.load(atomics::memory_order_acquire); - - assert( oldAnchor.avail < pDesc->nCapacity ); - pAddr = pDesc->pSB + oldAnchor.avail * (unsigned long long) pDesc->nBlockSize; - - // TSan reports data race if the block contained atomic ops before - CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN; - newAnchor.avail = reinterpret_cast( pAddr )->nNextFree; - CDS_TSAN_ANNOTATE_IGNORE_WRITES_END; - newAnchor.tag += 1; - - if ( oldActive.credits() == 0 ) { - // state must be ACTIVE - if ( oldAnchor.count == 0 ) - newAnchor.state = SBSTATE_FULL; - else { - nMoreCredits = oldAnchor.count < active_tag::c_nMaxCredits ? ((unsigned int) oldAnchor.count) : active_tag::c_nMaxCredits; - newAnchor.count -= nMoreCredits; - } - } - } while ( !pDesc->anchor.compare_exchange_strong( oldAnchor, newAnchor, atomics::memory_order_release, atomics::memory_order_relaxed )); - - if ( nCollision ) - pProcHeap->stat.incActiveAnchorCASFailureCount( nCollision ); - - assert( newAnchor.state != SBSTATE_EMPTY ); - - if ( newAnchor.state == SBSTATE_FULL ) - pProcHeap->stat.incDescFull(); - if ( oldActive.credits() == 0 && oldAnchor.count > 0 ) - update_active( pProcHeap, pDesc, nMoreCredits ); - - pProcHeap->stat.incAllocFromActive(); - - // block_header fields is not needed to setup - // It was set in alloc_from_new_superblock - assert( reinterpret_cast( pAddr )->desc() == pDesc ); - assert( !reinterpret_cast( pAddr )->isOSAllocated()); - assert( !reinterpret_cast( pAddr )->isAligned()); - - return reinterpret_cast( pAddr ); - } - - /// Allocates from a partial filled superblock if it possible - block_header * alloc_from_partial( processor_heap * pProcHeap ) - { - retry: - superblock_desc * pDesc = pProcHeap->get_partial(); - if ( !pDesc ) - return nullptr; - - // reserve blocks - anchor_tag oldAnchor; - anchor_tag newAnchor; - //byte * pAddr; - unsigned int nMoreCredits = 0; - - int nCollision = -1; - do { - ++nCollision; - - newAnchor = oldAnchor = pDesc->anchor.load(atomics::memory_order_acquire); - if ( oldAnchor.state == SBSTATE_EMPTY ) { - free_superblock( pDesc ); - goto retry; - } - - nMoreCredits = ((unsigned int)(oldAnchor.count - 1)) < active_tag::c_nMaxCredits ? (unsigned int)(oldAnchor.count - 1) : active_tag::c_nMaxCredits; - newAnchor.count -= nMoreCredits + 1; - newAnchor.state = (nMoreCredits > 0) ? SBSTATE_ACTIVE : SBSTATE_FULL; - newAnchor.tag += 1; - } while ( !pDesc->anchor.compare_exchange_strong(oldAnchor, newAnchor, atomics::memory_order_release, atomics::memory_order_relaxed)); - - if ( nCollision ) - pProcHeap->stat.incPartialDescCASFailureCount( nCollision ); - - if ( newAnchor.state == SBSTATE_FULL ) - pProcHeap->stat.incDescFull(); - - // Now, the thread is guaranteed to have reserved one or more blocks - // pop reserved block - byte * pAddr; - nCollision = -1; - do { - ++nCollision; - - newAnchor = oldAnchor = pDesc->anchor.load(atomics::memory_order_acquire); - - assert( oldAnchor.avail < pDesc->nCapacity ); - pAddr = pDesc->pSB + oldAnchor.avail * pDesc->nBlockSize; - newAnchor.avail = reinterpret_cast( pAddr )->nNextFree; - ++newAnchor.tag; - } while ( !pDesc->anchor.compare_exchange_strong(oldAnchor, newAnchor, atomics::memory_order_release, atomics::memory_order_relaxed)); - - if ( nCollision ) - pProcHeap->stat.incPartialAnchorCASFailureCount( nCollision ); - - assert( newAnchor.state != SBSTATE_EMPTY ); - - pProcHeap->stat.incAllocFromPartial(); - - if ( nMoreCredits > 0 ) - update_active( pProcHeap, pDesc, nMoreCredits ); - - // block_header fields is not needed to setup - // It was set in alloc_from_new_superblock - assert( reinterpret_cast( pAddr )->desc() == pDesc ); - assert( !reinterpret_cast( pAddr )->isAligned()); - assert( !reinterpret_cast( pAddr )->isOSAllocated()); - - return reinterpret_cast( pAddr ); - } - - /// Allocates from the new superblock - block_header * alloc_from_new_superblock( processor_heap * pProcHeap ) - { - superblock_desc * pDesc = new_superblock_desc( pProcHeap ); - assert( pDesc != nullptr ); - pDesc->pSB = new_superblock_buffer( pProcHeap ); - - anchor_tag anchor = pDesc->anchor.load(atomics::memory_order_relaxed); - anchor.tag += 1; - - // Make single-linked list of free blocks in superblock - byte * pEnd = pDesc->pSB + pDesc->nCapacity * pDesc->nBlockSize; - unsigned int nNext = 0; - const unsigned int nBlockSize = pDesc->nBlockSize; - for ( byte * p = pDesc->pSB; p < pEnd; p += nBlockSize ) { - reinterpret_cast( p )->set( pDesc, 0 ); - reinterpret_cast( p )->nNextFree = ++nNext; - } - reinterpret_cast( pEnd - nBlockSize )->nNextFree = 0; - - active_tag newActive; - newActive.set( pDesc, ( (pDesc->nCapacity - 1 < active_tag::c_nMaxCredits) ? pDesc->nCapacity - 1 : active_tag::c_nMaxCredits ) - 1 ); - - anchor.count = pDesc->nCapacity - 1 - (newActive.credits() + 1); - anchor.state = SBSTATE_ACTIVE; - pDesc->anchor.store(anchor, atomics::memory_order_relaxed); - - active_tag curActive; - if ( pProcHeap->active.compare_exchange_strong( curActive, newActive, atomics::memory_order_release, atomics::memory_order_relaxed )) { - pProcHeap->stat.incAllocFromNew(); - //reinterpret_cast( pDesc->pSB )->set( pDesc, 0 ); - return reinterpret_cast( pDesc->pSB ); - } - - free_superblock( pDesc ); - return nullptr; - } - - /// Find appropriate processor heap based on size-class selected - processor_heap * find_heap( typename sizeclass_selector::sizeclass_index nSizeClassIndex ) - { - assert( nSizeClassIndex < m_SizeClassSelector.size()); - - unsigned int nProcessorId = m_Topology.current_processor(); - assert( nProcessorId < m_nProcessorCount ); - - if ( nProcessorId >= m_nProcessorCount ) - nProcessorId = 0; - - processor_desc * pDesc = m_arrProcDesc[ nProcessorId ].load( atomics::memory_order_relaxed ); - while ( !pDesc ) { - - processor_desc * pNewDesc = new_processor_desc( nProcessorId ); - if ( m_arrProcDesc[nProcessorId].compare_exchange_strong( pDesc, pNewDesc, atomics::memory_order_release, atomics::memory_order_relaxed )) { - pDesc = pNewDesc; - break; - } - free_processor_desc( pNewDesc ); - } - - return &( pDesc->arrProcHeap[ nSizeClassIndex ] ); - } - - /// Updates active field of processor heap \p pProcHeap - void update_active( processor_heap * pProcHeap, superblock_desc * pDesc, unsigned int nCredits ) - { - assert( pProcHeap == pDesc->pProcHeap ); - - active_tag nullActive; - active_tag newActive; - newActive.set( pDesc, nCredits - 1 ); - - if ( pProcHeap->active.compare_exchange_strong( nullActive, newActive, atomics::memory_order_seq_cst, atomics::memory_order_relaxed )) - return; - - // Someone installed another active superblock. - // Return credits to superblock and make it partial - - anchor_tag oldAnchor; - anchor_tag newAnchor; - - do { - newAnchor = oldAnchor = pDesc->anchor.load(atomics::memory_order_acquire); - newAnchor.count += nCredits; - newAnchor.state = SBSTATE_PARTIAL; - } while ( !pDesc->anchor.compare_exchange_weak( oldAnchor, newAnchor, atomics::memory_order_release, atomics::memory_order_relaxed )); - - pDesc->pProcHeap->add_partial( pDesc ); - } - - /// Allocates new processor descriptor - processor_desc * new_processor_desc( unsigned int nProcessorId ) - { - CDS_UNUSED( nProcessorId ); - processor_desc * pDesc; - const size_t nPageHeapCount = m_SizeClassSelector.pageTypeCount(); - - /* - Processor descriptor layout - - proc_desc - 64-byte alignment - page_heap[0] 64-byte alignment - page_heap[1] 64-byte alignment - ... - page_heap[P] 64-byte alignment - - proc_heap[0] 64-byte alignment - proc_heap[1] 64-byte alignment - ... - proc_heap[N] 64-byte alignment - */ - - const size_t szDesc = - ( sizeof(processor_desc) - + sizeof(pDesc->pageHeaps[0]) * nPageHeapCount - + c_nAlignment - 1 - ) / c_nAlignment -; - - const size_t szTotal = szDesc * c_nAlignment + sizeof(processor_heap) * m_SizeClassSelector.size(); - - static_assert( (sizeof(processor_heap) % c_nAlignment) == 0, "sizeof(processor_heap) error" ); - - // TSan false positive: a new descriptor will be linked further with release fence - CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN; - - pDesc = new( m_AlignedHeap.alloc( szTotal, c_nAlignment )) processor_desc; - - pDesc->pageHeaps = reinterpret_cast( pDesc + 1 ); - for ( size_t i = 0; i < nPageHeapCount; ++i ) - new (pDesc->pageHeaps + i) page_heap( m_SizeClassSelector.page_size(i)); - - // initialize processor heaps - pDesc->arrProcHeap = - reinterpret_cast( - reinterpret_cast(reinterpret_cast(pDesc + 1) + sizeof(pDesc->pageHeaps[0]) * nPageHeapCount + c_nAlignment - 1) - & ~(uintptr_t(c_nAlignment) - 1) - ); - - processor_heap * pProcHeap = pDesc->arrProcHeap; - processor_heap * pProcHeapEnd = pDesc->arrProcHeap + m_SizeClassSelector.size(); - for ( unsigned int i = 0; pProcHeap != pProcHeapEnd; ++pProcHeap, ++i ) { - new (pProcHeap) processor_heap(); - pProcHeap->pProcDesc = pDesc; - pProcHeap->pSizeClass = m_SizeClassSelector.at(i); - if ( m_SizeClassSelector.find( pProcHeap->pSizeClass->nSBSize ) != sizeclass_selector::c_nNoSizeClass ) - pProcHeap->nPageIdx = processor_heap::c_nPageSelfAllocation; - else - pProcHeap->nPageIdx = pProcHeap->pSizeClass->nSBSizeIdx; - } - CDS_TSAN_ANNOTATE_IGNORE_WRITES_END; - return pDesc; - } - - - void free_processor_heap( processor_heap * pProcHeap ) - { - assert( pProcHeap->nPageIdx != processor_heap::c_nPageSelfAllocation ); - - page_heap& pageHeap = pProcHeap->pProcDesc->pageHeaps[pProcHeap->nPageIdx]; - superblock_desc * pDesc; - - for ( pDesc = pProcHeap->partialList.pop(); pDesc; pDesc = pProcHeap->partialList.pop()) { - pageHeap.free( pDesc->pSB ); - m_AlignedHeap.free( pDesc ); - } - - superblock_desc * pPartial = pProcHeap->pPartial.load(atomics::memory_order_relaxed); - if ( pPartial ) { - pageHeap.free( pPartial->pSB ); - m_AlignedHeap.free( pPartial ); - } - - pDesc = pProcHeap->active.load(atomics::memory_order_relaxed).ptr(); - if ( pDesc ) { - pageHeap.free( pDesc->pSB ); - m_AlignedHeap.free( pDesc ); - } - } - - /// Frees processor descriptor - void free_processor_desc( processor_desc * pDesc ) - { - const size_t nPageHeapCount = m_SizeClassSelector.pageTypeCount(); - - { - processor_heap * const pProcHeapEnd = pDesc->arrProcHeap + m_SizeClassSelector.size(); - - // free large blocks only - for ( processor_heap * pProcHeap = pDesc->arrProcHeap; pProcHeap < pProcHeapEnd; ++pProcHeap ) { - if ( pProcHeap->nPageIdx != processor_heap::c_nPageSelfAllocation ) - free_processor_heap( pProcHeap ); - - pProcHeap->~processor_heap(); - } - } - - for ( superblock_desc * pSBDesc = pDesc->listSBDescFree.pop(); pSBDesc; pSBDesc = pDesc->listSBDescFree.pop()) - m_AlignedHeap.free( pSBDesc ); - - for (size_t i = 0; i < nPageHeapCount; ++i ) - (pDesc->pageHeaps + i)->page_heap::~page_heap(); - - pDesc->pageHeaps = nullptr; - - pDesc->processor_desc::~processor_desc(); - m_AlignedHeap.free( pDesc ); - } - - /// Allocates new superblock descriptor - superblock_desc * new_superblock_desc( processor_heap * pProcHeap ) - { - anchor_tag anchor; - superblock_desc * pDesc = pProcHeap->pProcDesc->listSBDescFree.pop(); - if ( pDesc == nullptr ) { - pDesc = new( m_AlignedHeap.alloc(sizeof(superblock_desc), c_nAlignment )) superblock_desc; - assert( (uintptr_t(pDesc) & (c_nAlignment - 1)) == 0 ); - - anchor = pDesc->anchor.load( atomics::memory_order_relaxed ); - anchor.tag = 0; - pDesc->anchor.store( anchor, atomics::memory_order_relaxed ); - - pProcHeap->stat.incDescAllocCount(); - } - pDesc->nBlockSize = pProcHeap->pSizeClass->nBlockSize; - pDesc->nCapacity = pProcHeap->pSizeClass->nCapacity; - assert( pDesc->nCapacity <= c_nMaxBlockInSuperBlock ); - pDesc->pProcHeap = pProcHeap; - - anchor = pDesc->anchor.load( atomics::memory_order_relaxed ); - anchor.avail = 1; - pDesc->anchor.store( anchor, atomics::memory_order_relaxed ); - - return pDesc; - } - - /// Allocates superblock page - byte * new_superblock_buffer( processor_heap * pProcHeap ) - { - pProcHeap->stat.incBlockAllocated(); - if ( pProcHeap->nPageIdx == processor_heap::c_nPageSelfAllocation ) { - return (byte *) alloc( pProcHeap->pSizeClass->nSBSize ); - } - else { - return (byte *) pProcHeap->pProcDesc->pageHeaps[pProcHeap->nPageIdx].alloc(); - } - } - - /// Frees superblock descriptor and its page - void free_superblock( superblock_desc * pDesc ) - { - pDesc->pProcHeap->stat.incBlockDeallocated(); - processor_desc * pProcDesc = pDesc->pProcHeap->pProcDesc; - if ( pDesc->pSB ) { - if ( pDesc->pProcHeap->nPageIdx == processor_heap::c_nPageSelfAllocation ) - free( pDesc->pSB ); - else - pProcDesc->pageHeaps[pDesc->pProcHeap->nPageIdx].free( pDesc->pSB ); - } - pProcDesc->listSBDescFree.push( pDesc ); - } - - /// Allocate memory block - block_header * int_alloc( - size_t nSize ///< Size of memory block to allocate in bytes - ) - { - typename sizeclass_selector::sizeclass_index nSizeClassIndex = m_SizeClassSelector.find( nSize ); - if ( nSizeClassIndex == sizeclass_selector::c_nNoSizeClass ) { - return alloc_from_OS( nSize ); - } - assert( nSizeClassIndex < m_SizeClassSelector.size()); - - block_header * pBlock; - processor_heap * pProcHeap; - while ( true ) { - pProcHeap = find_heap( nSizeClassIndex ); - if ( !pProcHeap ) - return alloc_from_OS( nSize ); - - if ( (pBlock = alloc_from_active( pProcHeap )) != nullptr ) - break; - if ( (pBlock = alloc_from_partial( pProcHeap )) != nullptr ) - break; - if ( (pBlock = alloc_from_new_superblock( pProcHeap )) != nullptr ) - break; - } - - pProcHeap->stat.incAllocatedBytes( pProcHeap->pSizeClass->nBlockSize ); - - assert( pBlock != nullptr ); - return pBlock; - } - - //@endcond - public: - /// Heap constructor - Heap() - { - // Explicit libcds initialization is needed since a static object may be constructed - cds::Initialize(); - - m_nProcessorCount = m_Topology.processor_count(); - m_arrProcDesc = new( m_AlignedHeap.alloc(sizeof(processor_desc *) * m_nProcessorCount, c_nAlignment )) - atomics::atomic[ m_nProcessorCount ]; - memset( m_arrProcDesc, 0, sizeof(processor_desc *) * m_nProcessorCount ) ; // ?? memset for atomic<> - } - - /// Heap destructor - /** - The destructor frees all memory allocated by the heap. - */ - ~Heap() - { - for ( unsigned int i = 0; i < m_nProcessorCount; ++i ) { - processor_desc * pDesc = m_arrProcDesc[i].load(atomics::memory_order_relaxed); - if ( pDesc ) - free_processor_desc( pDesc ); - } - - m_AlignedHeap.free( m_arrProcDesc ); - - // Explicit termination of libcds - cds::Terminate(); - } - - /// Allocate memory block - void * alloc( - size_t nSize ///< Size of memory block to allocate in bytes - ) - { - block_header * pBlock = int_alloc( nSize + sizeof(block_header) + bound_checker::trailer_size ); - - // Bound checking is only for our blocks - if ( !pBlock->isOSAllocated()) { - // the block is allocated from our heap - bound checker is applicable - m_BoundChecker.make_trailer( - reinterpret_cast(pBlock + 1), - reinterpret_cast(pBlock) + pBlock->desc()->nBlockSize, - nSize - ); - } - - CDS_TSAN_ANNOTATE_PUBLISH_MEMORY_RANGE( pBlock + 1, nSize ); - return pBlock + 1; - } - - /// Free previously allocated memory block - void free( - void * pMemory ///< Pointer to memory block to free - ) - { - if ( !pMemory ) - return; - - block_header * pRedirect = (reinterpret_cast( pMemory ) - 1); - block_header * pBlock = pRedirect->begin(); - - if ( pBlock->isOSAllocated()) { - // Block has been allocated from OS - m_OSAllocStat.incBytesDeallocated( pBlock->getOSAllocSize()); - m_LargeHeap.free( pBlock ); - return; - } - - assert( !pBlock->isAligned()); - superblock_desc * pDesc = pBlock->desc(); - - m_BoundChecker.check_bounds( - pRedirect + 1, - reinterpret_cast( pBlock ) + pDesc->nBlockSize, - pDesc->nBlockSize - ); - - - anchor_tag oldAnchor; - anchor_tag newAnchor; - processor_heap_base * pProcHeap = pDesc->pProcHeap; - - pProcHeap->stat.incDeallocatedBytes( pDesc->nBlockSize ); - - oldAnchor = pDesc->anchor.load(atomics::memory_order_acquire); - do { - newAnchor = oldAnchor; - reinterpret_cast( pBlock )->nNextFree = oldAnchor.avail; - newAnchor.avail = (reinterpret_cast( pBlock ) - pDesc->pSB) / pDesc->nBlockSize; - newAnchor.tag += 1; - - assert( oldAnchor.state != SBSTATE_EMPTY ); - - if ( oldAnchor.state == SBSTATE_FULL ) - newAnchor.state = SBSTATE_PARTIAL; - - if ( oldAnchor.count == pDesc->nCapacity - 1 ) { - //pProcHeap = pDesc->pProcHeap; - //CDS_COMPILER_RW_BARRIER ; // instruction fence is needed?.. - newAnchor.state = SBSTATE_EMPTY; - } - else - newAnchor.count += 1; - } while ( !pDesc->anchor.compare_exchange_strong( oldAnchor, newAnchor, atomics::memory_order_release, atomics::memory_order_relaxed )); - - pProcHeap->stat.incFreeCount(); - - if ( newAnchor.state == SBSTATE_EMPTY ) { - if ( pProcHeap->unlink_partial( pDesc )) - free_superblock( pDesc ); - } - else if (oldAnchor.state == SBSTATE_FULL ) { - assert( pProcHeap != nullptr ); - pProcHeap->stat.decDescFull(); - pProcHeap->add_partial( pDesc ); - } - } - - /// Reallocate memory block - /** - If \p nNewSize is zero, then the block pointed to by \p pMemory is freed; - the return value is \p nullptr, and \p pMemory is left pointing at a freed block. - - If there is not enough available memory to expand the block to the given size, - the original block is left unchanged, and \p nullptr is returned. - - Aligned memory block cannot be realloc'ed: if \p pMemory has been allocated by \ref alloc_aligned, - then the return value is \p nullptr and the original block is left unchanged. - */ - void * realloc( - void * pMemory, ///< Pointer to previously allocated memory block - size_t nNewSize ///< New size of memory block, in bytes - ) - { - if ( nNewSize == 0 ) { - free( pMemory ); - return nullptr; - } - - const size_t nOrigSize = nNewSize; - nNewSize += sizeof(block_header) + bound_checker::trailer_size; - - block_header * pBlock = reinterpret_cast( pMemory ) - 1; - - // Reallocation of aligned block is not possible - if ( pBlock->isAligned()) { - assert( false ); - return nullptr; - } - - if ( pBlock->isOSAllocated()) { - // The block has been allocated from OS - size_t nCurSize = pBlock->getOSAllocSize(); - - if ( nCurSize >= nNewSize ) - return pMemory; - - // Grow block size - void * pNewBuf = alloc( nOrigSize ); - if ( pNewBuf ) { - memcpy( pNewBuf, pMemory, nCurSize - sizeof(block_header)); - free( pMemory ); - } - return pNewBuf; - } - - superblock_desc * pDesc = pBlock->desc(); - if ( pDesc->nBlockSize <= nNewSize ) { - // In-place reallocation - m_BoundChecker.make_trailer( - reinterpret_cast(pBlock + 1), - reinterpret_cast(pBlock) + pBlock->desc()->nBlockSize, - nOrigSize - ); - - return pMemory; - } - - void * pNew = alloc( nNewSize ); - if ( pNew ) { - memcpy( pNew, pMemory, pDesc->nBlockSize - sizeof(block_header)); - free( pMemory ); - return pNew; - } - - return nullptr; - } - - /// Allocate aligned memory block - void * alloc_aligned( - size_t nSize, ///< Size of memory block to allocate in bytes - size_t nAlignment ///< Alignment - ) - { - if ( nAlignment <= c_nDefaultBlockAlignment ) { - void * p = alloc( nSize ); - assert( (reinterpret_cast(p) & (nAlignment - 1)) == 0 ); - return p; - } - - block_header * pBlock = int_alloc( nSize + nAlignment + sizeof(block_header) + bound_checker::trailer_size ); - - block_header * pRedirect; - if ( (reinterpret_cast( pBlock + 1) & (nAlignment - 1)) != 0 ) { - pRedirect = reinterpret_cast( (reinterpret_cast( pBlock ) & ~(nAlignment - 1)) + nAlignment ) - 1; - assert( pRedirect != pBlock ); - pRedirect->set( reinterpret_cast(pBlock), 1 ); - - assert( (reinterpret_cast(pRedirect + 1) & (nAlignment - 1)) == 0 ); - } - else - pRedirect = pBlock; - - - // Bound checking is only for our blocks - if ( !pBlock->isOSAllocated()) { - // the block is allocated from our heap - bound checker is applicable - m_BoundChecker.make_trailer( - reinterpret_cast(pRedirect + 1), - reinterpret_cast(pBlock) + pBlock->desc()->nBlockSize, - nSize - ); - } - - return pRedirect + 1; - } - - /// Free aligned memory block previously allocated by \ref alloc_aligned - void free_aligned( - void * pMemory ///< Pointer to memory block to free - ) - { - free( pMemory ); - } - - public: - - /// Get instant summary statistics - void summaryStat( summary_stat& st ) - { - size_t nProcHeapCount = m_SizeClassSelector.size(); - for ( unsigned int nProcessor = 0; nProcessor < m_nProcessorCount; ++nProcessor ) { - processor_desc * pProcDesc = m_arrProcDesc[nProcessor].load(atomics::memory_order_relaxed); - if ( pProcDesc ) { - for ( unsigned int i = 0; i < nProcHeapCount; ++i ) { - processor_heap_base * pProcHeap = pProcDesc->arrProcHeap + i; - if ( pProcHeap ) { - st.add_procheap_stat( pProcHeap->stat ); - } - } - } - } - - st.add_heap_stat( m_OSAllocStat ); - } - }; - -}}} // namespace cds::memory::michael - -#endif // CDSLIB_MEMORY_MICHAEL_ALLOCATOR_TMPL_H diff --git a/cds/memory/michael/bound_check.h b/cds/memory/michael/bound_check.h deleted file mode 100644 index e10365f4..00000000 --- a/cds/memory/michael/bound_check.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_MEMORY_MICHAEL_ALLOCATOR_BOUND_CHECK_H -#define CDSLIB_MEMORY_MICHAEL_ALLOCATOR_BOUND_CHECK_H - -#include -#include -#include - -namespace cds { namespace memory { namespace michael { - - //@cond - namespace details { - class bound_checker - { - protected: - typedef uint64_t trailer_type; - static const trailer_type s_BoundCheckerTrailer = 0xbadcafeedeadc0feULL; - - public: - enum { - trailer_size = sizeof(trailer_type) + sizeof(size_t) - }; - - void make_trailer( void * pStartArea, void * pEndBlock, size_t nAllocSize ) - { - char * pArea = reinterpret_cast(pStartArea); - assert( reinterpret_cast(pEndBlock) - (pArea + nAllocSize) >= trailer_size ); - - trailer_type trailer = s_BoundCheckerTrailer; - memcpy( pArea + nAllocSize, &trailer, sizeof(trailer)); - - // the next assignment is correct because pBlock is at least sizeof(size_t)-byte aligned - assert( (reinterpret_cast(pEndBlock) & (sizeof(size_t) - 1)) == 0 ); - *(reinterpret_cast( pEndBlock ) - 1) = nAllocSize; - } - - bool check_bounds( void * pStartArea, void * pEndBlock, size_t nBlockSize ) - { - trailer_type trailer = s_BoundCheckerTrailer; - size_t nAllocSize = *(reinterpret_cast( pEndBlock ) - 1); - - assert( nAllocSize < nBlockSize ); - return nAllocSize < nBlockSize - && memcmp( reinterpret_cast(pStartArea) + nAllocSize, &trailer, sizeof(trailer)) == 0; - } - }; - } - //@endcond - -#if defined(CDS_DOXYGEN_INVOKED) || defined(_DEBUG) - /// Debug bound checker - /** - This is one of value of opt::check_bounds option for Michael's \ref Heap memory allocator. - It is intended for debug mode only. It throws an assertion when memory bound violation is detected. - In release mode it is equal to opt::check_bounds . - */ - class debug_bound_checking: public details::bound_checker - { - //@cond - typedef details::bound_checker base_class; - public: - void check_bounds( void * pStartArea, void * pEndBlock, size_t nBlockSize ) - { - // Bound checking assertion - assert( base_class::check_bounds( pStartArea, pEndBlock, nBlockSize )); - } - - //@endcond - }; -#else - typedef cds::opt::none debug_bound_checking; -#endif - - /// Exception of \ref strong_bound_checking bound checker - class bound_checker_exception: public std::out_of_range - { - //@cond - public: - bound_checker_exception() - : std::out_of_range( "Memory bound checking violation" ) - {} - //@endcond - }; - - /// Exception throwing bound checker - /** - This is one of value of opt::check_bounds option for Michael's \ref Heap memory allocator. - It is intended for debug and release mode. - When memory bound violation is detected - \li In debug mode - an assertion is raised - \li In release mode - an exception of type \ref bound_checker_exception is thrown - */ - class strong_bound_checking: public details::bound_checker - { - //@cond - typedef details::bound_checker base_class; - public: - void check_bounds( void * pStartArea, void * pEndBlock, size_t nBlockSize ) - { - if ( !base_class::check_bounds( pStartArea, pEndBlock, nBlockSize )) { - throw bound_checker_exception(); - } - } - //@endcond - }; - - - //@cond - namespace details { - template - class bound_checker_selector: public BOUND_CHECKER - { - typedef BOUND_CHECKER base_class; - public: - enum { - trailer_size = base_class::trailer_size - }; - - void make_trailer( void * pStartArea, void * pEndBlock, size_t nAllocSize ) - { - base_class::make_trailer( pStartArea, pEndBlock, nAllocSize ); - } - - void check_bounds( void * pStartArea, void * pEndBlock, size_t nBlockSize ) - { - base_class::check_bounds( pStartArea, pEndBlock, nBlockSize ); - } - }; - - template <> - class bound_checker_selector - { - public: - enum { - trailer_size = 0 - }; - - void make_trailer( void * /*pStartArea*/, void * /*pEndBlock*/, size_t /*nAllocSize*/ ) - {} - - void check_bounds( void * /*pStartArea*/, void * /*pEndBlock*/, size_t /*nBlockSize*/ ) - {} - }; - } // namespace details - //@endcond - - -}}} // namespace cds::memory::michael - -#endif // #ifndef CDSLIB_MEMORY_MICHAEL_ALLOCATOR_BOUND_CHECK_H diff --git a/cds/memory/michael/options.h b/cds/memory/michael/options.h deleted file mode 100644 index 9580db1f..00000000 --- a/cds/memory/michael/options.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_MEMORY_MICHAEL_OPTIONS_H -#define CDSLIB_MEMORY_MICHAEL_OPTIONS_H - -/* - Options for Michael allocator - Source: - [2004] Maged Michael "Scalable Lock-Free Dynamic Memory Allocation" - - Editions: - 2011.01.23 khizmax Created -*/ - -#include - -namespace cds { namespace memory { namespace michael { - - /// Options related for Michael's allocator \ref Heap - namespace opt { - using namespace cds::opt; - - /// Option setter specifies system topology - /** - See cds::OS::Win32::topology for interface example. - - Default type: \p cds::OS::topology selects appropriate implementation for target system. - */ - template - struct sys_topology { - //@cond - template struct pack: public BASE - { - typedef TOPOLOGY sys_topology; - }; - //@endcond - }; - - /// Option setter specifies system heap for large blocks - /** - If the block size requested is more that Michael's allocator upper limit - then an allocator provided by \p system_heap option is called. - By default, Michael's allocator can maintain blocks up to 64K bytes length; - for blocks larger than 64K the allocator defined by this option is used. - - Available \p HEAP implementations: - - malloc_heap - */ - template - struct system_heap - { - //@cond - template struct pack: public BASE - { - typedef HEAP system_heap; - }; - //@endcond - }; - - /// Option setter specifies internal aligned heap - /** - This heap is used by Michael's allocator for obtaining aligned memory. - - Available \p HEAP implementations: - - aligned_malloc_heap - */ - template - struct aligned_heap { - //@cond - template struct pack: public BASE - { - typedef HEAP aligned_heap; - }; - //@endcond - }; - - /// Option setter specifies page heap - /** - This heap is used by Michael's allocator for superblock allocation. - The size of superblock is: - - 64K - for small blocks - - 1M - for other blocks - - Available \p HEAP implementations: - - page_allocator - - page_cached_allocator - */ - template - struct page_heap { - //@cond - template struct pack: public BASE - { - typedef HEAP page_heap; - }; - //@endcond - }; - - /// Option setter specifies size-class selector - /** - The size-class selector determines the best size-class for requested block size, - i.e. it specifies allocation granularity. - In fact, it selects superblock descriptor within processor heap. - - Available \p Type implementation: - - default_sizeclass_selector - */ - template - struct sizeclass_selector { - //@cond - template struct pack: public BASE - { - typedef Type sizeclass_selector; - }; - //@endcond - }; - - /// Option setter specifies free-list of superblock descriptor - /** - Available \p Type implementations: - - free_list_locked - */ - template - struct free_list { - //@cond - template struct pack: public BASE - { - typedef Type free_list; - }; - //@endcond - }; - - /// Option setter specifies partial list of superblocks - /** - Available \p Type implementations: - - partial_list_locked - */ - template - struct partial_list { - //@cond - template struct pack: public BASE - { - typedef Type partial_list; - }; - //@endcond - }; - - /// Option setter for processor heap statistics - /** - The option specifies a type for gathering internal processor heap statistics. - The processor heap statistics is gathered on per processor basis. - Large memory block (more than 64K) allocated directly from OS does not fall into these statistics. - For OS-allocated memory block see \ref os_allocated_stat option. - - Available \p Type implementations: - - \ref procheap_atomic_stat - - \ref procheap_empty_stat - - For interface of type \p Type see \ref procheap_atomic_stat. - */ - template - struct procheap_stat { - //@cond - template struct pack: public BASE - { - typedef Type procheap_stat; - }; - //@endcond - }; - - /// Option setter for OS-allocated memory - /** - The option specifies a type for gathering internal statistics of - large (OS-allocated) memory blocks that is too big to maintain by Michael's heap - (with default \ref sizeclass_selector, the block that large than 64K is not - maintained by Michael's heap and passed directly to system allocator). - - Note that OS-allocated memory statistics does not include memory allocation - for heap's internal purposes. Only direct call of \p alloc or \p alloc_aligned - for large memory block is counted. - - Available \p Type implementations: - - \ref os_allocated_atomic - - \ref os_allocated_empty - */ - template - struct os_allocated_stat { - //@cond - template struct pack: public BASE - { - typedef Type os_allocated_stat; - }; - //@endcond - }; - - /// Option setter for bounds checking - /** - This option defines a strategy to check upper memory boundary of allocated blocks. - \p Type defines a class for bound checking with following interface: - - \code - class bound_checker - { - public: - enum { - trailer_size = numeric_const - }; - - void make_trailer( void * pStartArea, void * pEndBlock, size_t nAllocSize ); - bool check_bounds( void * pStartArea, void * pEndBlock, size_t nBlockSize ); - } - \endcode - - Before allocating a memory block of size N, the heap adds the \p trailer_size to N and really it - allocates N + trailer_size bytes. Then, the heap calls \p make_trailer function of bound checker with arguments: - - \p pStartArea - start of allocated block - - \p pEndBlock - the first byte after really allocated block; \code pEndBlock - pStartArea >= N + trailer_size \endcode - - \p nAllocSize - requested size in bytes (i.e. N) - So, \p make_trailer function can place some predefined value called bound mark of any type, for example, int64, - on address pStartArea + nAllocSize, and store real allocated block size N to pEndBlock - sizeof(size_t). - In this example, \p trailer_size constant is equal sizeof(int64) + sizeof(size_t). - - Before the memory block previously allocated is deallocating, the \p check_bounds function is called. - The function has similar signature: - - \p pStartArea - start of allocated block (like \p make_trailer fist argument) - - \p pEndBlock - the first byte after allocated block (like \p make_trailer second argument) - - \p nBlockSize - real allocated block size, not equal to \p nAllocSize argument of \p make_trailer - - The function can: - - calculate real allocated block size: \code N = *reinterpret_cast(pEndBlock - sizeof(size_t)) \endcode - - check whether the bound mark is unchanged: \code *reinterpret_cast(pStartArea + N) == bound_mark \endcode - - if it is not equal - make assertion - - The library provides the following predefined bound checkers, i.e they are possible values of \p Type - template argument: - \li cds::opt::none - no bound checking is performed (default) - \li michael::debug_bound_checking - an assertion is thrown when memory bound violation is detected. - This option is acceptable only in debug mode. For release mode it is equal to cds::opt::none. - \li michael::strong_bound_checking - an assertion is thrown in debug mode if memory bound violation is detected; - an exception is thrown in release mode. - */ - template - struct check_bounds { - //@cond - template struct pack: public BASE - { - typedef Type check_bounds; - }; - //@endcond - }; - } - -}}} // namespace cds::memory::michael - -#endif // #ifndef CDSLIB_MEMORY_MICHAEL_OPTIONS_H diff --git a/cds/memory/michael/osalloc_stat.h b/cds/memory/michael/osalloc_stat.h deleted file mode 100644 index 28492199..00000000 --- a/cds/memory/michael/osalloc_stat.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_MEMORY_MICHAEL_ALLOCATOR_OSALLOC_STAT_H -#define CDSLIB_MEMORY_MICHAEL_ALLOCATOR_OSALLOC_STAT_H - -#include - -namespace cds { namespace memory { namespace michael { - - /// Statistics for large (allocated directly from %OS) block - struct os_allocated_atomic - { - ///@cond - atomics::atomic nAllocCount ; ///< Event count of large block allocation from %OS - atomics::atomic nFreeCount ; ///< Event count of large block deallocation to %OS - atomics::atomic nBytesAllocated ; ///< Total size of allocated large blocks, in bytes - atomics::atomic nBytesDeallocated ; ///< Total size of deallocated large blocks, in bytes - - os_allocated_atomic() - : nAllocCount(0) - , nFreeCount(0) - , nBytesAllocated(0) - , nBytesDeallocated(0) - {} - ///@endcond - - /// Adds \p nSize to nBytesAllocated counter - void incBytesAllocated( size_t nSize ) - { - nAllocCount.fetch_add( 1, atomics::memory_order_relaxed); - nBytesAllocated.fetch_add( nSize, atomics::memory_order_relaxed ); - } - - /// Adds \p nSize to nBytesDeallocated counter - void incBytesDeallocated( size_t nSize ) - { - nFreeCount.fetch_add( 1, atomics::memory_order_relaxed ); - nBytesDeallocated.fetch_add( nSize, atomics::memory_order_relaxed ); - } - - /// Returns count of \p alloc and \p alloc_aligned function call (for large block allocated directly from %OS) - size_t allocCount() const - { - return nAllocCount.load(atomics::memory_order_relaxed); - } - - /// Returns count of \p free and \p free_aligned function call (for large block allocated directly from %OS) - size_t freeCount() const - { - return nFreeCount.load(atomics::memory_order_relaxed); - } - - /// Returns current value of nBytesAllocated counter - uint64_t allocatedBytes() const - { - return nBytesAllocated.load(atomics::memory_order_relaxed); - } - - /// Returns current value of nBytesAllocated counter - uint64_t deallocatedBytes() const - { - return nBytesDeallocated.load(atomics::memory_order_relaxed); - } - }; - - /// Dummy statistics for large (allocated directly from %OS) block - /** - This class does not gather any statistics. - Class interface is the same as \ref os_allocated_atomic. - */ - struct os_allocated_empty - { - //@cond - /// Adds \p nSize to nBytesAllocated counter - void incBytesAllocated( size_t nSize ) - { CDS_UNUSED(nSize); } - - /// Adds \p nSize to nBytesDeallocated counter - void incBytesDeallocated( size_t nSize ) - { CDS_UNUSED(nSize); } - - /// Returns count of \p alloc and \p alloc_aligned function call (for large block allocated directly from OS) - size_t allocCount() const - { - return 0; - } - - /// Returns count of \p free and \p free_aligned function call (for large block allocated directly from OS) - size_t freeCount() const - { - return 0; - } - - /// Returns current value of nBytesAllocated counter - uint64_t allocatedBytes() const - { - return 0; - } - - /// Returns current value of nBytesAllocated counter - uint64_t deallocatedBytes() const - { - return 0; - } - //@endcond - }; - - -}}} // namespace cds::memory::michael - -#endif /// CDSLIB_MEMORY_MICHAEL_ALLOCATOR_OSALLOC_STAT_H diff --git a/cds/memory/michael/procheap_stat.h b/cds/memory/michael/procheap_stat.h deleted file mode 100644 index ffff902f..00000000 --- a/cds/memory/michael/procheap_stat.h +++ /dev/null @@ -1,420 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSLIB_MEMORY_MICHAEL_ALLOCATOR_PROCHEAP_STAT_H -#define CDSLIB_MEMORY_MICHAEL_ALLOCATOR_PROCHEAP_STAT_H - -#include - -namespace cds { namespace memory { namespace michael { - - /// processor heap statistics - /** - This class is implementation of \ref opt::procheap_stat option. - The statistic counter implementation is based on atomic operations. - - Template parameters: - - \p INC_FENCE - memory fence for increment operation (default is release semantics) - - \p READ_FENCE - memory fence for reading of statistic values (default is acquire semantics) - */ - class procheap_atomic_stat - { - //@cond - atomics::atomic nAllocFromActive ; ///< Event count of allocation from active superblock - atomics::atomic nAllocFromPartial ; ///< Event count of allocation from partial superblock - atomics::atomic nAllocFromNew ; ///< Event count of allocation from new superblock - atomics::atomic nFreeCount ; ///< \ref free function call count - atomics::atomic nBlockCount ; ///< Count of superblock allocated - atomics::atomic nBlockDeallocCount ; ///< Count of superblock deallocated - atomics::atomic nDescAllocCount ; ///< Count of superblock descriptors - atomics::atomic nDescFull ; ///< Count of full superblock - atomics::atomic nBytesAllocated ; ///< Count of allocated bytes - atomics::atomic nBytesDeallocated ; ///< Count of deallocated bytes - - atomics::atomic nActiveDescCASFailureCount ; ///< CAS failure counter for active block of \p alloc_from_active Heap function - atomics::atomic nActiveAnchorCASFailureCount; ///< CAS failure counter for active block of \p alloc_from_active Heap function - atomics::atomic nPartialDescCASFailureCount ; ///< CAS failure counter for partial block of \p alloc_from_partial Heap function - atomics::atomic nPartialAnchorCASFailureCount; ///< CAS failure counter for partial block of \p alloc_from_partial Heap function - - //@endcond - - public: - //@cond - procheap_atomic_stat() - : nAllocFromActive(0) - , nAllocFromPartial(0) - , nAllocFromNew(0) - , nFreeCount(0) - , nBlockCount(0) - , nDescFull(0) - , nBytesAllocated(0) - , nBytesDeallocated(0) - , nActiveDescCASFailureCount(0) - , nActiveAnchorCASFailureCount(0) - , nPartialDescCASFailureCount(0) - , nPartialAnchorCASFailureCount(0) - {} - //@endcond - - public: - /// Increment event counter of allocation from active superblock - void incAllocFromActive() - { - nAllocFromActive.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment event counter of allocation from active superblock by \p n - void incAllocFromActive( size_t n ) - { - nAllocFromActive.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Increment event counter of allocation from partial superblock - void incAllocFromPartial() - { - nAllocFromPartial.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment event counter of allocation from partial superblock by \p n - void incAllocFromPartial( size_t n ) - { - nAllocFromPartial.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Increment event count of allocation from new superblock - void incAllocFromNew() - { - nAllocFromNew.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment event count of allocation from new superblock by \p n - void incAllocFromNew( size_t n ) - { - nAllocFromNew.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Increment event counter of free calling - void incFreeCount() - { - nFreeCount.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment event counter of free calling by \p n - void incFreeCount( size_t n ) - { - nFreeCount.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Increment counter of superblock allocated - void incBlockAllocated() - { - nBlockCount.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment counter of superblock allocated by \p n - void incBlockAllocated( size_t n ) - { - nBlockCount.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Increment counter of superblock deallocated - void incBlockDeallocated() - { - nBlockDeallocCount.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment counter of superblock deallocated by \p n - void incBlockDeallocated( size_t n ) - { - nBlockDeallocCount.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Increment counter of superblock descriptor allocated - void incDescAllocCount() - { - nDescAllocCount.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment counter of superblock descriptor allocated by \p n - void incDescAllocCount( size_t n ) - { - nDescAllocCount.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Increment counter of full superblock descriptor - void incDescFull() - { - nDescFull.fetch_add( 1, atomics::memory_order_relaxed ); - } - /// Increment counter of full superblock descriptor by \p n - void incDescFull( size_t n ) - { - nDescFull.fetch_add( n, atomics::memory_order_relaxed ); - } - - /// Decrement counter of full superblock descriptor - void decDescFull() - { - nDescFull.fetch_sub( 1, atomics::memory_order_relaxed ); - } - /// Decrement counter of full superblock descriptor by \p n - void decDescFull(size_t n) - { - nDescFull.fetch_sub( n, atomics::memory_order_relaxed ); - } - /// Add \p nBytes to allocated bytes counter - void incAllocatedBytes( size_t nBytes ) - { - nBytesAllocated.fetch_add( nBytes, atomics::memory_order_relaxed ); - } - /// Add \p nBytes to deallocated bytes counter - void incDeallocatedBytes( size_t nBytes ) - { - nBytesDeallocated.fetch_add( nBytes, atomics::memory_order_relaxed); - } - - /// Add \p nCount to CAS failure counter of updating \p active field of active descriptor for \p alloc_from_active internal Heap function - void incActiveDescCASFailureCount( int nCount ) - { - nActiveDescCASFailureCount.fetch_add( nCount, atomics::memory_order_relaxed ); - } - - /// Add \p nCount to CAS failure counter of updating \p anchor field of active descriptor for \p alloc_from_active internal Heap function - void incActiveAnchorCASFailureCount( int nCount ) - { - nActiveAnchorCASFailureCount.fetch_add( nCount, atomics::memory_order_relaxed ); - } - - /// Add \p nCount to CAS failure counter of updating \p active field of partial descriptor for \p alloc_from_partial internal Heap function - void incPartialDescCASFailureCount( int nCount ) - { - nPartialDescCASFailureCount.fetch_add( nCount, atomics::memory_order_relaxed ); - } - - /// Add \p nCount to CAS failure counter of updating \p anchor field of partial descriptor for \p alloc_from_partial internal Heap function - void incPartialAnchorCASFailureCount( int nCount ) - { - nPartialAnchorCASFailureCount.fetch_add( nCount, atomics::memory_order_relaxed ); - } - - // ----------------------------------------------------------------- - // Reading - - /// Read event counter of allocation from active superblock - size_t allocFromActive() const - { - return nAllocFromActive.load(atomics::memory_order_relaxed); - } - - /// Read event counter of allocation from partial superblock - size_t allocFromPartial() const - { - return nAllocFromPartial.load(atomics::memory_order_relaxed); - } - - /// Read event count of allocation from new superblock - size_t allocFromNew() const - { - return nAllocFromNew.load(atomics::memory_order_relaxed); - } - - /// Read event counter of free calling - size_t freeCount() const - { - return nFreeCount.load(atomics::memory_order_relaxed); - } - - /// Read counter of superblock allocated - size_t blockAllocated() const - { - return nBlockCount.load(atomics::memory_order_relaxed); - } - - /// Read counter of superblock deallocated - size_t blockDeallocated() const - { - return nBlockDeallocCount.load(atomics::memory_order_relaxed); - } - - /// Read counter of superblock descriptor allocated - size_t descAllocCount() const - { - return nDescAllocCount.load(atomics::memory_order_relaxed); - } - - /// Read counter of full superblock descriptor - size_t descFull() const - { - return nDescFull.load(atomics::memory_order_relaxed); - } - - /// Get counter of allocated bytes - /** - This counter only counts the bytes allocated by Heap, OS allocation (large blocks) is not counted. - - To get count of bytes allocated but not yet deallocated you should call - \code allocatedBytes() - deallocatedBytes() \endcode - */ - uint64_t allocatedBytes() const - { - return nBytesAllocated.load(atomics::memory_order_relaxed); - } - - /// Get counter of deallocated bytes - /** - This counter only counts the bytes allocated by Heap, OS allocation (large blocks) is not counted.unter of deallocated bytes - - See \ref allocatedBytes notes - */ - uint64_t deallocatedBytes() const - { - return nBytesDeallocated.load(atomics::memory_order_relaxed); - } - - /// Get CAS failure counter of updating \p active field of active descriptor for \p alloc_from_active internal Heap function - size_t activeDescCASFailureCount() const - { - return nActiveDescCASFailureCount.load(atomics::memory_order_relaxed); - } - - /// Get CAS failure counter of updating \p anchor field of active descriptor for \p alloc_from_active internal Heap function - size_t activeAnchorCASFailureCount() const - { - return nActiveAnchorCASFailureCount.load(atomics::memory_order_relaxed); - } - - /// Get CAS failure counter of updating \p active field of partial descriptor for \p alloc_from_active internal Heap function - size_t partialDescCASFailureCount() const - { - return nPartialDescCASFailureCount.load(atomics::memory_order_relaxed); - } - - /// Get CAS failure counter of updating \p anchor field of partial descriptor for \p alloc_from_active internal Heap function - size_t partialAnchorCASFailureCount() const - { - return nPartialAnchorCASFailureCount.load(atomics::memory_order_relaxed); - } - }; - - /// Empty processor heap statistics - /** - This class is dummy implementation of \ref opt::procheap_stat option. - No statistic gathering is performed. - - Interface - see procheap_atomic_stat. - All getter methods return 0. - */ - class procheap_empty_stat - { - //@cond - public: - void incAllocFromActive() - {} - void incAllocFromPartial() - {} - void incAllocFromNew() - {} - void incFreeCount() - {} - void incBlockAllocated() - {} - void incBlockDeallocated() - {} - void incDescAllocCount() - {} - void incDescFull() - {} - void decDescFull() - {} - - // Add ------------------------------------------------------------- - void incAllocFromActive(size_t) - {} - void incAllocFromPartial(size_t) - {} - void incAllocFromNew(size_t) - {} - void incFreeCount(size_t) - {} - void incBlockAllocated(size_t) - {} - void incBlockDeallocated(size_t) - {} - void incDescAllocCount(size_t) - {} - void incDescFull(size_t) - {} - void decDescFull(size_t) - {} - void incAllocatedBytes( size_t /*nBytes*/ ) - {} - void incDeallocatedBytes( size_t /*nBytes*/ ) - {} - void incActiveDescCASFailureCount( int /*nCount*/ ) - {} - void incActiveAnchorCASFailureCount( int /*nCount*/ ) - {} - void incPartialDescCASFailureCount( int /*nCount*/ ) - {} - void incPartialAnchorCASFailureCount( int /*nCount*/ ) - {} - - // ----------------------------------------------------------------- - // Reading - - size_t allocFromActive() const - { return 0; } - size_t allocFromPartial() const - { return 0; } - size_t allocFromNew() const - { return 0; } - size_t freeCount() const - { return 0; } - size_t blockAllocated() const - { return 0; } - size_t blockDeallocated() const - { return 0; } - size_t descAllocCount() const - { return 0; } - size_t descFull() const - { return 0; } - uint64_t allocatedBytes() const - { return 0; } - uint64_t deallocatedBytes() const - { return 0; } - size_t activeDescCASFailureCount() const - { return 0; } - size_t activeAnchorCASFailureCount() const - { return 0; } - size_t partialDescCASFailureCount() const - { return 0; } - size_t partialAnchorCASFailureCount() const - { return 0; } - - //@endcond - }; - - -}}} // namespace cds::memory::michael - -#endif /// CDSLIB_MEMORY_MICHAEL_ALLOCATOR_PROCHEAP_STAT_H diff --git a/cds/memory/pool_allocator.h b/cds/memory/pool_allocator.h index cd12d0e7..e38f2544 100644 --- a/cds/memory/pool_allocator.h +++ b/cds/memory/pool_allocator.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/memory/vyukov_queue_pool.h b/cds/memory/vyukov_queue_pool.h index 65c2e78f..5f4bcf3e 100644 --- a/cds/memory/vyukov_queue_pool.h +++ b/cds/memory/vyukov_queue_pool.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/opt/buffer.h b/cds/opt/buffer.h index db89d15c..ca3cb874 100644 --- a/cds/opt/buffer.h +++ b/cds/opt/buffer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/opt/compare.h b/cds/opt/compare.h index 921be9bb..23c9cbdc 100644 --- a/cds/opt/compare.h +++ b/cds/opt/compare.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/opt/hash.h b/cds/opt/hash.h index bbe0027e..2949b506 100644 --- a/cds/opt/hash.h +++ b/cds/opt/hash.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/opt/options.h b/cds/opt/options.h index 67f9c9cd..5ab9c169 100644 --- a/cds/opt/options.h +++ b/cds/opt/options.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/opt/permutation.h b/cds/opt/permutation.h index a45a58b6..a69b57f7 100644 --- a/cds/opt/permutation.h +++ b/cds/opt/permutation.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/opt/value_cleaner.h b/cds/opt/value_cleaner.h index 06de5bb8..b2a7112e 100644 --- a/cds/opt/value_cleaner.h +++ b/cds/opt/value_cleaner.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/aix/alloc_aligned.h b/cds/os/aix/alloc_aligned.h index cbe0fe41..19939e7b 100644 --- a/cds/os/aix/alloc_aligned.h +++ b/cds/os/aix/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/aix/timer.h b/cds/os/aix/timer.h index 97544245..d5838727 100644 --- a/cds/os/aix/timer.h +++ b/cds/os/aix/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/aix/topology.h b/cds/os/aix/topology.h index eedc970b..f4f5d118 100644 --- a/cds/os/aix/topology.h +++ b/cds/os/aix/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/alloc_aligned.h b/cds/os/alloc_aligned.h index 65625d83..1b5ef3ea 100644 --- a/cds/os/alloc_aligned.h +++ b/cds/os/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ @@ -133,16 +133,16 @@ namespace cds { } // construct default allocator (do nothing) - aligned_allocator() throw() + aligned_allocator() CDS_NOEXCEPT {} /// construct by copying (do nothing) - aligned_allocator(const aligned_allocator&) throw() + aligned_allocator(const aligned_allocator&) CDS_NOEXCEPT {} /// construct from a related allocator (do nothing) template - aligned_allocator(const aligned_allocator&) throw() + aligned_allocator(const aligned_allocator&) CDS_NOEXCEPT {} /// assign from a related allocator (do nothing) @@ -209,7 +209,7 @@ namespace cds { } /// estimate maximum array size - size_type max_size() const throw() + size_type max_size() const CDS_NOEXCEPT { prototype a; return a.max_size(); diff --git a/cds/os/details/fake_topology.h b/cds/os/details/fake_topology.h index 817c898a..7706d9db 100644 --- a/cds/os/details/fake_topology.h +++ b/cds/os/details/fake_topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/free_bsd/alloc_aligned.h b/cds/os/free_bsd/alloc_aligned.h index d64606d0..db5a7fa2 100644 --- a/cds/os/free_bsd/alloc_aligned.h +++ b/cds/os/free_bsd/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/free_bsd/timer.h b/cds/os/free_bsd/timer.h index 67be0c9f..b92219eb 100644 --- a/cds/os/free_bsd/timer.h +++ b/cds/os/free_bsd/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/free_bsd/topology.h b/cds/os/free_bsd/topology.h index df22e1fe..de4725ff 100644 --- a/cds/os/free_bsd/topology.h +++ b/cds/os/free_bsd/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/hpux/alloc_aligned.h b/cds/os/hpux/alloc_aligned.h index b552d2fc..9300ecb4 100644 --- a/cds/os/hpux/alloc_aligned.h +++ b/cds/os/hpux/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/hpux/timer.h b/cds/os/hpux/timer.h index cfafa113..3ca06979 100644 --- a/cds/os/hpux/timer.h +++ b/cds/os/hpux/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/hpux/topology.h b/cds/os/hpux/topology.h index 5cb92f9a..71c5244c 100644 --- a/cds/os/hpux/topology.h +++ b/cds/os/hpux/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/libc/alloc_aligned.h b/cds/os/libc/alloc_aligned.h index dfc095f5..ae071597 100644 --- a/cds/os/libc/alloc_aligned.h +++ b/cds/os/libc/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/linux/alloc_aligned.h b/cds/os/linux/alloc_aligned.h index 078c926f..c3f8d036 100644 --- a/cds/os/linux/alloc_aligned.h +++ b/cds/os/linux/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/linux/timer.h b/cds/os/linux/timer.h index 795f96ed..b1d3ffb7 100644 --- a/cds/os/linux/timer.h +++ b/cds/os/linux/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/linux/topology.h b/cds/os/linux/topology.h index d440e370..6d4155fe 100644 --- a/cds/os/linux/topology.h +++ b/cds/os/linux/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/osx/timer.h b/cds/os/osx/timer.h index f5cb353e..4bc48c7d 100644 --- a/cds/os/osx/timer.h +++ b/cds/os/osx/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/osx/topology.h b/cds/os/osx/topology.h index 4e88a830..74ec1edc 100644 --- a/cds/os/osx/topology.h +++ b/cds/os/osx/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/posix/alloc_aligned.h b/cds/os/posix/alloc_aligned.h index fe5e072e..f5783962 100644 --- a/cds/os/posix/alloc_aligned.h +++ b/cds/os/posix/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/posix/fake_topology.h b/cds/os/posix/fake_topology.h index 6b45dac9..f28fbaad 100644 --- a/cds/os/posix/fake_topology.h +++ b/cds/os/posix/fake_topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/posix/thread.h b/cds/os/posix/thread.h index d0c185b0..64e6f26f 100644 --- a/cds/os/posix/thread.h +++ b/cds/os/posix/thread.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/posix/timer.h b/cds/os/posix/timer.h index ad8a9050..cc01f4c6 100644 --- a/cds/os/posix/timer.h +++ b/cds/os/posix/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/sunos/alloc_aligned.h b/cds/os/sunos/alloc_aligned.h index 249370e4..83146fba 100644 --- a/cds/os/sunos/alloc_aligned.h +++ b/cds/os/sunos/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/sunos/timer.h b/cds/os/sunos/timer.h index 970a699a..b14d613c 100644 --- a/cds/os/sunos/timer.h +++ b/cds/os/sunos/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/sunos/topology.h b/cds/os/sunos/topology.h index 4c7b60b1..eeb34caf 100644 --- a/cds/os/sunos/topology.h +++ b/cds/os/sunos/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/thread.h b/cds/os/thread.h index 7bd5dfba..92c69bca 100644 --- a/cds/os/thread.h +++ b/cds/os/thread.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/timer.h b/cds/os/timer.h index 8572fd9f..cad8fa37 100644 --- a/cds/os/timer.h +++ b/cds/os/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/topology.h b/cds/os/topology.h index e715df3b..6b01f48b 100644 --- a/cds/os/topology.h +++ b/cds/os/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/win/alloc_aligned.h b/cds/os/win/alloc_aligned.h index 4a02151a..a3e54817 100644 --- a/cds/os/win/alloc_aligned.h +++ b/cds/os/win/alloc_aligned.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/win/thread.h b/cds/os/win/thread.h index 29addf4e..93f2440d 100644 --- a/cds/os/win/thread.h +++ b/cds/os/win/thread.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/win/timer.h b/cds/os/win/timer.h index ea6e24af..f7c3327d 100644 --- a/cds/os/win/timer.h +++ b/cds/os/win/timer.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/os/win/topology.h b/cds/os/win/topology.h index c2518030..e9f9ace9 100644 --- a/cds/os/win/topology.h +++ b/cds/os/win/topology.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/sync/injecting_monitor.h b/cds/sync/injecting_monitor.h index da84553a..e7094dd9 100644 --- a/cds/sync/injecting_monitor.h +++ b/cds/sync/injecting_monitor.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/sync/lock_array.h b/cds/sync/lock_array.h index 4c0f07db..1ad33602 100644 --- a/cds/sync/lock_array.h +++ b/cds/sync/lock_array.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/sync/monitor.h b/cds/sync/monitor.h index d34b2fd2..d03ab3e5 100644 --- a/cds/sync/monitor.h +++ b/cds/sync/monitor.h @@ -1,7 +1,7 @@ /* 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/ @@ -36,7 +36,7 @@ namespace cds { namespace sync { /** @page cds_sync_monitor Synchronization monitor - A monitor is synchronization construct + A monitor is synchronization construction that allows threads to have both mutual exclusion and the ability to wait (block) for a certain condition to become true. Some blocking data structure algoritms like the trees require per-node locking. For huge trees containing millions of nodes it can be very inefficient to inject diff --git a/cds/sync/pool_monitor.h b/cds/sync/pool_monitor.h index c9447cbe..1b73b404 100644 --- a/cds/sync/pool_monitor.h +++ b/cds/sync/pool_monitor.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/sync/spinlock.h b/cds/sync/spinlock.h index 94954db2..0241cd8d 100644 --- a/cds/sync/spinlock.h +++ b/cds/sync/spinlock.h @@ -1,7 +1,7 @@ /* 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/ @@ -149,7 +149,7 @@ namespace cds { { backoff_strategy backoff; while ( nTryCount-- ) { - if ( try_lock() ) + if ( try_lock()) return true; backoff(); } @@ -246,7 +246,7 @@ namespace cds { backoff_strategy bkoff; while ( nTryCount-- ) { - if ( try_acquire() ) + if ( try_acquire()) return true; bkoff(); } diff --git a/cds/threading/details/_common.h b/cds/threading/details/_common.h index dcc1faf0..69b73f1c 100644 --- a/cds/threading/details/_common.h +++ b/cds/threading/details/_common.h @@ -1,7 +1,7 @@ /* 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/ @@ -31,9 +31,6 @@ #ifndef CDSLIB_THREADING__COMMON_H #define CDSLIB_THREADING__COMMON_H -#include -#include - #include #include #include @@ -99,9 +96,6 @@ namespace cds { // (called by dtor of GC thread object, for example, by dtor of cds::gc::HP::thread_gc) static void detachThread(); - // Get cds::gc::HP thread GC implementation for current thread - static gc::HP::thread_gc_impl& getHZPGC(); - // Get cds::gc::DHP thread GC implementation for current thread; static gc::DHP::thread_gc_impl& getDHPGC(); }; @@ -137,9 +131,6 @@ namespace cds { struct ThreadData { //@cond - char CDS_DATA_ALIGNMENT(8) m_hpManagerPlaceholder[sizeof(cds::gc::HP::thread_gc_impl)]; ///< Michael's Hazard Pointer GC placeholder - char CDS_DATA_ALIGNMENT(8) m_dhpManagerPlaceholder[sizeof(cds::gc::DHP::thread_gc_impl)]; ///< Dynamic Hazard Pointer GC placeholder - cds::urcu::details::thread_data< cds::urcu::general_instant_tag > * m_pGPIRCU; cds::urcu::details::thread_data< cds::urcu::general_buffered_tag > * m_pGPBRCU; cds::urcu::details::thread_data< cds::urcu::general_threaded_tag > * m_pGPTRCU; @@ -150,8 +141,8 @@ namespace cds { //@endcond - cds::gc::HP::thread_gc_impl * m_hpManager ; ///< Michael's Hazard Pointer GC thread-specific data - cds::gc::DHP::thread_gc_impl * m_dhpManager ; ///< Dynamic Hazard Pointer GC thread-specific data + //cds::gc::HP::thread_gc_impl * m_hpManager ; ///< Michael's Hazard Pointer GC thread-specific data + //cds::gc::DHP::thread_gc_impl * m_dhpManager ; ///< Dynamic Hazard Pointer GC thread-specific data size_t m_nFakeProcessorNumber ; ///< fake "current processor" number @@ -164,7 +155,7 @@ namespace cds { //@cond static CDS_EXPORT_API atomics::atomic s_nLastUsedProcNo; - static CDS_EXPORT_API size_t s_nProcCount; + static CDS_EXPORT_API size_t s_nProcCount; //@endcond //@cond @@ -178,32 +169,10 @@ namespace cds { #endif , m_nFakeProcessorNumber( s_nLastUsedProcNo.fetch_add(1, atomics::memory_order_relaxed) % s_nProcCount ) , m_nAttachCount(0) - { - if (cds::gc::HP::isUsed()) - m_hpManager = new (m_hpManagerPlaceholder) cds::gc::HP::thread_gc_impl; - else - m_hpManager = nullptr; - - if ( cds::gc::DHP::isUsed()) - m_dhpManager = new (m_dhpManagerPlaceholder) cds::gc::DHP::thread_gc_impl; - else - m_dhpManager = nullptr; - } + {} ~ThreadData() { - if ( m_hpManager ) { - typedef cds::gc::HP::thread_gc_impl hp_thread_gc_impl; - m_hpManager->~hp_thread_gc_impl(); - m_hpManager = nullptr; - } - - if ( m_dhpManager ) { - typedef cds::gc::DHP::thread_gc_impl dhp_thread_gc_impl; - m_dhpManager->~dhp_thread_gc_impl(); - m_dhpManager = nullptr; - } - assert( m_pGPIRCU == nullptr ); assert( m_pGPBRCU == nullptr ); assert( m_pGPTRCU == nullptr ); @@ -213,63 +182,8 @@ namespace cds { #endif } - void init() - { - if ( m_nAttachCount++ == 0 ) { - if ( cds::gc::HP::isUsed()) - m_hpManager->init(); - if ( cds::gc::DHP::isUsed()) - m_dhpManager->init(); - - if ( cds::urcu::details::singleton::isUsed()) - m_pGPIRCU = cds::urcu::details::singleton::attach_thread(); - if ( cds::urcu::details::singleton::isUsed()) - m_pGPBRCU = cds::urcu::details::singleton::attach_thread(); - if ( cds::urcu::details::singleton::isUsed()) - m_pGPTRCU = cds::urcu::details::singleton::attach_thread(); -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - if ( cds::urcu::details::singleton::isUsed()) - m_pSHBRCU = cds::urcu::details::singleton::attach_thread(); - if ( cds::urcu::details::singleton::isUsed()) - m_pSHTRCU = cds::urcu::details::singleton::attach_thread(); -#endif - } - } - - bool fini() - { - if ( --m_nAttachCount == 0 ) { - if ( cds::gc::DHP::isUsed()) - m_dhpManager->fini(); - if ( cds::gc::HP::isUsed()) - m_hpManager->fini(); - - if ( cds::urcu::details::singleton::isUsed()) { - cds::urcu::details::singleton::detach_thread( m_pGPIRCU ); - m_pGPIRCU = nullptr; - } - if ( cds::urcu::details::singleton::isUsed()) { - cds::urcu::details::singleton::detach_thread( m_pGPBRCU ); - m_pGPBRCU = nullptr; - } - if ( cds::urcu::details::singleton::isUsed()) { - cds::urcu::details::singleton::detach_thread( m_pGPTRCU ); - m_pGPTRCU = nullptr; - } -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - if ( cds::urcu::details::singleton::isUsed()) { - cds::urcu::details::singleton::detach_thread( m_pSHBRCU ); - m_pSHBRCU = nullptr; - } - if ( cds::urcu::details::singleton::isUsed()) { - cds::urcu::details::singleton::detach_thread( m_pSHTRCU ); - m_pSHTRCU = nullptr; - } -#endif - return true; - } - return false; - } + CDS_EXPORT_API void init(); + CDS_EXPORT_API bool fini(); size_t fake_current_processor() { @@ -280,6 +194,6 @@ namespace cds { //@endcond } // namespace threading -} // namespace cds::threading +} // namespace cds #endif // #ifndef CDSLIB_THREADING__COMMON_H diff --git a/cds/threading/details/auto_detect.h b/cds/threading/details/auto_detect.h index a07f390b..f215698c 100644 --- a/cds/threading/details/auto_detect.h +++ b/cds/threading/details/auto_detect.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/threading/details/cxx11.h b/cds/threading/details/cxx11.h index 68fe13a3..33700397 100644 --- a/cds/threading/details/cxx11.h +++ b/cds/threading/details/cxx11.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/threading/details/cxx11_manager.h b/cds/threading/details/cxx11_manager.h index 9bac4941..353b18fc 100644 --- a/cds/threading/details/cxx11_manager.h +++ b/cds/threading/details/cxx11_manager.h @@ -1,7 +1,7 @@ /* 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/ @@ -123,30 +123,6 @@ namespace cds { namespace threading { return p; } - /// Get gc::HP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::HP. - To initialize gc::HP GC you must constuct cds::gc::HP object in the beginning of your application - */ - static gc::HP::thread_gc_impl& getHZPGC() - { - assert( _threadData()->m_hpManager != nullptr ); - return *(_threadData()->m_hpManager); - } - - /// Get gc::DHP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::DHP. - To initialize gc::DHP GC you must constuct cds::gc::DHP object in the beginning of your application - */ - static gc::DHP::thread_gc_impl& getDHPGC() - { - assert( _threadData()->m_dhpManager != nullptr ); - return *(_threadData()->m_dhpManager); - } - //@cond static size_t fake_current_processor() { diff --git a/cds/threading/details/gcc.h b/cds/threading/details/gcc.h index 13d7805e..74ea828b 100644 --- a/cds/threading/details/gcc.h +++ b/cds/threading/details/gcc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/threading/details/gcc_manager.h b/cds/threading/details/gcc_manager.h index e86ec737..98d6d9aa 100644 --- a/cds/threading/details/gcc_manager.h +++ b/cds/threading/details/gcc_manager.h @@ -1,7 +1,7 @@ /* 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/ @@ -123,30 +123,6 @@ namespace cds { namespace threading { return p; } - /// Get gc::HP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::HP. - To initialize gc::HP GC you must constuct cds::gc::HP object in the beginning of your application - */ - static gc::HP::thread_gc_impl& getHZPGC() - { - assert( _threadData()->m_hpManager ); - return *(_threadData()->m_hpManager); - } - - /// Get gc::DHP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::DHP. - To initialize gc::DHP GC you must constuct cds::gc::DHP object in the beginning of your application - */ - static gc::DHP::thread_gc_impl& getDHPGC() - { - assert( _threadData()->m_dhpManager ); - return *(_threadData()->m_dhpManager); - } - //@cond static size_t fake_current_processor() { diff --git a/cds/threading/details/msvc.h b/cds/threading/details/msvc.h index c3ba7cca..e36aabc6 100644 --- a/cds/threading/details/msvc.h +++ b/cds/threading/details/msvc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/threading/details/msvc_manager.h b/cds/threading/details/msvc_manager.h index 966dba22..2aaffd0e 100644 --- a/cds/threading/details/msvc_manager.h +++ b/cds/threading/details/msvc_manager.h @@ -1,7 +1,7 @@ /* 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/ @@ -123,30 +123,6 @@ namespace cds { namespace threading { return p; } - /// Get gc::HP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::HP. - To initialize gc::HP GC you must constuct cds::gc::HP object in the beginning of your application - */ - static gc::HP::thread_gc_impl& getHZPGC() - { - assert( _threadData()->m_hpManager ); - return *(_threadData()->m_hpManager); - } - - /// Get gc::DHP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::DHP. - To initialize gc::DHP GC you must constuct cds::gc::DHP object in the beginning of your application - */ - static gc::DHP::thread_gc_impl& getDHPGC() - { - assert( _threadData()->m_dhpManager ); - return *(_threadData()->m_dhpManager); - } - //@cond static size_t fake_current_processor() { diff --git a/cds/threading/details/pthread.h b/cds/threading/details/pthread.h index 62971ce9..92712e25 100644 --- a/cds/threading/details/pthread.h +++ b/cds/threading/details/pthread.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/threading/details/pthread_manager.h b/cds/threading/details/pthread_manager.h index dce4aadb..60b18988 100644 --- a/cds/threading/details/pthread_manager.h +++ b/cds/threading/details/pthread_manager.h @@ -1,7 +1,7 @@ /* 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/ @@ -217,28 +217,6 @@ namespace cds { namespace threading { return _threadData( do_getData ); } - /// Get gc::HP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::HP. - To initialize gc::HP GC you must constuct cds::gc::HP object in the beginning of your application - */ - static gc::HP::thread_gc_impl& getHZPGC() - { - return *(_threadData( do_getData )->m_hpManager); - } - - /// Get gc::DHP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::DHP. - To initialize gc::DHP GC you must constuct cds::gc::DHP object in the beginning of your application - */ - static gc::DHP::thread_gc_impl& getDHPGC() - { - return *(_threadData( do_getData )->m_dhpManager); - } - //@cond static size_t fake_current_processor() { diff --git a/cds/threading/details/wintls.h b/cds/threading/details/wintls.h index 46491c44..abd0259a 100644 --- a/cds/threading/details/wintls.h +++ b/cds/threading/details/wintls.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/threading/details/wintls_manager.h b/cds/threading/details/wintls_manager.h index 04a0cabf..ca24c273 100644 --- a/cds/threading/details/wintls_manager.h +++ b/cds/threading/details/wintls_manager.h @@ -1,7 +1,7 @@ /* 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/ @@ -183,9 +183,8 @@ namespace cds { namespace threading { ThreadData * pData = _threadData( do_attachThread ); assert( pData ); - if ( pData ) { + if ( pData ) pData->init(); - } else throw api_exception( api_error_code(-1), "cds::threading::wintls::Manager::attachThread" ); } @@ -216,28 +215,6 @@ namespace cds { namespace threading { return _threadData( do_getData ); } - /// Get gc::HP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::HP. - To initialize gc::HP GC you must constuct cds::gc::HP object in the beginning of your application - */ - static gc::HP::thread_gc_impl& getHZPGC() - { - return *(_threadData( do_getData )->m_hpManager); - } - - /// Get gc::DHP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use gc::DHP. - To initialize gc::DHP GC you must constuct cds::gc::DHP object in the beginning of your application - */ - static gc::DHP::thread_gc_impl& getDHPGC() - { - return *(_threadData( do_getData )->m_dhpManager); - } - //@cond static size_t fake_current_processor() { diff --git a/cds/threading/model.h b/cds/threading/model.h index fe661a24..8182865f 100644 --- a/cds/threading/model.h +++ b/cds/threading/model.h @@ -1,7 +1,7 @@ /* 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/ @@ -46,32 +46,6 @@ namespace cds { namespace threading { */ template cds::urcu::details::thread_data * getRCU(); - /// Get cds::gc::HP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use cds::gc::HP. - To initialize cds::gc::HP GC you must constuct cds::gc::HP object in the beginning of your application, - see \ref cds_how_to_use "How to use libcds" - */ - template <> - inline cds::gc::HP::thread_gc_impl& getGC() - { - return Manager::getHZPGC(); - } - - /// Get cds::gc::DHP thread GC implementation for current thread - /** - The object returned may be uninitialized if you did not call attachThread in the beginning of thread execution - or if you did not use cds::gc::DHP. - To initialize cds::gc::DHP GC you must constuct cds::gc::DHP object in the beginning of your application, - see \ref cds_how_to_use "How to use libcds" - */ - template <> - inline cds::gc::DHP::thread_gc_impl& getGC() - { - return Manager::getDHPGC(); - } - //@cond template<> inline cds::urcu::details::thread_data * getRCU() diff --git a/cds/urcu/details/base.h b/cds/urcu/details/base.h index 48eaeb82..638eb876 100644 --- a/cds/urcu/details/base.h +++ b/cds/urcu/details/base.h @@ -1,7 +1,7 @@ /* 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/ @@ -112,10 +112,10 @@ namespace cds { The \p libcds contains several implementations if signal-handling %RCU: \ref signal_buffered, \ref signal_threaded. - @note The signal-handled %RCU is defined only for UNIX-like systems, not for Windows. + @note The signal-handled %RCU is defined only for UNIX-like systems, not for Windows. - @anchor cds_urcu_type - RCU implementation type + @anchor cds_urcu_type + RCU implementation type There are several internal implementation of RCU (all declared in \p %cds::urcu namespace): - \ref general_instant - general purpose RCU with immediate reclamation @@ -130,8 +130,8 @@ namespace cds { and has the reacher interface that combines interfaces of wrapped class i.e. RCU global part like \p synchronize, and corresponding RCU thread-specific interface like \p access_lock, \p access_unlock and \p retire_ptr. - @anchor cds_urcu_gc - There are several wrapper classes (all declared in \p %cds::urcu namespace) + @anchor cds_urcu_gc + There are several wrapper classes (all declared in \p %cds::urcu namespace) - \ref cds_urcu_general_instant_gc "gc" - general purpose RCU with immediate reclamation, include file - \ref cds_urcu_general_buffered_gc "gc" - general purpose RCU with deferred (buffered) reclamation, @@ -145,7 +145,7 @@ namespace cds { Any RCU-related container in \p libcds expects that its \p RCU template parameter is one of those wrapper. - @anchor cds_urcu_tags + @anchor cds_urcu_tags For simplicity, in some algorithms instead of using RCU implementation type you should specify corresponding RCU tags (all declared in \p %cds::urcu namespace): - \ref general_instant_tag - for \ref general_instant @@ -154,8 +154,8 @@ namespace cds { - \ref signal_buffered_tag - for \ref signal_buffered - \ref signal_threaded_tag - for \ref signal_threaded - @anchor cds_urcu_performance - Performance + @anchor cds_urcu_performance + Performance As a result of our experiments we can range above %RCU implementation in such order, from high to low performance: @@ -169,8 +169,8 @@ namespace cds { type of payload - mostly read-only (seeking) or read-write (inserting and deleting), - a hardware, your application, and so on. - @anchor cds_urcu_howto - How to use + @anchor cds_urcu_howto + How to use Usually, in your application you use only one \ref cds_urcu_gc "type of RCU" that is the best for your needs. However, the library allows to apply several RCU singleton in one application. diff --git a/cds/urcu/details/check_deadlock.h b/cds/urcu/details/check_deadlock.h index 281e5f6a..35d70029 100644 --- a/cds/urcu/details/check_deadlock.h +++ b/cds/urcu/details/check_deadlock.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/gp.h b/cds/urcu/details/gp.h index 95ce5386..2bd7e364 100644 --- a/cds/urcu/details/gp.h +++ b/cds/urcu/details/gp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/gp_decl.h b/cds/urcu/details/gp_decl.h index ed4177c3..52592c8a 100644 --- a/cds/urcu/details/gp_decl.h +++ b/cds/urcu/details/gp_decl.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/gpb.h b/cds/urcu/details/gpb.h index e3d74442..697925da 100644 --- a/cds/urcu/details/gpb.h +++ b/cds/urcu/details/gpb.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/gpi.h b/cds/urcu/details/gpi.h index 71b310e5..a3a7da3c 100644 --- a/cds/urcu/details/gpi.h +++ b/cds/urcu/details/gpi.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/gpt.h b/cds/urcu/details/gpt.h index fb0a1e4a..111e03b8 100644 --- a/cds/urcu/details/gpt.h +++ b/cds/urcu/details/gpt.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/sh.h b/cds/urcu/details/sh.h index c2300f35..682c3ee9 100644 --- a/cds/urcu/details/sh.h +++ b/cds/urcu/details/sh.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/sh_decl.h b/cds/urcu/details/sh_decl.h index 81a7ea32..0c54e779 100644 --- a/cds/urcu/details/sh_decl.h +++ b/cds/urcu/details/sh_decl.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/sig_buffered.h b/cds/urcu/details/sig_buffered.h index 6ca3a749..9b940183 100644 --- a/cds/urcu/details/sig_buffered.h +++ b/cds/urcu/details/sig_buffered.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/details/sig_threaded.h b/cds/urcu/details/sig_threaded.h index 53684a99..bac724b3 100644 --- a/cds/urcu/details/sig_threaded.h +++ b/cds/urcu/details/sig_threaded.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/dispose_thread.h b/cds/urcu/dispose_thread.h index 98d5fde5..01793518 100644 --- a/cds/urcu/dispose_thread.h +++ b/cds/urcu/dispose_thread.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/exempt_ptr.h b/cds/urcu/exempt_ptr.h index 0ffd2381..e8a5cff6 100644 --- a/cds/urcu/exempt_ptr.h +++ b/cds/urcu/exempt_ptr.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/general_buffered.h b/cds/urcu/general_buffered.h index 18bc01b2..b297813c 100644 --- a/cds/urcu/general_buffered.h +++ b/cds/urcu/general_buffered.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/general_instant.h b/cds/urcu/general_instant.h index 1051024e..91896a3e 100644 --- a/cds/urcu/general_instant.h +++ b/cds/urcu/general_instant.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/general_threaded.h b/cds/urcu/general_threaded.h index 5a740c49..16129d28 100644 --- a/cds/urcu/general_threaded.h +++ b/cds/urcu/general_threaded.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/options.h b/cds/urcu/options.h index 11bc6b94..e164c018 100644 --- a/cds/urcu/options.h +++ b/cds/urcu/options.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/raw_ptr.h b/cds/urcu/raw_ptr.h index b09f058f..c9bb2fc5 100644 --- a/cds/urcu/raw_ptr.h +++ b/cds/urcu/raw_ptr.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/signal_buffered.h b/cds/urcu/signal_buffered.h index f241ff9a..df5d36ba 100644 --- a/cds/urcu/signal_buffered.h +++ b/cds/urcu/signal_buffered.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/urcu/signal_threaded.h b/cds/urcu/signal_threaded.h index 0656e8bf..e5e0517e 100644 --- a/cds/urcu/signal_threaded.h +++ b/cds/urcu/signal_threaded.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/user_setup/allocator.h b/cds/user_setup/allocator.h index 2080def4..408ee5d5 100644 --- a/cds/user_setup/allocator.h +++ b/cds/user_setup/allocator.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/user_setup/cache_line.h b/cds/user_setup/cache_line.h index ea0e6101..36bcd67d 100644 --- a/cds/user_setup/cache_line.h +++ b/cds/user_setup/cache_line.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/user_setup/threading.h b/cds/user_setup/threading.h index 5b4041e9..e41ce9af 100644 --- a/cds/user_setup/threading.h +++ b/cds/user_setup/threading.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/cds/version.h b/cds/version.h index ceded0da..2f02da41 100644 --- a/cds/version.h +++ b/cds/version.h @@ -1,7 +1,7 @@ /* 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/ @@ -33,14 +33,14 @@ // cds library version -#define CDS_VERSION 0x020200 +#define CDS_VERSION 0x020300 #define CDS_VERSION_MAJOR ((CDS_VERSION & 0xFF0000)>> 16) #define CDS_VERSION_MINOR ((CDS_VERSION & 0x00FF00) >> 8) #define CDS_VERSION_PATCH (CDS_VERSION & 0x0000FF) // CDS_VERSION == CDS_VERSION_MAJOR '.' CDS_VERSION_MINOR '.' CDS_VERSION_PATCH -#define CDS_VERSION_STRING "2.2.0" +#define CDS_VERSION_STRING "2.3.0" #endif // #ifndef CDSLIB_VERSION_H diff --git a/change.log b/change.log index 1615cd50..2968e951 100644 --- a/change.log +++ b/change.log @@ -1,4 +1,20 @@ -2.2.0 +2.3.0 + General release + - Changed: cds::gc::HP is totally refactored: + - simplified internal structures; + - added ability to specify an external allocator for internal data; + - external API for gc::HP is slightly changed: now scan type + cannot be changed on the fly; it can be specified only in + construction time. + - Changed: cds::gc::DHP is totally refactored to overcome some internal + limitations. Now gc::DHP is fully adaptive variant of Hazard Pointer + SMR, any dependencies on thread count is removed, count of retired + data and hazard pointers per thread are increased automaticaly by perforce. + External API of gc::DHP class is changed: now only initial count + of hazard pointers can be specified in the constructor. Like new gc::HP, + the new gc::DHP supports an external allocator for internal data. + +2.2.0 04.01.2017 General release - Changed: CMake is used for build libcds. Ancient build.sh has been removed - Changed: unit and stress tests are migrated to googletest framework @@ -24,6 +40,7 @@ ones. The old cds::opt::v::dynamic_buffer and cds::opt::v::static_buffer classes are removed. - Removed: TsigasCysleQueue (due undecidable ABA-problem) + - Removed: Michael's allocator cds/memory/michael/allocator.h - Fixed: use-after-free bug in VyukovMPMCCycleQueue internal buffer. To prevent this bug the queue uses an uninitialized buffer now. - Fixed: rare priority inversion bug in MSPriorityQueue diff --git a/doxygen/cds.doxy b/doxygen/cds.doxy index 509da730..6bdae828 100644 --- a/doxygen/cds.doxy +++ b/doxygen/cds.doxy @@ -31,7 +31,7 @@ PROJECT_NAME = cds # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 2.2.0 +PROJECT_NUMBER = 2.3.0 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. @@ -69,7 +69,7 @@ OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES -MARKDOWN_SUPPORT = YES +MARKDOWN_SUPPORT = NO # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. @@ -1399,7 +1399,8 @@ PREDEFINED = CDS_BUILD_BITS=64 \ CDS_CXX11_INLINE_NAMESPACE=inline \ CDS_NOEXCEPT=noexcept() \ CDS_CONSTEXPR=constexpr \ - CDS_CXX11_INHERITING_CTOR + CDS_CXX11_INHERITING_CTOR \ + CDS_EXCEPTION_ENABLED # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. diff --git a/doxygen/footer.html b/doxygen/footer.html index 9f57b766..09fdd5f9 100644 --- a/doxygen/footer.html +++ b/doxygen/footer.html @@ -1,7 +1,7 @@
$projectname $projectnumber - Developed by Maxim Khizhinsky aka khizmax 2007 - 2016 + Developed by Maxim Khizhinsky aka khizmax 2007 - 2017
Autogenerated $datetime by Doxygen $doxygenversion
diff --git a/projects/Win/vc14/cds.vcxproj b/projects/Win/vc14/cds.vcxproj index 99241488..436d1240 100644 --- a/projects/Win/vc14/cds.vcxproj +++ b/projects/Win/vc14/cds.vcxproj @@ -151,7 +151,7 @@ /wd4512 /wd4127 /Zc:inline %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories) - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -182,7 +182,7 @@ /wd4512 /wd4127 /Zc:inline %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories) - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -219,7 +219,7 @@ true false $(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories) - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) true MultiThreadedDLL StreamingSIMDExtensions2 @@ -270,7 +270,7 @@ false false $(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories) - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;CDS_BUILD_LIB;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;CDS_BUILD_LIB;%(PreprocessorDefinitions) MultiThreadedDLL NotUsing Level3 @@ -312,7 +312,7 @@ /wd4512 /wd4127 /Zc:inline %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories) - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -343,7 +343,7 @@ /wd4512 /wd4127 /Zc:inline %(AdditionalOptions) Disabled $(SolutionDir)..\..\..\;$(BOOST_PATH);%(AdditionalIncludeDirectories) - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;CDS_BUILD_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -367,11 +367,11 @@ - + - + - + @@ -508,15 +508,11 @@ - - - - + + - - - - + + @@ -687,11 +683,6 @@ - - - - - diff --git a/projects/Win/vc14/cds.vcxproj.filters b/projects/Win/vc14/cds.vcxproj.filters index b03ac73f..21487873 100644 --- a/projects/Win/vc14/cds.vcxproj.filters +++ b/projects/Win/vc14/cds.vcxproj.filters @@ -93,9 +93,6 @@ {5c631093-3ca2-4a36-acf7-2d9368b65366} - - {b7cdb65c-15d3-4655-abec-1e4640271432} - {fe7576b4-d93f-473a-8522-493feac51996} @@ -129,9 +126,6 @@ {00a14aa8-3035-4b56-bc86-442ca9bf8f44} - - {3195cce2-1710-4b79-a1cf-6c7cea085fa3} - {03d212fb-73f8-4f0e-9aff-f22b0783fee8} @@ -161,9 +155,6 @@ Source Files - - Source Files - Source Files @@ -179,10 +170,13 @@ Source Files - + Source Files - + + Source Files + + Source Files @@ -427,21 +421,6 @@ Header Files\cds\OS\details - - Header Files\cds\memory\michael - - - Header Files\cds\memory\michael - - - Header Files\cds\memory\michael - - - Header Files\cds\memory\michael - - - Header Files\cds\memory\michael - Header Files\cds\opt @@ -1111,30 +1090,6 @@ Source Files - - Header Files\cds\gc\details - - - Header Files\cds\gc\details - - - Header Files\cds\gc\details - - - Header Files\cds\gc\details - - - Header Files\cds\gc\impl - - - Header Files\cds\gc\impl - - - Header Files\cds\gc\impl - - - Header Files\cds\gc\impl - Header Files\cds\algo @@ -1288,5 +1243,17 @@ Header Files\cds\container\details + + Header Files\cds\gc + + + Header Files\cds\gc + + + Header Files\cds\gc\details + + + Header Files\cds\details + \ No newline at end of file diff --git a/projects/Win/vc14/gtest-deque.vcxproj b/projects/Win/vc14/gtest-deque.vcxproj index 9ef36575..fb609851 100644 --- a/projects/Win/vc14/gtest-deque.vcxproj +++ b/projects/Win/vc14/gtest-deque.vcxproj @@ -138,7 +138,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -153,7 +153,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -200,7 +200,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -219,7 +219,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-ilist-iterable.vcxproj b/projects/Win/vc14/gtest-ilist-iterable.vcxproj index 7f344608..7ecf8fde 100644 --- a/projects/Win/vc14/gtest-ilist-iterable.vcxproj +++ b/projects/Win/vc14/gtest-ilist-iterable.vcxproj @@ -146,7 +146,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -162,7 +162,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -178,7 +178,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -194,7 +194,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -212,7 +212,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -232,7 +232,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 diff --git a/projects/Win/vc14/gtest-ilist-lazy.vcxproj b/projects/Win/vc14/gtest-ilist-lazy.vcxproj index 4874330c..8f37014b 100644 --- a/projects/Win/vc14/gtest-ilist-lazy.vcxproj +++ b/projects/Win/vc14/gtest-ilist-lazy.vcxproj @@ -152,7 +152,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -184,7 +184,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -218,7 +218,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -238,7 +238,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 diff --git a/projects/Win/vc14/gtest-ilist-michael.vcxproj b/projects/Win/vc14/gtest-ilist-michael.vcxproj index ff58ce2d..4ec4a1c2 100644 --- a/projects/Win/vc14/gtest-ilist-michael.vcxproj +++ b/projects/Win/vc14/gtest-ilist-michael.vcxproj @@ -152,7 +152,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -184,7 +184,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -218,7 +218,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 @@ -238,7 +238,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) 4503 diff --git a/projects/Win/vc14/gtest-iset-feldman.vcxproj b/projects/Win/vc14/gtest-iset-feldman.vcxproj index cd6c78a0..7ab3712b 100644 --- a/projects/Win/vc14/gtest-iset-feldman.vcxproj +++ b/projects/Win/vc14/gtest-iset-feldman.vcxproj @@ -156,7 +156,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -173,7 +173,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -190,7 +190,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -207,7 +207,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -226,7 +226,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -247,7 +247,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-iset-michael-iterable.vcxproj b/projects/Win/vc14/gtest-iset-michael-iterable.vcxproj index d44176bf..bc42ee96 100644 --- a/projects/Win/vc14/gtest-iset-michael-iterable.vcxproj +++ b/projects/Win/vc14/gtest-iset-michael-iterable.vcxproj @@ -147,7 +147,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -164,7 +164,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -181,7 +181,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -198,7 +198,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -217,7 +217,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -238,7 +238,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-iset-michael-lazy.vcxproj b/projects/Win/vc14/gtest-iset-michael-lazy.vcxproj index 6e487b0b..74e43ff6 100644 --- a/projects/Win/vc14/gtest-iset-michael-lazy.vcxproj +++ b/projects/Win/vc14/gtest-iset-michael-lazy.vcxproj @@ -166,7 +166,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -217,7 +217,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -236,7 +236,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -257,7 +257,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-iset-michael.vcxproj b/projects/Win/vc14/gtest-iset-michael.vcxproj index 27886b01..223c0b18 100644 --- a/projects/Win/vc14/gtest-iset-michael.vcxproj +++ b/projects/Win/vc14/gtest-iset-michael.vcxproj @@ -166,7 +166,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -217,7 +217,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -236,7 +236,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -257,7 +257,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-iset-skip.vcxproj b/projects/Win/vc14/gtest-iset-skip.vcxproj index 0adc2dfc..351b622b 100644 --- a/projects/Win/vc14/gtest-iset-skip.vcxproj +++ b/projects/Win/vc14/gtest-iset-skip.vcxproj @@ -159,7 +159,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -176,7 +176,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -193,7 +193,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -210,7 +210,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -229,7 +229,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -250,7 +250,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-iset-split-iterable.vcxproj b/projects/Win/vc14/gtest-iset-split-iterable.vcxproj index 05d91b40..58e16c0a 100644 --- a/projects/Win/vc14/gtest-iset-split-iterable.vcxproj +++ b/projects/Win/vc14/gtest-iset-split-iterable.vcxproj @@ -147,7 +147,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -164,7 +164,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -181,7 +181,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -198,7 +198,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -217,7 +217,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -238,7 +238,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-iset-split-lazy.vcxproj b/projects/Win/vc14/gtest-iset-split-lazy.vcxproj index e0f2e785..5b7fc968 100644 --- a/projects/Win/vc14/gtest-iset-split-lazy.vcxproj +++ b/projects/Win/vc14/gtest-iset-split-lazy.vcxproj @@ -194,7 +194,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -211,7 +211,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -228,7 +228,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -245,7 +245,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -264,7 +264,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -285,7 +285,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-iset-split-michael.vcxproj b/projects/Win/vc14/gtest-iset-split-michael.vcxproj index 16e8d396..9a1aa69d 100644 --- a/projects/Win/vc14/gtest-iset-split-michael.vcxproj +++ b/projects/Win/vc14/gtest-iset-split-michael.vcxproj @@ -194,7 +194,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -211,7 +211,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -228,7 +228,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -245,7 +245,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -264,7 +264,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -285,7 +285,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-list-iterable.vcxproj b/projects/Win/vc14/gtest-list-iterable.vcxproj index 6e81e2d4..52bcc53f 100644 --- a/projects/Win/vc14/gtest-list-iterable.vcxproj +++ b/projects/Win/vc14/gtest-list-iterable.vcxproj @@ -153,7 +153,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -198,7 +198,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -215,7 +215,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-list-lazy.vcxproj b/projects/Win/vc14/gtest-list-lazy.vcxproj index bd763d6a..7e28cf31 100644 --- a/projects/Win/vc14/gtest-list-lazy.vcxproj +++ b/projects/Win/vc14/gtest-list-lazy.vcxproj @@ -179,7 +179,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -194,7 +194,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -209,7 +209,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -224,7 +224,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -241,7 +241,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -260,7 +260,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-list-michael.vcxproj b/projects/Win/vc14/gtest-list-michael.vcxproj index fe272d5f..a5f29927 100644 --- a/projects/Win/vc14/gtest-list-michael.vcxproj +++ b/projects/Win/vc14/gtest-list-michael.vcxproj @@ -193,7 +193,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -208,7 +208,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -223,7 +223,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -238,7 +238,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -255,7 +255,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -274,7 +274,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-map-feldman.vcxproj b/projects/Win/vc14/gtest-map-feldman.vcxproj index 8ef7686c..1670d530 100644 --- a/projects/Win/vc14/gtest-map-feldman.vcxproj +++ b/projects/Win/vc14/gtest-map-feldman.vcxproj @@ -153,7 +153,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -170,7 +170,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -187,7 +187,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -204,7 +204,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -223,7 +223,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -244,7 +244,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-map-michael-iterable.vcxproj b/projects/Win/vc14/gtest-map-michael-iterable.vcxproj index 13c1ea5a..7a044cc6 100644 --- a/projects/Win/vc14/gtest-map-michael-iterable.vcxproj +++ b/projects/Win/vc14/gtest-map-michael-iterable.vcxproj @@ -148,7 +148,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -165,7 +165,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -182,7 +182,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -199,7 +199,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -218,7 +218,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -239,7 +239,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-map-michael-lazy.vcxproj b/projects/Win/vc14/gtest-map-michael-lazy.vcxproj index bc6f8604..6c4de62e 100644 --- a/projects/Win/vc14/gtest-map-michael-lazy.vcxproj +++ b/projects/Win/vc14/gtest-map-michael-lazy.vcxproj @@ -160,7 +160,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -177,7 +177,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -194,7 +194,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -211,7 +211,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -230,7 +230,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -251,7 +251,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-map-michael.vcxproj b/projects/Win/vc14/gtest-map-michael.vcxproj index 60d4d543..c13442be 100644 --- a/projects/Win/vc14/gtest-map-michael.vcxproj +++ b/projects/Win/vc14/gtest-map-michael.vcxproj @@ -166,7 +166,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -217,7 +217,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -236,7 +236,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -257,7 +257,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-map-skip.vcxproj b/projects/Win/vc14/gtest-map-skip.vcxproj index 482286ef..7a7779cf 100644 --- a/projects/Win/vc14/gtest-map-skip.vcxproj +++ b/projects/Win/vc14/gtest-map-skip.vcxproj @@ -169,7 +169,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -186,7 +186,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -203,7 +203,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -220,7 +220,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -239,7 +239,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -260,7 +260,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-map-split-iterable.vcxproj b/projects/Win/vc14/gtest-map-split-iterable.vcxproj index c06e636c..7760500f 100644 --- a/projects/Win/vc14/gtest-map-split-iterable.vcxproj +++ b/projects/Win/vc14/gtest-map-split-iterable.vcxproj @@ -146,7 +146,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -163,7 +163,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -180,7 +180,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -197,7 +197,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -216,7 +216,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -237,7 +237,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-map-split-lazy.vcxproj b/projects/Win/vc14/gtest-map-split-lazy.vcxproj index 57314049..5e1f8a0d 100644 --- a/projects/Win/vc14/gtest-map-split-lazy.vcxproj +++ b/projects/Win/vc14/gtest-map-split-lazy.vcxproj @@ -195,7 +195,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -212,7 +212,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -229,7 +229,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -246,7 +246,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -265,7 +265,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -286,7 +286,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-map-split-michael.vcxproj b/projects/Win/vc14/gtest-map-split-michael.vcxproj index e39603bd..051152eb 100644 --- a/projects/Win/vc14/gtest-map-split-michael.vcxproj +++ b/projects/Win/vc14/gtest-map-split-michael.vcxproj @@ -195,7 +195,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -212,7 +212,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -229,7 +229,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -246,7 +246,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -265,7 +265,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -286,7 +286,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-misc.vcxproj b/projects/Win/vc14/gtest-misc.vcxproj index bd9cf5d5..f381e59a 100644 --- a/projects/Win/vc14/gtest-misc.vcxproj +++ b/projects/Win/vc14/gtest-misc.vcxproj @@ -147,7 +147,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -162,7 +162,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -177,7 +177,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -192,7 +192,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -209,7 +209,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -228,7 +228,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-pqueue.vcxproj b/projects/Win/vc14/gtest-pqueue.vcxproj index 5e7e2808..b70d3ae6 100644 --- a/projects/Win/vc14/gtest-pqueue.vcxproj +++ b/projects/Win/vc14/gtest-pqueue.vcxproj @@ -146,7 +146,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -161,7 +161,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -176,7 +176,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -191,7 +191,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -208,7 +208,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -227,7 +227,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-queue.vcxproj b/projects/Win/vc14/gtest-queue.vcxproj index b6f03324..28f044fb 100644 --- a/projects/Win/vc14/gtest-queue.vcxproj +++ b/projects/Win/vc14/gtest-queue.vcxproj @@ -172,7 +172,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -187,7 +187,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -202,7 +202,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -217,7 +217,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -253,7 +253,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-set-feldman.vcxproj b/projects/Win/vc14/gtest-set-feldman.vcxproj index 9311deb0..db736d9c 100644 --- a/projects/Win/vc14/gtest-set-feldman.vcxproj +++ b/projects/Win/vc14/gtest-set-feldman.vcxproj @@ -155,7 +155,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -172,7 +172,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -189,7 +189,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -206,7 +206,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -225,7 +225,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -246,7 +246,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-set-michael-iterable.vcxproj b/projects/Win/vc14/gtest-set-michael-iterable.vcxproj index effd95a0..401d3997 100644 --- a/projects/Win/vc14/gtest-set-michael-iterable.vcxproj +++ b/projects/Win/vc14/gtest-set-michael-iterable.vcxproj @@ -149,7 +149,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -166,7 +166,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -219,7 +219,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -240,7 +240,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-set-michael-lazy.vcxproj b/projects/Win/vc14/gtest-set-michael-lazy.vcxproj index f2128bc6..5212bf08 100644 --- a/projects/Win/vc14/gtest-set-michael-lazy.vcxproj +++ b/projects/Win/vc14/gtest-set-michael-lazy.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -185,7 +185,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -202,7 +202,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -219,7 +219,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -238,7 +238,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -259,7 +259,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-set-michael.vcxproj b/projects/Win/vc14/gtest-set-michael.vcxproj index 498db415..c307f181 100644 --- a/projects/Win/vc14/gtest-set-michael.vcxproj +++ b/projects/Win/vc14/gtest-set-michael.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -185,7 +185,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -202,7 +202,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -219,7 +219,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -238,7 +238,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -259,7 +259,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-set-skip.vcxproj b/projects/Win/vc14/gtest-set-skip.vcxproj index 7df889c6..27a974dc 100644 --- a/projects/Win/vc14/gtest-set-skip.vcxproj +++ b/projects/Win/vc14/gtest-set-skip.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -185,7 +185,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -202,7 +202,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -219,7 +219,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -238,7 +238,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -259,7 +259,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-set-split-iterable.vcxproj b/projects/Win/vc14/gtest-set-split-iterable.vcxproj index 526c3054..01b0f9a1 100644 --- a/projects/Win/vc14/gtest-set-split-iterable.vcxproj +++ b/projects/Win/vc14/gtest-set-split-iterable.vcxproj @@ -149,7 +149,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -166,7 +166,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -219,7 +219,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -240,7 +240,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-set-split-lazy.vcxproj b/projects/Win/vc14/gtest-set-split-lazy.vcxproj index 1f881f54..4e92cee3 100644 --- a/projects/Win/vc14/gtest-set-split-lazy.vcxproj +++ b/projects/Win/vc14/gtest-set-split-lazy.vcxproj @@ -196,7 +196,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -213,7 +213,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -230,7 +230,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -247,7 +247,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -266,7 +266,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -287,7 +287,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-set-split-michael.vcxproj b/projects/Win/vc14/gtest-set-split-michael.vcxproj index e4ce8efd..1654bd48 100644 --- a/projects/Win/vc14/gtest-set-split-michael.vcxproj +++ b/projects/Win/vc14/gtest-set-split-michael.vcxproj @@ -196,7 +196,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -213,7 +213,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -230,7 +230,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -247,7 +247,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -266,7 +266,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 @@ -287,7 +287,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4503 diff --git a/projects/Win/vc14/gtest-stack.vcxproj b/projects/Win/vc14/gtest-stack.vcxproj index 6dfc3752..599cd878 100644 --- a/projects/Win/vc14/gtest-stack.vcxproj +++ b/projects/Win/vc14/gtest-stack.vcxproj @@ -147,7 +147,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -162,7 +162,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -177,7 +177,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -192,7 +192,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -209,7 +209,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -228,7 +228,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/gtest-tree-bronson.vcxproj b/projects/Win/vc14/gtest-tree-bronson.vcxproj index e84f0e3d..b2575a6f 100644 --- a/projects/Win/vc14/gtest-tree-bronson.vcxproj +++ b/projects/Win/vc14/gtest-tree-bronson.vcxproj @@ -157,7 +157,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -173,7 +173,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -189,7 +189,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -205,7 +205,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -223,7 +223,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -243,7 +243,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) diff --git a/projects/Win/vc14/gtest-tree-ellen.vcxproj b/projects/Win/vc14/gtest-tree-ellen.vcxproj index 536a4620..ad700723 100644 --- a/projects/Win/vc14/gtest-tree-ellen.vcxproj +++ b/projects/Win/vc14/gtest-tree-ellen.vcxproj @@ -241,7 +241,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -257,7 +257,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -273,7 +273,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -289,7 +289,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -307,7 +307,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) @@ -327,7 +327,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj /Bv %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-framework.vcxproj b/projects/Win/vc14/stress-framework.vcxproj index 1bb5e312..fa2f3962 100644 --- a/projects/Win/vc14/stress-framework.vcxproj +++ b/projects/Win/vc14/stress-framework.vcxproj @@ -30,7 +30,6 @@ - @@ -50,7 +49,6 @@ _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -190,7 +188,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -205,7 +203,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -220,7 +218,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -235,7 +233,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -252,7 +250,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -271,7 +269,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/stress-framework.vcxproj.filters b/projects/Win/vc14/stress-framework.vcxproj.filters index 00de287f..d0d5de22 100644 --- a/projects/Win/vc14/stress-framework.vcxproj.filters +++ b/projects/Win/vc14/stress-framework.vcxproj.filters @@ -14,9 +14,6 @@ Header Files - - Header Files - Header Files @@ -34,9 +31,6 @@ Source Files - - Source Files - Source Files diff --git a/projects/Win/vc14/stress-freelist.vcxproj b/projects/Win/vc14/stress-freelist.vcxproj index 2edee2cd..fff1140b 100644 --- a/projects/Win/vc14/stress-freelist.vcxproj +++ b/projects/Win/vc14/stress-freelist.vcxproj @@ -140,7 +140,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -155,7 +155,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -170,7 +170,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -185,7 +185,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -202,7 +202,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -221,7 +221,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/stress-map-delodd.vcxproj b/projects/Win/vc14/stress-map-delodd.vcxproj index ff391596..ffaf262e 100644 --- a/projects/Win/vc14/stress-map-delodd.vcxproj +++ b/projects/Win/vc14/stress-map-delodd.vcxproj @@ -166,7 +166,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -182,7 +182,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -198,7 +198,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -214,7 +214,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -232,7 +232,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -252,7 +252,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-find_int.vcxproj b/projects/Win/vc14/stress-map-find_int.vcxproj index 82b1004a..8f08222c 100644 --- a/projects/Win/vc14/stress-map-find_int.vcxproj +++ b/projects/Win/vc14/stress-map-find_int.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -184,7 +184,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -216,7 +216,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -254,7 +254,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-find_string.vcxproj b/projects/Win/vc14/stress-map-find_string.vcxproj index 16c36646..a8933c8f 100644 --- a/projects/Win/vc14/stress-map-find_string.vcxproj +++ b/projects/Win/vc14/stress-map-find_string.vcxproj @@ -182,7 +182,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -198,7 +198,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -214,7 +214,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -230,7 +230,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -248,7 +248,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -268,7 +268,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-insdel-func.vcxproj b/projects/Win/vc14/stress-map-insdel-func.vcxproj index 03c4723f..b78ace4b 100644 --- a/projects/Win/vc14/stress-map-insdel-func.vcxproj +++ b/projects/Win/vc14/stress-map-insdel-func.vcxproj @@ -167,7 +167,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -199,7 +199,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -215,7 +215,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -233,7 +233,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -253,7 +253,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-insdel-int.vcxproj b/projects/Win/vc14/stress-map-insdel-int.vcxproj index a7af9239..8f0b642a 100644 --- a/projects/Win/vc14/stress-map-insdel-int.vcxproj +++ b/projects/Win/vc14/stress-map-insdel-int.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -184,7 +184,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -216,7 +216,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -254,7 +254,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-insdel-item-int.vcxproj b/projects/Win/vc14/stress-map-insdel-item-int.vcxproj index e09d7750..4e94427d 100644 --- a/projects/Win/vc14/stress-map-insdel-item-int.vcxproj +++ b/projects/Win/vc14/stress-map-insdel-item-int.vcxproj @@ -167,7 +167,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -183,7 +183,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -199,7 +199,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -215,7 +215,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -233,7 +233,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -253,7 +253,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-insdel-string.vcxproj b/projects/Win/vc14/stress-map-insdel-string.vcxproj index b5b77175..04a7a601 100644 --- a/projects/Win/vc14/stress-map-insdel-string.vcxproj +++ b/projects/Win/vc14/stress-map-insdel-string.vcxproj @@ -175,7 +175,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -191,7 +191,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -207,7 +207,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -223,7 +223,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -241,7 +241,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -261,7 +261,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-insdelfind.vcxproj b/projects/Win/vc14/stress-map-insdelfind.vcxproj index 3cd3e6a5..16bbd6ef 100644 --- a/projects/Win/vc14/stress-map-insdelfind.vcxproj +++ b/projects/Win/vc14/stress-map-insdelfind.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -184,7 +184,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -216,7 +216,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -254,7 +254,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-map-insfind-int.vcxproj b/projects/Win/vc14/stress-map-insfind-int.vcxproj index e054e6af..42f2973a 100644 --- a/projects/Win/vc14/stress-map-insfind-int.vcxproj +++ b/projects/Win/vc14/stress-map-insfind-int.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -184,7 +184,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -216,7 +216,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -254,7 +254,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\map;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-pqueue.vcxproj b/projects/Win/vc14/stress-pqueue.vcxproj index 20e765a2..e3be51b0 100644 --- a/projects/Win/vc14/stress-pqueue.vcxproj +++ b/projects/Win/vc14/stress-pqueue.vcxproj @@ -152,7 +152,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -167,7 +167,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -182,7 +182,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -197,7 +197,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -214,7 +214,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -233,7 +233,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/stress-queue.vcxproj b/projects/Win/vc14/stress-queue.vcxproj index 000aceca..f203b17c 100644 --- a/projects/Win/vc14/stress-queue.vcxproj +++ b/projects/Win/vc14/stress-queue.vcxproj @@ -178,7 +178,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -193,7 +193,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -208,7 +208,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -223,7 +223,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -240,7 +240,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -259,7 +259,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/projects/Win/vc14/stress-set-delodd.vcxproj b/projects/Win/vc14/stress-set-delodd.vcxproj index 504174a9..c48eb87b 100644 --- a/projects/Win/vc14/stress-set-delodd.vcxproj +++ b/projects/Win/vc14/stress-set-delodd.vcxproj @@ -168,7 +168,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -184,7 +184,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -200,7 +200,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -216,7 +216,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -254,7 +254,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-set-insdel_func.vcxproj b/projects/Win/vc14/stress-set-insdel_func.vcxproj index ad8d90fe..ec77df3c 100644 --- a/projects/Win/vc14/stress-set-insdel_func.vcxproj +++ b/projects/Win/vc14/stress-set-insdel_func.vcxproj @@ -166,7 +166,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -182,7 +182,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -198,7 +198,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -214,7 +214,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -232,7 +232,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -252,7 +252,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-set-insdel_string.vcxproj b/projects/Win/vc14/stress-set-insdel_string.vcxproj index c25bd838..7ebc517a 100644 --- a/projects/Win/vc14/stress-set-insdel_string.vcxproj +++ b/projects/Win/vc14/stress-set-insdel_string.vcxproj @@ -174,7 +174,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -190,7 +190,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -206,7 +206,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -222,7 +222,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -240,7 +240,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -260,7 +260,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-set-insdelfind.vcxproj b/projects/Win/vc14/stress-set-insdelfind.vcxproj index a3ab653b..8a861438 100644 --- a/projects/Win/vc14/stress-set-insdelfind.vcxproj +++ b/projects/Win/vc14/stress-set-insdelfind.vcxproj @@ -163,7 +163,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -179,7 +179,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -195,7 +195,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -211,7 +211,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_SCL_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -229,7 +229,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -249,7 +249,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_SCL_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_SCL_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-set-iteration.vcxproj b/projects/Win/vc14/stress-set-iteration.vcxproj index 62ccbbcb..0ac5ab71 100644 --- a/projects/Win/vc14/stress-set-iteration.vcxproj +++ b/projects/Win/vc14/stress-set-iteration.vcxproj @@ -148,7 +148,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -164,7 +164,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -180,7 +180,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -196,7 +196,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -214,7 +214,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) @@ -234,7 +234,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDSUNIT_USE_URCU;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(SolutionDir)..\..\..\test\stress\set;$(SolutionDir)..\..\..\test\stress\;$(BOOST_PATH);%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) diff --git a/projects/Win/vc14/stress-stack.vcxproj b/projects/Win/vc14/stress-stack.vcxproj index f346dbec..cf0f3509 100644 --- a/projects/Win/vc14/stress-stack.vcxproj +++ b/projects/Win/vc14/stress-stack.vcxproj @@ -147,7 +147,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -162,7 +162,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -177,7 +177,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -192,7 +192,7 @@ NotUsing Level3 Disabled - _ENABLE_ATOMIC_ALIGNMENT_FIX;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -209,7 +209,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) @@ -228,7 +228,7 @@ MaxSpeed true true - _ENABLE_ATOMIC_ALIGNMENT_FIX;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _ENABLE_ATOMIC_ALIGNMENT_FIX;CDS_ENABLE_HPSTAT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\..\..;$(GTEST_ROOT)/include;$(SolutionDir)..\..\..\test\include;$(BOOST_PATH);%(AdditionalIncludeDirectories) diff --git a/readme.md b/readme.md index 53880508..54c6f15b 100644 --- a/readme.md +++ b/readme.md @@ -80,8 +80,6 @@ References - *SegmentedQueue*: [2010] Afek, Korland, Yanovsky "Quasi-Linearizability: relaxed consistency for improved concurrency" [pdf](http://mcg.cs.tau.ac.il/papers/opodis2010-quasi.pdf) - *FCQueue* - flat-combining wrapper for *std::queue* - - *TsigasCycleQueue*: [2000] Philippas Tsigas, Yi Zhang "A Simple, Fast and Scalable Non-Blocking Concurrent FIFO Queue for Shared Memory Multiprocessor Systems" - [pdf](http://www.cse.chalmers.se/~tsigas/papers/latest-spaa01.pdf) - *VyukovMPMCCycleQueue* Dmitry Vyukov (see http://www.1024cores.net) *Deque* @@ -132,10 +130,6 @@ References Implementations of Read-Copy Update" [pdf](http://www.dorsal.polymtl.ca/sites/www.dorsal.polymtl.ca/files/publications/desnoyers-ieee-urcu-submitted.pdf) -*Memory allocation* - - [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation" - [pdf](http://www.research.ibm.com/people/m/michael/pldi-2004.pdf) - *Flat Combining* technique - [2010] Hendler, Incze, Shavit and Tzafrir "Flat Combining and the Synchronization-Parallelism Tradeoff" [pdf](http://www.cs.bgu.ac.il/~hendlerd/papers/flat-combining.pdf) diff --git a/src/dhp.cpp b/src/dhp.cpp new file mode 100644 index 00000000..b81b96a3 --- /dev/null +++ b/src/dhp.cpp @@ -0,0 +1,488 @@ +/* + This file is a part of libcds - Concurrent Data Structures library + + (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/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include + +#include +#include + +namespace cds { namespace gc { namespace dhp { + + namespace { + void * default_alloc_memory( size_t size ) + { + return new uintptr_t[( size + sizeof( uintptr_t ) - 1 ) / sizeof( uintptr_t )]; + } + + void default_free_memory( void* p ) + { + delete[] reinterpret_cast( p ); + } + + struct defaults { + static size_t const c_extended_guard_block_size = 16; + }; + + void* ( *s_alloc_memory )( size_t size ) = default_alloc_memory; + void( *s_free_memory )( void* p ) = default_free_memory; + + template + class allocator + { + public: + typedef T value_type; + + allocator() {} + allocator( allocator const& ) {} + template + explicit allocator( allocator const& ) {} + + static T* allocate( size_t nCount ) + { + return reinterpret_cast( s_alloc_memory( sizeof( value_type ) * nCount )); + } + + static void deallocate( T* p, size_t /*nCount*/ ) + { + s_free_memory( reinterpret_cast( p )); + } + }; + + } // namespace + + /*static*/ CDS_EXPORT_API smr* smr::instance_ = nullptr; + thread_local thread_data* tls_ = nullptr; + + CDS_EXPORT_API hp_allocator::~hp_allocator() + { + while ( guard_block* gp = static_cast( free_list_.get())) { + gp->~guard_block(); + s_free_memory( gp ); + } + } + + CDS_EXPORT_API guard_block* hp_allocator::alloc() + { + guard_block* gb; + auto block = free_list_.get(); + if ( block ) + gb = static_cast< guard_block* >( block ); + else { + // allocate new block + gb = new( s_alloc_memory( sizeof( guard_block ) + sizeof( guard ) * defaults::c_extended_guard_block_size )) guard_block; + new ( gb->first() ) guard[defaults::c_extended_guard_block_size]; + } + + // links guards in the block + guard* p = gb->first(); + for ( guard* last = p + defaults::c_extended_guard_block_size - 1; p != last; ++p ) { + p->clear( atomics::memory_order_relaxed ); + p->next_ = p + 1; + } + p->next_ = nullptr; + p->clear(); + + return gb; + } + + CDS_EXPORT_API retired_allocator::~retired_allocator() + { + while ( retired_block* rb = static_cast( free_list_.get() ) ) { + rb->~retired_block(); + s_free_memory( rb ); + } + } + + CDS_EXPORT_API retired_block* retired_allocator::alloc() + { + retired_block* rb; + auto block = free_list_.get(); + if ( block ) + rb = static_cast< retired_block* >( block ); + else { + // allocate new block + rb = new( s_alloc_memory( sizeof( retired_block ) + sizeof( retired_ptr ) * retired_block::c_capacity )) retired_block; + new ( rb->first()) retired_ptr[retired_block::c_capacity]; + } + + rb->next_ = nullptr; + return rb; + } + + struct smr::thread_record: thread_data + { + atomics::atomic m_pNextNode; ///< next hazard ptr record in list + atomics::atomic m_idOwner; ///< Owner thread id; 0 - the record is free (not owned) + atomics::atomic m_bFree; ///< true if record is free (not owned) + + thread_record( guard* guards, size_t guard_count ) + : thread_data( guards, guard_count ) + , m_bFree( false ) + {} + }; + + /*static*/ CDS_EXPORT_API thread_data* smr::tls() + { + assert( tls_ != nullptr ); + return tls_; + } + + /*static*/ CDS_EXPORT_API void smr::set_memory_allocator( + void* ( *alloc_func )( size_t size ), + void( *free_func )( void * p ) + ) + { + // The memory allocation functions may be set BEFORE initializing DHP SMR!!! + assert( instance_ == nullptr ); + + s_alloc_memory = alloc_func; + s_free_memory = free_func; + } + + /*static*/ CDS_EXPORT_API void smr::construct( size_t nInitialHazardPtrCount ) + { + if ( !instance_ ) { + instance_ = new( s_alloc_memory( sizeof( smr ))) smr( nInitialHazardPtrCount ); + } + } + + /*static*/ CDS_EXPORT_API void smr::destruct( bool bDetachAll ) + { + if ( instance_ ) { + if ( bDetachAll ) + instance_->detach_all_thread(); + + instance_->~smr(); + s_free_memory( instance_ ); + instance_ = nullptr; + } + } + + CDS_EXPORT_API smr::smr( size_t nInitialHazardPtrCount ) + : thread_list_( nullptr ) + , initial_hazard_count_( nInitialHazardPtrCount < 4 ? 16 : nInitialHazardPtrCount ) + , last_plist_size_( initial_hazard_count_ * 64 ) + {} + + CDS_EXPORT_API smr::~smr() + { + CDS_DEBUG_ONLY( const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; ) + CDS_DEBUG_ONLY( const cds::OS::ThreadId mainThreadId = cds::OS::get_current_thread_id(); ) + + thread_record* pHead = thread_list_.load( atomics::memory_order_relaxed ); + thread_list_.store( nullptr, atomics::memory_order_relaxed ); + + thread_record* pNext = nullptr; + for ( thread_record* hprec = pHead; hprec; hprec = pNext ) + { + assert( hprec->m_idOwner.load( atomics::memory_order_relaxed ) == nullThreadId + || hprec->m_idOwner.load( atomics::memory_order_relaxed ) == mainThreadId + || !cds::OS::is_thread_alive( hprec->m_idOwner.load( atomics::memory_order_relaxed ) ) + ); + + retired_array& retired = hprec->retired_; + + // delete retired data + for ( retired_block* block = retired.list_head_; block && block != retired.current_block_; block = block->next_ ) { + for ( retired_ptr* p = block->first(); p != block->last(); ++p ) + p->free(); + } + if ( retired.current_block_ ) { + for ( retired_ptr* p = retired.current_block_->first(); p != retired.current_cell_; ++p ) + p->free(); + } + hprec->retired_.fini(); + hprec->hazards_.clear(); + + pNext = hprec->m_pNextNode.load( atomics::memory_order_relaxed ); + hprec->m_bFree.store( true, atomics::memory_order_relaxed ); + destroy_thread_data( hprec ); + } + } + + /*static*/ CDS_EXPORT_API void smr::attach_thread() + { + if ( !tls_ ) + tls_ = instance().alloc_thread_data(); + } + + /*static*/ CDS_EXPORT_API void smr::detach_thread() + { + thread_data* rec = tls_; + if ( rec ) { + tls_ = nullptr; + instance().free_thread_data( static_cast( rec ) ); + } + } + + CDS_EXPORT_API void smr::detach_all_thread() + { + thread_record * pNext = nullptr; + const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; + + for ( thread_record * hprec = thread_list_.load( atomics::memory_order_relaxed ); hprec; hprec = pNext ) { + pNext = hprec->m_pNextNode.load( atomics::memory_order_relaxed ); + if ( hprec->m_idOwner.load( atomics::memory_order_relaxed ) != nullThreadId ) { + free_thread_data( hprec ); + } + } + } + + CDS_EXPORT_API smr::thread_record* smr::create_thread_data() + { + size_t const guard_array_size = sizeof( guard ) * initial_hazard_count_; + + /* + The memory is allocated by contnuous block + Memory layout: + +--------------------------+ + | | + | thread_record | + | hazards_ +---+ + | retired_ | | + | | | + |--------------------------| | + | hazard_ptr[] |<--+ + | initial HP array | + | | + +--------------------------+ + */ + + char* mem = reinterpret_cast( s_alloc_memory( sizeof( thread_record ) + guard_array_size )); + return new( mem ) thread_record( + reinterpret_cast( mem + sizeof( thread_record ) ), initial_hazard_count_ + ); + } + + /*static*/ CDS_EXPORT_API void smr::destroy_thread_data( thread_record* pRec ) + { + // all retired pointers must be freed + pRec->~thread_record(); + s_free_memory( pRec ); + } + + CDS_EXPORT_API smr::thread_record* smr::alloc_thread_data() + { + thread_record * hprec = nullptr; + const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; + const cds::OS::ThreadId curThreadId = cds::OS::get_current_thread_id(); + + // First try to reuse a free (non-active) DHP record + for ( hprec = thread_list_.load( atomics::memory_order_acquire ); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed ) ) { + cds::OS::ThreadId thId = nullThreadId; + if ( !hprec->m_idOwner.compare_exchange_strong( thId, curThreadId, atomics::memory_order_relaxed, atomics::memory_order_relaxed ) ) + continue; + hprec->m_bFree.store( false, atomics::memory_order_release ); + break; + } + + if ( !hprec ) { + // No HP records available for reuse + // Allocate and push a new HP record + hprec = create_thread_data(); + hprec->m_idOwner.store( curThreadId, atomics::memory_order_relaxed ); + + thread_record* pOldHead = thread_list_.load( atomics::memory_order_relaxed ); + do { + hprec->m_pNextNode.store( pOldHead, atomics::memory_order_relaxed ); + } while ( !thread_list_.compare_exchange_weak( pOldHead, hprec, atomics::memory_order_release, atomics::memory_order_acquire ) ); + } + + hprec->hazards_.init(); + hprec->retired_.init(); + + return hprec; + } + + CDS_EXPORT_API void smr::free_thread_data( thread_record* pRec ) + { + assert( pRec != nullptr ); + //CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_RetireHPRec ) + + pRec->hazards_.clear(); + scan( pRec ); + help_scan( pRec ); + + if ( pRec->retired_.empty() ) { + pRec->retired_.fini(); + pRec->m_bFree.store( true, std::memory_order_release ); + } + else { + // Free all empty blocks + retired_block* free_block = pRec->retired_.current_block_->next_; + if ( free_block ) { + pRec->retired_.current_block_->next_ = nullptr; + while ( free_block ) { + retired_block* next = free_block->next_; + retired_allocator_.free( free_block ); + free_block = next; + --pRec->retired_.block_count_; + } + } + } + + pRec->m_idOwner.store( cds::OS::c_NullThreadId, atomics::memory_order_release ); + } + + namespace { + typedef std::vector> hp_vector; + + inline void copy_hazards( hp_vector& vect, guard const* arr, size_t size ) + { + for ( guard const* end = arr + size; arr != end; ++arr ) { + void* hp = arr->get(); + if ( hp ) + vect.push_back( hp ); + } + } + + inline size_t retire_data( hp_vector const& plist, retired_array& stg, retired_block* block, size_t block_size ) + { + auto hp_begin = plist.begin(); + auto hp_end = plist.end(); + size_t count = 0; + + for ( retired_ptr* p = block->first(), *end = p + block_size; p != end; ++p ) { + if ( cds_unlikely( std::binary_search( hp_begin, hp_end, p->m_p ))) + stg.safe_push( p ); + else { + p->free(); + ++count; + } + } + + return count; + } + + } // namespace + + CDS_EXPORT_API void smr::scan( thread_data* pThreadRec ) + { + thread_record* pRec = static_cast( pThreadRec ); + + hp_vector plist; + size_t plist_size = last_plist_size_.load( std::memory_order_relaxed ); + plist.reserve( plist_size ); + + // Stage 1: Scan HP list and insert non-null values in plist + thread_record* pNode = thread_list_.load( atomics::memory_order_acquire ); + while ( pNode ) { + if ( pNode->m_idOwner.load( std::memory_order_relaxed ) != cds::OS::c_NullThreadId ) { + copy_hazards( plist, pNode->hazards_.array_, pNode->hazards_.initial_capacity_ ); + + for ( guard_block* block = pNode->hazards_.extended_list_; block; block = block->next_ ) + copy_hazards( plist, block->first(), defaults::c_extended_guard_block_size ); + } + + pNode = pNode->m_pNextNode.load( atomics::memory_order_relaxed ); + } + + // Store plist size for next scan() call (vector reallocation optimization) + if ( plist.size() > plist_size ) + last_plist_size_.compare_exchange_weak( plist_size, plist.size(), std::memory_order_relaxed, std::memory_order_relaxed ); + + // Sort plist to simplify search in + std::sort( plist.begin(), plist.end() ); + + // Stage 2: Search plist + size_t free_count = 0; + retired_block* last_block = pRec->retired_.current_block_; + retired_ptr* last_block_cell = pRec->retired_.current_cell_; + + pRec->retired_.current_block_ = pRec->retired_.list_head_; + pRec->retired_.current_cell_ = pRec->retired_.current_block_->first(); + + for ( retired_block* block = pRec->retired_.list_head_; block; block = block->next_ ) { + bool const end_block = block == last_block; + size_t const size = end_block ? last_block_cell - block->first() : retired_block::c_capacity; + + free_count += retire_data( plist, pRec->retired_, block, size ); + + if ( end_block ) + break; + } + + // If the count of freed elements is too small, increase retired array + if ( free_count == 0 && last_block == pRec->retired_.list_tail_ && last_block_cell == last_block->last() ) + pRec->retired_.extend(); + } + + CDS_EXPORT_API void smr::help_scan( thread_data* pThis ) + { + assert( static_cast( pThis )->m_idOwner.load( atomics::memory_order_relaxed ) == cds::OS::get_current_thread_id() ); + + const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; + const cds::OS::ThreadId curThreadId = cds::OS::get_current_thread_id(); + for ( thread_record* hprec = thread_list_.load( atomics::memory_order_acquire ); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed ) ) + { + // If m_bFree == true then hprec->retired_ is empty - we don't need to see it + if ( hprec->m_bFree.load( atomics::memory_order_acquire ) ) { + assert( hprec->retired_.empty() ); + continue; + } + + // Owns hprec + // Several threads may work concurrently so we use atomic technique + { + cds::OS::ThreadId curOwner = hprec->m_idOwner.load( atomics::memory_order_relaxed ); + if ( curOwner == nullThreadId || !cds::OS::is_thread_alive( curOwner ) ) { + if ( !hprec->m_idOwner.compare_exchange_strong( curOwner, curThreadId, atomics::memory_order_acquire, atomics::memory_order_relaxed ) ) + continue; + } + else + continue; + } + + // We own the thread record successfully. Now, we can see whether it has retired pointers. + // If it has ones then we move to pThis that is private for current thread. + retired_array& src = hprec->retired_; + retired_array& dest = pThis->retired_; + + for ( retired_block* block = src.list_head_; block; block = block->next_ ) { + retired_ptr* last = block == src.current_block_ ? src.current_cell_ : block->last(); + for ( retired_ptr* p = block->first(); p != last; ++p ) { + if ( !dest.push( *p ) ) + scan( pThis ); + } + + if ( block == src.current_block_ ) + break; + } + + src.fini(); + hprec->m_bFree.store( true, atomics::memory_order_relaxed ); + hprec->m_idOwner.store( nullThreadId, atomics::memory_order_release ); + } + + scan( pThis ); + } + +}}} // namespace cds::gc::dhp diff --git a/src/dhp_gc.cpp b/src/dhp_gc.cpp deleted file mode 100644 index 0d08a550..00000000 --- a/src/dhp_gc.cpp +++ /dev/null @@ -1,289 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// Dynamic Hazard Pointer memory manager implementation - -#include // std::fill -#include // std::hash - -#include -#include - -namespace cds { namespace gc { namespace dhp { - - namespace details { - - class liberate_set { - typedef retired_ptr_node * item_type; - typedef cds::details::Allocator allocator_type; - - size_t const m_nBucketCount; - item_type * m_Buckets; - - item_type& bucket( retired_ptr_node& node ) const - { - return bucket( node.m_ptr.m_p ); - } - item_type& bucket( guard_data::guarded_ptr p ) const - { - return m_Buckets[ std::hash()( p ) & (m_nBucketCount - 1) ]; - } - - public: - liberate_set( size_t nBucketCount ) - : m_nBucketCount( nBucketCount ) - { - assert( nBucketCount > 0 ); - assert( (nBucketCount & (nBucketCount - 1)) == 0 ); - - m_Buckets = allocator_type().NewArray( nBucketCount ); - std::fill( m_Buckets, m_Buckets + nBucketCount, nullptr ); - } - - ~liberate_set() - { - allocator_type().Delete( m_Buckets, m_nBucketCount ); - } - - void insert( retired_ptr_node& node ) - { - node.m_pNext.store( nullptr, atomics::memory_order_relaxed ); - - item_type& refBucket = bucket( node ); - if ( refBucket ) { - item_type p = refBucket; - item_type prev = nullptr; - do { - if ( p->m_ptr.m_p >= node.m_ptr.m_p ) { - node.m_pNext.store( p, atomics::memory_order_relaxed ); - if ( prev ) - prev->m_pNext.store( &node, atomics::memory_order_relaxed ); - else - refBucket = &node; - return; - } - prev = p; - p = p->m_pNext.load(atomics::memory_order_relaxed); - } while ( p ); - - assert( prev != nullptr ); - prev->m_pNext.store( &node, atomics::memory_order_relaxed ); - } - else - refBucket = &node; - } - - struct erase_result - { - item_type head; - item_type tail; - size_t size; - - erase_result() - : head( nullptr ) - , tail( nullptr ) - , size(0) - {} - }; - - erase_result erase( guard_data::guarded_ptr ptr ) - { - item_type& refBucket = bucket( ptr ); - item_type p = refBucket; - item_type pPrev = nullptr; - - erase_result ret; - while ( p && p->m_ptr.m_p <= ptr ) { - if ( p->m_ptr.m_p == ptr ) { - if ( pPrev ) - pPrev->m_pNext.store( p->m_pNext.load(atomics::memory_order_relaxed ), atomics::memory_order_relaxed ); - else - refBucket = p->m_pNext.load(atomics::memory_order_relaxed); - - if ( ret.head ) - ret.tail->m_pNext.store( p, atomics::memory_order_relaxed ); - else - ret.head = p; - ret.tail = p; - ++ret.size; - } - else - pPrev = p; - p = p->m_pNext.load( atomics::memory_order_relaxed ); - } - - if ( ret.tail ) - ret.tail->m_pNext.store( nullptr, atomics::memory_order_relaxed ); - return ret; - } - - typedef std::pair list_range; - - list_range free_all() - { - item_type pTail = nullptr; - list_range ret = std::make_pair( pTail, pTail ); - - item_type const * pEndBucket = m_Buckets + m_nBucketCount; - for ( item_type * ppBucket = m_Buckets; ppBucket < pEndBucket; ++ppBucket ) { - item_type pBucket = *ppBucket; - if ( pBucket ) { - if ( ret.first ) - pTail->m_pNextFree.store( pBucket, atomics::memory_order_relaxed ); - else - ret.first = pBucket; - - pTail = pBucket; - for (;;) { - item_type pNext = pTail->m_pNext.load( atomics::memory_order_relaxed ); - pTail->m_ptr.free(); - pTail->m_pNext.store( nullptr, atomics::memory_order_relaxed ); - - /* - while ( pTail->m_pNextFree.load( atomics::memory_order_relaxed )) { - pTail = pTail->m_pNextFree.load( atomics::memory_order_relaxed ); - pTail->m_ptr.free(); - pTail->m_pNext.store( nullptr, atomics::memory_order_relaxed ); - } - */ - - if ( pNext ) { - pTail->m_pNextFree.store( pNext, atomics::memory_order_relaxed ); - pTail = pNext; - } - else - break; - } - } - } - - if ( pTail ) - pTail->m_pNextFree.store( nullptr, atomics::memory_order_relaxed ); - ret.second = pTail; - return ret; - } - }; - } - - GarbageCollector * GarbageCollector::m_pManager = nullptr; - - void CDS_STDCALL GarbageCollector::Construct( - size_t nLiberateThreshold - , size_t nInitialThreadGuardCount - , size_t nEpochCount - ) - { - if ( !m_pManager ) { - m_pManager = new GarbageCollector( nLiberateThreshold, nInitialThreadGuardCount, nEpochCount ); - } - } - - void CDS_STDCALL GarbageCollector::Destruct() - { - delete m_pManager; - m_pManager = nullptr; - } - - GarbageCollector::GarbageCollector( size_t nLiberateThreshold, size_t nInitialThreadGuardCount, size_t nEpochCount ) - : m_nLiberateThreshold( nLiberateThreshold ? nLiberateThreshold : 1024 ) - , m_nInitialThreadGuardCount( nInitialThreadGuardCount ? nInitialThreadGuardCount : 8 ) - , m_RetiredAllocator( static_cast( nEpochCount ? nEpochCount : 16 )) - , m_bStatEnabled( false ) - {} - - GarbageCollector::~GarbageCollector() - { - scan(); - } - - void GarbageCollector::scan() - { - details::retired_ptr_buffer::privatize_result retiredList = m_RetiredBuffer.privatize(); - if ( retiredList.first ) { - - size_t nLiberateThreshold = m_nLiberateThreshold.load(atomics::memory_order_relaxed); - details::liberate_set set( beans::ceil2( retiredList.second > nLiberateThreshold ? retiredList.second : nLiberateThreshold )); - - // Get list of retired pointers - size_t nRetiredCount = 0; - details::retired_ptr_node * pHead = retiredList.first; - while ( pHead ) { - details::retired_ptr_node * pNext = pHead->m_pNext.load( atomics::memory_order_relaxed ); - pHead->m_pNextFree.store( nullptr, atomics::memory_order_relaxed ); - set.insert( *pHead ); - pHead = pNext; - ++nRetiredCount; - } - - // Liberate cycle - - details::retired_ptr_node dummy; - dummy.m_pNext.store( nullptr, atomics::memory_order_relaxed ); - details::retired_ptr_node * pBusyLast = &dummy; - size_t nBusyCount = 0; - - for ( details::guard_data * pGuard = m_GuardPool.begin(); pGuard; pGuard = pGuard->pGlobalNext.load(atomics::memory_order_acquire)) - { - // get guarded pointer - details::guard_data::guarded_ptr valGuarded = pGuard->pPost.load(atomics::memory_order_acquire); - - if ( valGuarded ) { - auto retired = set.erase( valGuarded ); - if ( retired.head ) { - // Retired pointer is being guarded - // [retired.head, retired.tail] is the list linked by m_pNext field - - pBusyLast->m_pNext.store( retired.head, atomics::memory_order_relaxed ); - pBusyLast = retired.tail; - nBusyCount += retired.size; - } - } - } - - // Place [dummy.m_pNext, pBusyLast] back to m_RetiredBuffer - if ( nBusyCount ) - m_RetiredBuffer.push_list( dummy.m_pNext.load(atomics::memory_order_relaxed), pBusyLast, nBusyCount ); - - // Free all retired pointers - details::liberate_set::list_range range = set.free_all(); - - m_RetiredAllocator.inc_epoch(); - - if ( range.first ) { - assert( range.second != nullptr ); - m_RetiredAllocator.free_range( range.first, range.second ); - } - else if ( nRetiredCount >= nLiberateThreshold ) { - // scan() cycle did not free any retired pointer - double scan() threshold - m_nLiberateThreshold.compare_exchange_strong( nLiberateThreshold, nLiberateThreshold * 2, atomics::memory_order_release, atomics::memory_order_relaxed ); - } - } - } -}}} // namespace cds::gc::dhp diff --git a/src/dllmain.cpp b/src/dllmain.cpp index 3cc55b82..eff1fcc9 100644 --- a/src/dllmain.cpp +++ b/src/dllmain.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/src/hp.cpp b/src/hp.cpp new file mode 100644 index 00000000..897e119a --- /dev/null +++ b/src/hp.cpp @@ -0,0 +1,513 @@ +/* + This file is a part of libcds - Concurrent Data Structures library + + (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/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include + +#include +#include + +namespace cds { namespace gc { namespace hp { + + namespace { + void * default_alloc_memory( size_t size ) + { + return new uintptr_t[( size + sizeof( uintptr_t ) - 1 ) / sizeof( uintptr_t) ]; + } + + void default_free_memory( void* p ) + { + delete[] reinterpret_cast( p ); + } + + void* ( *s_alloc_memory )( size_t size ) = default_alloc_memory; + void ( *s_free_memory )( void* p ) = default_free_memory; + + template + class allocator + { + public: + typedef T value_type; + + allocator() {} + allocator( allocator const& ) {} + template + explicit allocator( allocator const& ) {} + + static T* allocate( size_t nCount ) + { + return reinterpret_cast( s_alloc_memory( sizeof( value_type ) * nCount ) ); + } + + static void deallocate( T* p, size_t /*nCount*/ ) + { + s_free_memory( reinterpret_cast( p ) ); + } + }; + + struct defaults { + static const size_t c_nHazardPointerPerThread = 8; + static const size_t c_nMaxThreadCount = 100; + }; + + size_t calc_retired_size( size_t nSize, size_t nHPCount, size_t nThreadCount ) + { + size_t const min_size = nHPCount * nThreadCount; + return nSize < min_size ? min_size * 2 : nSize; + } + + stat s_postmortem_stat; + } // namespace + + /*static*/ CDS_EXPORT_API smr* smr::instance_ = nullptr; + thread_local thread_data* tls_ = nullptr; + + /*static*/ CDS_EXPORT_API thread_data* smr::tls() + { + assert( tls_ != nullptr ); + return tls_; + } + + struct smr::thread_record: thread_data + { + atomics::atomic m_pNextNode; ///< next hazard ptr record in list + atomics::atomic m_idOwner; ///< Owner thread id; 0 - the record is free (not owned) + atomics::atomic m_bFree; ///< true if record is free (not owned) + + thread_record( guard* guards, size_t guard_count, retired_ptr* retired_arr, size_t retired_capacity ) + : thread_data( guards, guard_count, retired_arr, retired_capacity ) + , m_bFree( false ) + {} + }; + + /*static*/ CDS_EXPORT_API void smr::set_memory_allocator( + void* ( *alloc_func )( size_t size ), + void( *free_func )( void * p ) + ) + { + // The memory allocation functions may be set BEFORE initializing HP SMR!!! + assert( instance_ == nullptr ); + + s_alloc_memory = alloc_func; + s_free_memory = free_func; + } + + + /*static*/ CDS_EXPORT_API void smr::construct( size_t nHazardPtrCount, size_t nMaxThreadCount, size_t nMaxRetiredPtrCount, scan_type nScanType ) + { + if ( !instance_ ) { + instance_ = new( s_alloc_memory(sizeof(smr))) smr( nHazardPtrCount, nMaxThreadCount, nMaxRetiredPtrCount, nScanType ); + } + } + + /*static*/ CDS_EXPORT_API void smr::destruct( bool bDetachAll ) + { + if ( instance_ ) { + if ( bDetachAll ) + instance_->detach_all_thread(); + + instance_->~smr(); + s_free_memory( instance_ ); + instance_ = nullptr; + } + } + + CDS_EXPORT_API smr::smr( size_t nHazardPtrCount, size_t nMaxThreadCount, size_t nMaxRetiredPtrCount, scan_type nScanType ) + : thread_list_( nullptr ) + , hazard_ptr_count_( nHazardPtrCount == 0 ? defaults::c_nHazardPointerPerThread : nHazardPtrCount ) + , max_thread_count_( nMaxThreadCount == 0 ? defaults::c_nMaxThreadCount : nMaxThreadCount ) + , max_retired_ptr_count_( calc_retired_size( nMaxRetiredPtrCount, hazard_ptr_count_, max_thread_count_ )) + , scan_type_( nScanType ) + , scan_func_( nScanType == classic ? &smr::classic_scan : &smr::inplace_scan ) + {} + + CDS_EXPORT_API smr::~smr() + { + CDS_DEBUG_ONLY( const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; ) + CDS_DEBUG_ONLY( const cds::OS::ThreadId mainThreadId = cds::OS::get_current_thread_id();) + + CDS_HPSTAT( statistics( s_postmortem_stat )); + + thread_record* pHead = thread_list_.load( atomics::memory_order_relaxed ); + thread_list_.store( nullptr, atomics::memory_order_relaxed ); + + thread_record* pNext = nullptr; + for ( thread_record* hprec = pHead; hprec; hprec = pNext ) + { + assert( hprec->m_idOwner.load( atomics::memory_order_relaxed ) == nullThreadId + || hprec->m_idOwner.load( atomics::memory_order_relaxed ) == mainThreadId + || !cds::OS::is_thread_alive( hprec->m_idOwner.load( atomics::memory_order_relaxed ) ) + ); + + retired_array& arr = hprec->retired_; + for ( retired_ptr* cur{ arr.first() }, *last{ arr.last() }; cur != last; ++cur ) { + cur->free(); + CDS_HPSTAT( ++s_postmortem_stat.free_count ); + } + + arr.reset( 0 ); + pNext = hprec->m_pNextNode.load( atomics::memory_order_relaxed ); + hprec->m_bFree.store( true, atomics::memory_order_relaxed ); + destroy_thread_data( hprec ); + } + } + + + CDS_EXPORT_API smr::thread_record* smr::create_thread_data() + { + size_t const guard_array_size = thread_hp_storage::calc_array_size( get_hazard_ptr_count()); + size_t const retired_array_size = retired_array::calc_array_size( get_max_retired_ptr_count()); + size_t const nSize = sizeof( thread_record ) + guard_array_size + retired_array_size; + + /* + The memory is allocated by contnuous block + Memory layout: + +--------------------------+ + | | + | thread_record | + | hazards_ +---+ + +---| retired_ | | + | | | | + | |--------------------------| | + | | hazard_ptr[] |<--+ + | | | + | | | + | |--------------------------| + +-->| retired_ptr[] | + | | + | | + +--------------------------+ + */ + + char* mem = reinterpret_cast( s_alloc_memory( nSize )); + return new( mem ) thread_record( + reinterpret_cast( mem + sizeof( thread_record )), get_hazard_ptr_count(), + reinterpret_cast( mem + sizeof( thread_record ) + guard_array_size ), get_max_retired_ptr_count() + ); + } + + /*static*/ CDS_EXPORT_API void smr::destroy_thread_data( thread_record* pRec ) + { + // all retired pointers must be freed + assert( pRec->retired_.size() == 0 ); + + pRec->~thread_record(); + s_free_memory( pRec ); + } + + + CDS_EXPORT_API smr::thread_record* smr::alloc_thread_data() + { + //CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_AllocHPRec ) + + thread_record * hprec; + const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; + const cds::OS::ThreadId curThreadId = cds::OS::get_current_thread_id(); + + // First try to reuse a free (non-active) HP record + for ( hprec = thread_list_.load( atomics::memory_order_acquire ); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed ) ) { + cds::OS::ThreadId thId = nullThreadId; + if ( !hprec->m_idOwner.compare_exchange_strong( thId, curThreadId, atomics::memory_order_relaxed, atomics::memory_order_relaxed ) ) + continue; + hprec->m_bFree.store( false, atomics::memory_order_release ); + return hprec; + } + + // No HP records available for reuse + // Allocate and push a new HP record + hprec = create_thread_data(); + hprec->m_idOwner.store( curThreadId, atomics::memory_order_relaxed ); + + thread_record* pOldHead = thread_list_.load( atomics::memory_order_relaxed ); + do { + hprec->m_pNextNode.store( pOldHead, atomics::memory_order_relaxed ); + } while ( !thread_list_.compare_exchange_weak( pOldHead, hprec, atomics::memory_order_release, atomics::memory_order_acquire ) ); + + return hprec; + } + + CDS_EXPORT_API void smr::free_thread_data( smr::thread_record* pRec ) + { + assert( pRec != nullptr ); + //CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_RetireHPRec ) + + pRec->hazards_.clear(); + scan( pRec ); + help_scan( pRec ); + pRec->m_idOwner.store( cds::OS::c_NullThreadId, atomics::memory_order_release ); + } + + CDS_EXPORT_API void smr::detach_all_thread() + { + thread_record * pNext = nullptr; + const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; + + for ( thread_record * hprec = thread_list_.load( atomics::memory_order_relaxed ); hprec; hprec = pNext ) { + pNext = hprec->m_pNextNode.load( atomics::memory_order_relaxed ); + if ( hprec->m_idOwner.load( atomics::memory_order_relaxed ) != nullThreadId ) { + free_thread_data( hprec ); + } + } + } + + /*static*/ CDS_EXPORT_API void smr::attach_thread() + { + if ( !tls_ ) + tls_ = instance().alloc_thread_data(); + } + + /*static*/ CDS_EXPORT_API void smr::detach_thread() + { + thread_data* rec = tls_; + if ( rec ) { + tls_ = nullptr; + instance().free_thread_data( static_cast( rec )); + } + } + + + CDS_EXPORT_API void smr::inplace_scan( thread_data* pThreadRec ) + { + thread_record* pRec = static_cast( pThreadRec ); + + //CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_ScanCallCount ) + + // In-place scan algo uses LSB of retired ptr as a mark for internal purposes. + // It is correct if all retired pointers are ar least 2-byte aligned (LSB is zero). + // If it is wrong, we use classic scan algorithm + + // Check if all retired pointers has zero LSB + // LSB is used for marking pointers that cannot be deleted yet + retired_ptr* first_retired = pRec->retired_.first(); + retired_ptr* last_retired = pRec->retired_.last(); + if ( first_retired == last_retired ) + return; + + for ( auto it = first_retired; it != last_retired; ++it ) { + if ( it->m_n & 1 ) { + // found a pointer with LSB bit set - use classic_scan + classic_scan( pRec ); + return; + } + } + + CDS_HPSTAT( ++pRec->stat_.scan_count ); + + // Sort retired pointer array + std::sort( first_retired, last_retired, retired_ptr::less ); + + // Check double free +# ifdef _DEBUG + { + auto it = first_retired; + auto itPrev = it; + while ( ++it != last_retired ) { + assert( itPrev->m_p < it->m_p ); + itPrev = it; + } + } +# endif + + // Search guarded pointers in retired array + thread_record* pNode = thread_list_.load( atomics::memory_order_acquire ); + + { + retired_ptr dummy_retired; + while ( pNode ) { + if ( !pNode->m_bFree.load( atomics::memory_order_relaxed )) { + thread_hp_storage& hpstg = pNode->hazards_; + for ( size_t i = 0; i < hazard_ptr_count_; ++i ) { + pRec->sync(); + void * hptr = hpstg[i].get(); + if ( hptr ) { + dummy_retired.m_p = hptr; + retired_ptr* it = std::lower_bound( first_retired, last_retired, dummy_retired, retired_ptr::less ); + if ( it != last_retired && it->m_p == hptr ) { + // Mark retired pointer as guarded + it->m_n |= 1; + } + } + } + } + pNode = pNode->m_pNextNode.load( atomics::memory_order_relaxed ); + } + } + + // Move all marked pointers to head of array + { + retired_ptr* insert_pos = first_retired; + for ( retired_ptr* it = first_retired; it != last_retired; ++it ) { + if ( it->m_n & 1 ) { + it->m_n &= ~uintptr_t(1); + if ( insert_pos != it ) + *insert_pos = *it; + ++insert_pos; + } + else { + // Retired pointer may be freed + it->free(); + CDS_HPSTAT( ++pRec->stat_.free_count ); + } + } + const size_t nDeferred = insert_pos - first_retired; + pRec->retired_.reset( nDeferred ); + } + } + + // cppcheck-suppress functionConst + CDS_EXPORT_API void smr::classic_scan( thread_data* pThreadRec ) + { + thread_record* pRec = static_cast( pThreadRec ); + + CDS_HPSTAT( ++pRec->stat_.scan_count ); + + std::vector< void*, allocator> plist; + plist.reserve( get_max_thread_count() * get_hazard_ptr_count()); + assert( plist.size() == 0 ); + + // Stage 1: Scan HP list and insert non-null values in plist + + thread_record* pNode = thread_list_.load( atomics::memory_order_acquire ); + + while ( pNode ) { + for ( size_t i = 0; i < get_hazard_ptr_count(); ++i ) { + pRec->sync(); + void * hptr = pNode->hazards_[i].get(); + if ( hptr ) + plist.push_back( hptr ); + } + pNode = pNode->m_pNextNode.load( atomics::memory_order_relaxed ); + } + + // Sort plist to simplify search in + std::sort( plist.begin(), plist.end() ); + + // Stage 2: Search plist + retired_array& retired = pRec->retired_; + + retired_ptr* first_retired = retired.first(); + retired_ptr* last_retired = retired.last(); + + { + auto itBegin = plist.begin(); + auto itEnd = plist.end(); + retired_ptr* insert_pos = first_retired; + for ( retired_ptr* it = first_retired; it != last_retired; ++it ) { + if ( std::binary_search( itBegin, itEnd, first_retired->m_p ) ) { + if ( insert_pos != it ) + *insert_pos = *it; + ++insert_pos; + } + else { + it->free(); + CDS_HPSTAT( ++pRec->stat_.free_count ); + } + } + + retired.reset( insert_pos - first_retired ); + + //CDS_HAZARDPTR_STATISTIC( m_Stat.m_DeferredNode += nDeferredCount ) + //CDS_HAZARDPTR_STATISTIC( m_Stat.m_DeletedNode += ( itRetiredEnd - arrRetired.begin() ) - nDeferredCount ) + } + } + + CDS_EXPORT_API void smr::help_scan( thread_data* pThis ) + { + assert( static_cast( pThis )->m_idOwner.load( atomics::memory_order_relaxed ) == cds::OS::get_current_thread_id() ); + + CDS_HPSTAT( ++pThis->stat_.help_scan_count ); + + const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; + const cds::OS::ThreadId curThreadId = cds::OS::get_current_thread_id(); + for ( thread_record* hprec = thread_list_.load( atomics::memory_order_acquire ); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed )) + { + // If m_bFree == true then hprec->retired_ is empty - we don't need to see it + if ( hprec->m_bFree.load( atomics::memory_order_acquire )) + continue; + + // Owns hprec if it is empty. + // Several threads may work concurrently so we use atomic technique only. + { + cds::OS::ThreadId curOwner = hprec->m_idOwner.load( atomics::memory_order_relaxed ); + if ( curOwner == nullThreadId || !cds::OS::is_thread_alive( curOwner ) ) { + if ( !hprec->m_idOwner.compare_exchange_strong( curOwner, curThreadId, atomics::memory_order_acquire, atomics::memory_order_relaxed ) ) + continue; + } + else + continue; + } + + // We own the thread record successfully. Now, we can see whether it has retired pointers. + // If it has ones then we move to pThis that is private for current thread. + retired_array& src = hprec->retired_; + retired_array& dest = pThis->retired_; + assert( !dest.full() ); + + retired_ptr* src_first = src.first(); + retired_ptr* src_last = src.last(); + + for ( ; src_first != src_last; ++src_first ) { + if ( !dest.push( std::move( *src_first ))) + scan( pThis ); + } + + src.reset( 0 ); + + hprec->m_bFree.store( true, atomics::memory_order_relaxed ); + hprec->m_idOwner.store( nullThreadId, atomics::memory_order_release ); + + scan( pThis ); + } + } + + void smr::statistics( stat& st ) + { + st.clear(); +# ifdef CDS_ENABLE_HPSTAT + for ( thread_record* hprec = thread_list_.load( atomics::memory_order_acquire ); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed ) ) + { + ++st.thread_rec_count; + st.guard_allocated += hprec->hazards_.alloc_guard_count_; + st.guard_freed += hprec->hazards_.free_guard_count_; + st.retired_count += hprec->retired_.retire_call_count_; + st.free_count += hprec->stat_.free_count; + st.scan_count += hprec->stat_.scan_count; + st.help_scan_count += hprec->stat_.help_scan_count; + } +# endif + } + +}}} // namespace cds::gc::hp + +/*static*/ cds::gc::HP::stat const& cds::gc::HP::postmortem_statistics() +{ + return cds::gc::hp::s_postmortem_stat; +} + diff --git a/src/hp_const.h b/src/hp_const.h index 25ae8a20..6bf6ee0e 100644 --- a/src/hp_const.h +++ b/src/hp_const.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/src/hp_gc.cpp b/src/hp_gc.cpp deleted file mode 100644 index cb70f8da..00000000 --- a/src/hp_gc.cpp +++ /dev/null @@ -1,427 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - File: hzp_gc.cpp - - Hazard Pointers memory reclamation strategy implementation - - Editions: - 2008.02.10 Maxim.Khiszinsky Created -*/ - -#include - -#include // std::sort -#include "hp_const.h" - -#define CDS_HAZARDPTR_STATISTIC( _x ) if ( m_bStatEnabled ) { _x; } - -namespace cds { namespace gc { - namespace hp { - - /// Max array size of retired pointers - static const size_t c_nMaxRetireNodeCount = c_nHazardPointerPerThread * c_nMaxThreadCount * 2; - - GarbageCollector * GarbageCollector::m_pHZPManager = nullptr; - - void CDS_STDCALL GarbageCollector::Construct( size_t nHazardPtrCount, size_t nMaxThreadCount, size_t nMaxRetiredPtrCount, scan_type nScanType ) - { - if ( !m_pHZPManager ) { - m_pHZPManager = new GarbageCollector( nHazardPtrCount, nMaxThreadCount, nMaxRetiredPtrCount, nScanType ); - } - } - - void CDS_STDCALL GarbageCollector::Destruct( bool bDetachAll ) - { - if ( m_pHZPManager ) { - if ( bDetachAll ) - m_pHZPManager->detachAllThread(); - - delete m_pHZPManager; - m_pHZPManager = nullptr; - } - } - - GarbageCollector::GarbageCollector( - size_t nHazardPtrCount, - size_t nMaxThreadCount, - size_t nMaxRetiredPtrCount, - scan_type nScanType - ) - : m_pListHead( nullptr ) - ,m_bStatEnabled( false ) - ,m_nHazardPointerCount( nHazardPtrCount == 0 ? c_nHazardPointerPerThread : nHazardPtrCount ) - ,m_nMaxThreadCount( nMaxThreadCount == 0 ? c_nMaxThreadCount : nMaxThreadCount ) - ,m_nMaxRetiredPtrCount( nMaxRetiredPtrCount > c_nMaxRetireNodeCount ? nMaxRetiredPtrCount : c_nMaxRetireNodeCount ) - ,m_nScanType( nScanType ) - {} - - GarbageCollector::~GarbageCollector() - { - CDS_DEBUG_ONLY( const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; ) - CDS_DEBUG_ONLY( const cds::OS::ThreadId mainThreadId = cds::OS::get_current_thread_id() ;) - - hplist_node * pHead = m_pListHead.load( atomics::memory_order_relaxed ); - m_pListHead.store( nullptr, atomics::memory_order_relaxed ); - - hplist_node * pNext = nullptr; - for ( hplist_node * hprec = pHead; hprec; hprec = pNext ) { - assert( hprec->m_idOwner.load( atomics::memory_order_relaxed ) == nullThreadId - || hprec->m_idOwner.load( atomics::memory_order_relaxed ) == mainThreadId - || !cds::OS::is_thread_alive( hprec->m_idOwner.load( atomics::memory_order_relaxed )) - ); - details::retired_vector& vect = hprec->m_arrRetired; - details::retired_vector::iterator itRetired = vect.begin(); - details::retired_vector::iterator itRetiredEnd = vect.end(); - while ( itRetired != itRetiredEnd ) { - itRetired->free(); - ++itRetired; - } - vect.clear(); - pNext = hprec->m_pNextNode.load( atomics::memory_order_relaxed ); - hprec->m_bFree.store( true, atomics::memory_order_relaxed ); - DeleteHPRec( hprec ); - } - } - - inline GarbageCollector::hplist_node * GarbageCollector::NewHPRec( OS::ThreadId owner ) - { - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_AllocNewHPRec ) - return new hplist_node( *this, owner ); - } - - inline void GarbageCollector::DeleteHPRec( hplist_node * pNode ) - { - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_DeleteHPRec ) - assert( pNode->m_arrRetired.size() == 0 ); - delete pNode; - } - - details::hp_record * GarbageCollector::alloc_hp_record() - { - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_AllocHPRec ) - - hplist_node * hprec; - const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; - const cds::OS::ThreadId curThreadId = cds::OS::get_current_thread_id(); - - // First try to reuse a retired (non-active) HP record - for ( hprec = m_pListHead.load( atomics::memory_order_relaxed ); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed )) { - cds::OS::ThreadId thId = nullThreadId; - if ( !hprec->m_idOwner.compare_exchange_strong( thId, curThreadId, atomics::memory_order_acquire, atomics::memory_order_relaxed )) - continue; - hprec->m_bFree.store( false, atomics::memory_order_relaxed ); - return hprec; - } - - // No HP records available for reuse - // Allocate and push a new HP record - hprec = NewHPRec( curThreadId ); - - hplist_node * pOldHead = m_pListHead.load( atomics::memory_order_relaxed ); - do { - hprec->m_pNextNode.store( pOldHead, atomics::memory_order_relaxed ); - } while ( !m_pListHead.compare_exchange_weak( pOldHead, hprec, atomics::memory_order_acq_rel, atomics::memory_order_acquire )); - - return hprec; - } - - void GarbageCollector::free_hp_record( details::hp_record * pRec ) - { - assert( pRec != nullptr ); - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_RetireHPRec ) - - pRec->clear(); - Scan( pRec ); - HelpScan( pRec ); - hplist_node * pNode = static_cast( pRec ); - pNode->m_idOwner.store( cds::OS::c_NullThreadId, atomics::memory_order_release ); - } - - void GarbageCollector::detachAllThread() - { - hplist_node * pNext = nullptr; - const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; - for ( hplist_node * hprec = m_pListHead.load(atomics::memory_order_relaxed); hprec; hprec = pNext ) { - pNext = hprec->m_pNextNode.load( atomics::memory_order_relaxed ); - if ( hprec->m_idOwner.load(atomics::memory_order_relaxed) != nullThreadId ) { - free_hp_record( hprec ); - } - } - } - - void GarbageCollector::classic_scan( details::hp_record * pRec ) - { - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_ScanCallCount ) - - std::vector< void * > plist; - plist.reserve( m_nMaxThreadCount * m_nHazardPointerCount ); - assert( plist.size() == 0 ); - - // Stage 1: Scan HP list and insert non-null values in plist - - hplist_node * pNode = m_pListHead.load(atomics::memory_order_relaxed); - - while ( pNode ) { - for ( size_t i = 0; i < m_nHazardPointerCount; ++i ) { - pRec->sync(); - void * hptr = pNode->m_hzp[i].get(); - if ( hptr ) - plist.push_back( hptr ); - } - pNode = pNode->m_pNextNode.load( atomics::memory_order_relaxed ); - } - - // Sort plist to simplify search in - std::sort( plist.begin(), plist.end()); - - // Stage 2: Search plist - details::retired_vector& arrRetired = pRec->m_arrRetired; - - details::retired_vector::iterator itRetired = arrRetired.begin(); - details::retired_vector::iterator itRetiredEnd = arrRetired.end(); - // arrRetired is not a std::vector! - // clear() is just set up item counter to 0, the items is not destroyed - arrRetired.clear(); - - { - std::vector< void * >::iterator itBegin = plist.begin(); - std::vector< void * >::iterator itEnd = plist.end(); - size_t nDeferredCount = 0; - while ( itRetired != itRetiredEnd ) { - if ( std::binary_search( itBegin, itEnd, itRetired->m_p )) { - arrRetired.push( *itRetired ); - ++nDeferredCount; - } - else - itRetired->free(); - ++itRetired; - } - CDS_HAZARDPTR_STATISTIC( m_Stat.m_DeferredNode += nDeferredCount ) - CDS_HAZARDPTR_STATISTIC( m_Stat.m_DeletedNode += (itRetiredEnd - arrRetired.begin()) - nDeferredCount ) - } - } - - void GarbageCollector::inplace_scan( details::hp_record * pRec ) - { - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_ScanCallCount ) - - // In-place scan algo uses LSB of retired ptr as a mark for internal purposes. - // It is correct if all retired pointers are ar least 2-byte aligned (LSB is zero). - // If it is wrong, we use classic scan algorithm - - // Check if all retired pointers has zero LSB - // LSB is used for marking pointers that cannot be deleted yet - details::retired_vector::iterator itRetired = pRec->m_arrRetired.begin(); - details::retired_vector::iterator itRetiredEnd = pRec->m_arrRetired.end(); - for ( auto it = itRetired; it != itRetiredEnd; ++it ) { - if ( it->m_n & 1 ) { - // found a pointer with LSB bit set - use classic_scan - classic_scan( pRec ); - return; - } - } - - // Sort retired pointer array - std::sort( itRetired, itRetiredEnd, cds::gc::details::retired_ptr::less ); - - // Check double free - /* - { - auto it = itRetired; - auto itPrev = it; - while ( ++it != itRetiredEnd ) { - if ( it->m_p == itPrev->m_p ) - throw std::runtime_error( "Double free" ); - itPrev = it; - } - } - */ - - // Search guarded pointers in retired array - hplist_node * pNode = m_pListHead.load( atomics::memory_order_relaxed ); - - { - details::retired_ptr dummyRetired; - while ( pNode ) { - if ( !pNode->m_bFree.load( atomics::memory_order_relaxed )) { - for ( size_t i = 0; i < m_nHazardPointerCount; ++i ) { - pRec->sync(); - void * hptr = pNode->m_hzp[i].get(); - if ( hptr ) { - dummyRetired.m_p = hptr; - details::retired_vector::iterator it = std::lower_bound( itRetired, itRetiredEnd, dummyRetired, cds::gc::details::retired_ptr::less ); - if ( it != itRetiredEnd && it->m_p == hptr ) { - // Mark retired pointer as guarded - it->m_n |= 1; - } - } - } - } - pNode = pNode->m_pNextNode.load( atomics::memory_order_relaxed ); - } - } - - // Move all marked pointers to head of array - { - auto itInsert = itRetired; - for ( auto it = itRetired; it != itRetiredEnd; ++it ) { - if ( it->m_n & 1 ) { - it->m_n &= ~1; - if ( itInsert != it ) - *itInsert = *it; - ++itInsert; - } - else { - // Retired pointer may be freed - it->free(); - } - } - const size_t nDeferred = itInsert - itRetired; - pRec->m_arrRetired.size( nDeferred ); - CDS_HAZARDPTR_STATISTIC( m_Stat.m_DeferredNode += nDeferred ) - CDS_HAZARDPTR_STATISTIC( m_Stat.m_DeletedNode += (itRetiredEnd - itRetired) - nDeferred ) - } - } - - void GarbageCollector::HelpScan( details::hp_record * pThis ) - { - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_HelpScanCallCount ) - - assert( static_cast(pThis)->m_idOwner.load(atomics::memory_order_relaxed) == cds::OS::get_current_thread_id()); - - const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; - const cds::OS::ThreadId curThreadId = cds::OS::get_current_thread_id(); - for ( hplist_node * hprec = m_pListHead.load(atomics::memory_order_relaxed); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed )) { - - // If m_bFree == true then hprec->m_arrRetired is empty - we don't need to see it - if ( hprec->m_bFree.load(atomics::memory_order_relaxed)) - continue; - - // Owns hprec if it is empty. - // Several threads may work concurrently so we use atomic technique only. - { - cds::OS::ThreadId curOwner = hprec->m_idOwner.load(atomics::memory_order_relaxed); - if ( curOwner == nullThreadId || !cds::OS::is_thread_alive( curOwner ) ) { - if ( !hprec->m_idOwner.compare_exchange_strong( curOwner, curThreadId, atomics::memory_order_acquire, atomics::memory_order_relaxed ) ) - continue; - } - else - continue; - //else { - // curOwner = nullThreadId; - // if ( !hprec->m_idOwner.compare_exchange_strong( curOwner, curThreadId, atomics::memory_order_acquire, atomics::memory_order_relaxed )) - // continue; - //} - } - - // We own the thread successfully. Now, we can see whether hp_record has retired pointers. - // If it has ones then we move to pThis that is private for current thread. - details::retired_vector& src = hprec->m_arrRetired; - details::retired_vector& dest = pThis->m_arrRetired; - assert( !dest.isFull()); - details::retired_vector::iterator itRetired = src.begin(); - - // TSan can issue a warning here: - // read src.m_nSize in src.end() - // write src.m_nSize in src.clear() - // This is false positive since we own hprec - CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN; - details::retired_vector::iterator itRetiredEnd = src.end(); - CDS_TSAN_ANNOTATE_IGNORE_READS_END; - - while ( itRetired != itRetiredEnd ) { - dest.push( *itRetired ); - if ( dest.isFull()) { - CDS_HAZARDPTR_STATISTIC( ++m_Stat.m_CallScanFromHelpScan ) - Scan( pThis ); - } - ++itRetired; - } - - // TSan: write src.m_nSize, see a comment above - CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN; - src.clear(); - CDS_TSAN_ANNOTATE_IGNORE_WRITES_END; - - hprec->m_bFree.store(true, atomics::memory_order_relaxed); - hprec->m_idOwner.store( nullThreadId, atomics::memory_order_release ); - - Scan( pThis ); - } - } - - GarbageCollector::InternalState& GarbageCollector::getInternalState( GarbageCollector::InternalState& stat) const - { - stat.nHPCount = m_nHazardPointerCount; - stat.nMaxThreadCount = m_nMaxThreadCount; - stat.nMaxRetiredPtrCount = m_nMaxRetiredPtrCount; - stat.nHPRecSize = sizeof( hplist_node ) - + sizeof(details::retired_ptr) * m_nMaxRetiredPtrCount; - - stat.nHPRecAllocated = - stat.nHPRecUsed = - stat.nTotalRetiredPtrCount = - stat.nRetiredPtrInFreeHPRecs = 0; - - for ( hplist_node * hprec = m_pListHead.load(atomics::memory_order_relaxed); hprec; hprec = hprec->m_pNextNode.load( atomics::memory_order_relaxed )) { - ++stat.nHPRecAllocated; - stat.nTotalRetiredPtrCount += hprec->m_arrRetired.size(); - - if ( hprec->m_bFree.load(atomics::memory_order_relaxed)) { - // Free HP record - stat.nRetiredPtrInFreeHPRecs += hprec->m_arrRetired.size(); - } - else { - // Used HP record - ++stat.nHPRecUsed; - } - } - - // Events - stat.evcAllocHPRec = m_Stat.m_AllocHPRec; - stat.evcRetireHPRec = m_Stat.m_RetireHPRec; - stat.evcAllocNewHPRec= m_Stat.m_AllocNewHPRec; - stat.evcDeleteHPRec = m_Stat.m_DeleteHPRec; - - stat.evcScanCall = m_Stat.m_ScanCallCount; - stat.evcHelpScanCall = m_Stat.m_HelpScanCallCount; - stat.evcScanFromHelpScan= m_Stat.m_CallScanFromHelpScan; - - stat.evcDeletedNode = m_Stat.m_DeletedNode; - stat.evcDeferredNode = m_Stat.m_DeferredNode; - - return stat; - } - - - } //namespace hp -}} // namespace cds::gc diff --git a/src/init.cpp b/src/init.cpp index 9ac5fd9e..7e324eaf 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -49,9 +49,6 @@ namespace cds { - CDS_EXPORT_API atomics::atomic threading::ThreadData::s_nLastUsedProcNo(0); - CDS_EXPORT_API size_t threading::ThreadData::s_nProcCount = 1; - #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS CDS_EXPORT_API DWORD cds::threading::wintls::Manager::Holder::m_key = TLS_OUT_OF_INDEXES; # if CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL diff --git a/src/michael_heap.cpp b/src/michael_heap.cpp deleted file mode 100644 index ca6edd1f..00000000 --- a/src/michael_heap.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - Michael allocator implementation - Source: - [2004] Maged Michael "Scalable Lock-Free Dynamic Memory Allocation" - - Editions: - 2011.01.30 khizmax Created -*/ - -#include - -#ifdef _DEBUG -//# include -#endif - -namespace cds { namespace memory { namespace michael { - - CDS_DATA_ALIGNMENT(128) unsigned int const default_sizeclass_selector::m_szClassBounds[default_sizeclass_selector::c_nSizeClassCount] = { - /* 0*/ 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256, // 15 (step 16) 64K superblock size - /*15*/ 320, 384, 448, // 3 (step 64) 64K superblock size - /*18*/ 512, 576, 640, 704, 768, 832, 896, 960, 1024, // 9 (step 64) 1M superblock size - /*27*/ 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, // 12 (step 256) 1M superblock size - /*39*/ 5120, 6144, 7168, 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, 16384, // 12 (step 1K) 1M superblock size - /*51*/ 20480, 24576, 28672, 32768, 36864, 40960, 45056, 49152, // 12 (step 4K) 1M superblock size - 53248, 57344, 61440, 65536 - }; - - size_class const default_sizeclass_selector::m_szClass[default_sizeclass_selector::c_nSizeClassCount] = { - // 64K superblock - { m_szClassBounds[ 0], c_nPage64K, c_nPage64K / m_szClassBounds[ 0], 0 }, - { m_szClassBounds[ 1], c_nPage64K, c_nPage64K / m_szClassBounds[ 1], 0 }, - { m_szClassBounds[ 2], c_nPage64K, c_nPage64K / m_szClassBounds[ 2], 0 }, - { m_szClassBounds[ 3], c_nPage64K, c_nPage64K / m_szClassBounds[ 3], 0 }, - { m_szClassBounds[ 4], c_nPage64K, c_nPage64K / m_szClassBounds[ 4], 0 }, - { m_szClassBounds[ 5], c_nPage64K, c_nPage64K / m_szClassBounds[ 5], 0 }, - { m_szClassBounds[ 6], c_nPage64K, c_nPage64K / m_szClassBounds[ 6], 0 }, - { m_szClassBounds[ 7], c_nPage64K, c_nPage64K / m_szClassBounds[ 7], 0 }, - { m_szClassBounds[ 8], c_nPage64K, c_nPage64K / m_szClassBounds[ 8], 0 }, - { m_szClassBounds[ 9], c_nPage64K, c_nPage64K / m_szClassBounds[ 9], 0 }, - { m_szClassBounds[10], c_nPage64K, c_nPage64K / m_szClassBounds[10], 0 }, - { m_szClassBounds[11], c_nPage64K, c_nPage64K / m_szClassBounds[11], 0 }, - { m_szClassBounds[12], c_nPage64K, c_nPage64K / m_szClassBounds[12], 0 }, - { m_szClassBounds[13], c_nPage64K, c_nPage64K / m_szClassBounds[13], 0 }, - { m_szClassBounds[14], c_nPage64K, c_nPage64K / m_szClassBounds[14], 0 }, - { m_szClassBounds[15], c_nPage64K, c_nPage64K / m_szClassBounds[15], 0 }, - { m_szClassBounds[16], c_nPage64K, c_nPage64K / m_szClassBounds[16], 0 }, - { m_szClassBounds[17], c_nPage64K, c_nPage64K / m_szClassBounds[17], 0 }, - // 1M superblock - { m_szClassBounds[18], c_nPage1M, c_nPage1M / m_szClassBounds[18], 1 }, - { m_szClassBounds[19], c_nPage1M, c_nPage1M / m_szClassBounds[19], 1 }, - { m_szClassBounds[20], c_nPage1M, c_nPage1M / m_szClassBounds[20], 1 }, - { m_szClassBounds[21], c_nPage1M, c_nPage1M / m_szClassBounds[21], 1 }, - { m_szClassBounds[22], c_nPage1M, c_nPage1M / m_szClassBounds[22], 1 }, - { m_szClassBounds[23], c_nPage1M, c_nPage1M / m_szClassBounds[23], 1 }, - { m_szClassBounds[24], c_nPage1M, c_nPage1M / m_szClassBounds[24], 1 }, - { m_szClassBounds[25], c_nPage1M, c_nPage1M / m_szClassBounds[25], 1 }, - { m_szClassBounds[26], c_nPage1M, c_nPage1M / m_szClassBounds[26], 1 }, - // 1M superblock, step 256 - { m_szClassBounds[27], c_nPage1M, c_nPage1M / m_szClassBounds[27], 1 }, - { m_szClassBounds[28], c_nPage1M, c_nPage1M / m_szClassBounds[28], 1 }, - { m_szClassBounds[29], c_nPage1M, c_nPage1M / m_szClassBounds[29], 1 }, - { m_szClassBounds[30], c_nPage1M, c_nPage1M / m_szClassBounds[30], 1 }, - { m_szClassBounds[31], c_nPage1M, c_nPage1M / m_szClassBounds[31], 1 }, - { m_szClassBounds[32], c_nPage1M, c_nPage1M / m_szClassBounds[32], 1 }, - { m_szClassBounds[33], c_nPage1M, c_nPage1M / m_szClassBounds[33], 1 }, - { m_szClassBounds[34], c_nPage1M, c_nPage1M / m_szClassBounds[34], 1 }, - { m_szClassBounds[35], c_nPage1M, c_nPage1M / m_szClassBounds[35], 1 }, - { m_szClassBounds[36], c_nPage1M, c_nPage1M / m_szClassBounds[36], 1 }, - { m_szClassBounds[37], c_nPage1M, c_nPage1M / m_szClassBounds[37], 1 }, - { m_szClassBounds[38], c_nPage1M, c_nPage1M / m_szClassBounds[38], 1 }, - // 1M superblock, step 1024 - { m_szClassBounds[39], c_nPage1M, c_nPage1M / m_szClassBounds[39], 1 }, - { m_szClassBounds[40], c_nPage1M, c_nPage1M / m_szClassBounds[40], 1 }, - { m_szClassBounds[41], c_nPage1M, c_nPage1M / m_szClassBounds[41], 1 }, - { m_szClassBounds[42], c_nPage1M, c_nPage1M / m_szClassBounds[42], 1 }, - { m_szClassBounds[43], c_nPage1M, c_nPage1M / m_szClassBounds[43], 1 }, - { m_szClassBounds[44], c_nPage1M, c_nPage1M / m_szClassBounds[44], 1 }, - { m_szClassBounds[45], c_nPage1M, c_nPage1M / m_szClassBounds[45], 1 }, - { m_szClassBounds[46], c_nPage1M, c_nPage1M / m_szClassBounds[46], 1 }, - { m_szClassBounds[47], c_nPage1M, c_nPage1M / m_szClassBounds[47], 1 }, - { m_szClassBounds[48], c_nPage1M, c_nPage1M / m_szClassBounds[48], 1 }, - { m_szClassBounds[49], c_nPage1M, c_nPage1M / m_szClassBounds[49], 1 }, - { m_szClassBounds[50], c_nPage1M, c_nPage1M / m_szClassBounds[50], 1 }, - // 1M superblock, step 4K - { m_szClassBounds[51], c_nPage1M, c_nPage1M / m_szClassBounds[51], 1 }, - { m_szClassBounds[52], c_nPage1M, c_nPage1M / m_szClassBounds[52], 1 }, - { m_szClassBounds[53], c_nPage1M, c_nPage1M / m_szClassBounds[53], 1 }, - { m_szClassBounds[54], c_nPage1M, c_nPage1M / m_szClassBounds[54], 1 }, - { m_szClassBounds[55], c_nPage1M, c_nPage1M / m_szClassBounds[55], 1 }, - { m_szClassBounds[56], c_nPage1M, c_nPage1M / m_szClassBounds[56], 1 }, - { m_szClassBounds[57], c_nPage1M, c_nPage1M / m_szClassBounds[57], 1 }, - { m_szClassBounds[58], c_nPage1M, c_nPage1M / m_szClassBounds[58], 1 }, - { m_szClassBounds[59], c_nPage1M, c_nPage1M / m_szClassBounds[59], 1 }, - { m_szClassBounds[60], c_nPage1M, c_nPage1M / m_szClassBounds[60], 1 }, - { m_szClassBounds[61], c_nPage1M, c_nPage1M / m_szClassBounds[61], 1 }, - { m_szClassBounds[62], c_nPage1M, c_nPage1M / m_szClassBounds[62], 1 }, - }; - -#ifdef _DEBUG - default_sizeclass_selector::default_sizeclass_selector() - { - for ( size_t i = 0; i < sizeof(m_szClass) / sizeof(m_szClass[0]); ++i ) - assert( m_szClass[i].nCapacity == m_szClass[i].nSBSize / m_szClass[i].nBlockSize ); - /* - // Calculate m_szClassMap - size_t nSzClass = 0; - for ( size_t i = 0; i <= 65536; i+= 16) { - if ( i > m_szClassBounds[nSzClass] ) - ++nSzClass; - std::cout << nSzClass << ", "; - } - std::cout << std::endl; - throw std::exception() ; // stop execution - */ - } -#endif - - unsigned char const default_sizeclass_selector::m_szClassMap[] = { - 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 16, 16, - 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, - 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, - 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62 - }; -}}} // namespace cds::memory::michael diff --git a/src/thread_data.cpp b/src/thread_data.cpp new file mode 100644 index 00000000..1a45b09e --- /dev/null +++ b/src/thread_data.cpp @@ -0,0 +1,99 @@ +/* + This file is a part of libcds - Concurrent Data Structures library + + (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/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include + +namespace cds { namespace threading { + + CDS_EXPORT_API atomics::atomic ThreadData::s_nLastUsedProcNo( 0 ); + CDS_EXPORT_API size_t ThreadData::s_nProcCount = 1; + + CDS_EXPORT_API void ThreadData::init() + { + if ( m_nAttachCount++ == 0 ) { + if ( cds::gc::HP::isUsed() ) + cds::gc::hp::smr::attach_thread(); + if ( cds::gc::DHP::isUsed() ) + cds::gc::dhp::smr::attach_thread(); + + if ( cds::urcu::details::singleton::isUsed() ) + m_pGPIRCU = cds::urcu::details::singleton::attach_thread(); + if ( cds::urcu::details::singleton::isUsed() ) + m_pGPBRCU = cds::urcu::details::singleton::attach_thread(); + if ( cds::urcu::details::singleton::isUsed() ) + m_pGPTRCU = cds::urcu::details::singleton::attach_thread(); +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + if ( cds::urcu::details::singleton::isUsed() ) + m_pSHBRCU = cds::urcu::details::singleton::attach_thread(); + if ( cds::urcu::details::singleton::isUsed() ) + m_pSHTRCU = cds::urcu::details::singleton::attach_thread(); +#endif + } + } + + CDS_EXPORT_API bool ThreadData::fini() + { + if ( --m_nAttachCount == 0 ) { + if ( cds::gc::DHP::isUsed() ) + cds::gc::dhp::smr::detach_thread(); + if ( cds::gc::HP::isUsed() ) + cds::gc::hp::smr::detach_thread(); + + if ( cds::urcu::details::singleton::isUsed() ) { + cds::urcu::details::singleton::detach_thread( m_pGPIRCU ); + m_pGPIRCU = nullptr; + } + if ( cds::urcu::details::singleton::isUsed() ) { + cds::urcu::details::singleton::detach_thread( m_pGPBRCU ); + m_pGPBRCU = nullptr; + } + if ( cds::urcu::details::singleton::isUsed() ) { + cds::urcu::details::singleton::detach_thread( m_pGPTRCU ); + m_pGPTRCU = nullptr; + } +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + if ( cds::urcu::details::singleton::isUsed() ) { + cds::urcu::details::singleton::detach_thread( m_pSHBRCU ); + m_pSHBRCU = nullptr; + } + if ( cds::urcu::details::singleton::isUsed() ) { + cds::urcu::details::singleton::detach_thread( m_pSHTRCU ); + m_pSHTRCU = nullptr; + } +#endif + return true; + } + return false; + } + + +}} // namespace cds::threading diff --git a/src/topology_hpux.cpp b/src/topology_hpux.cpp index bd09f0d1..ac52f7f1 100644 --- a/src/topology_hpux.cpp +++ b/src/topology_hpux.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/src/topology_linux.cpp b/src/topology_linux.cpp index 6da24a33..a37e51e9 100644 --- a/src/topology_linux.cpp +++ b/src/topology_linux.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/src/topology_osx.cpp b/src/topology_osx.cpp index d22145ea..5b4b21a8 100644 --- a/src/topology_osx.cpp +++ b/src/topology_osx.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/src/urcu_gp.cpp b/src/urcu_gp.cpp index 5b290111..07fcc226 100644 --- a/src/urcu_gp.cpp +++ b/src/urcu_gp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/src/urcu_sh.cpp b/src/urcu_sh.cpp index 111fdbd1..368008f9 100644 --- a/src/urcu_sh.cpp +++ b/src/urcu_sh.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/check_size.h b/test/include/cds_test/check_size.h index c72feb00..326ef986 100644 --- a/test/include/cds_test/check_size.h +++ b/test/include/cds_test/check_size.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/fc_hevy_value.h b/test/include/cds_test/fc_hevy_value.h new file mode 100644 index 00000000..ba3fc266 --- /dev/null +++ b/test/include/cds_test/fc_hevy_value.h @@ -0,0 +1,70 @@ +/* + * fc_hevy_value.h + * + * Created on: 31 авг. 2016 г. + * Author: marsel + */ + +#ifndef SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEAVY_VALUE_H_ +#define SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEAVY_VALUE_H_ + +#include +#include + +namespace fc_test { + + // SFINAE test + template + class has_set_array_size { + typedef char small; + class big{char dummy[2];}; + + template class SFINAE {}; + + template static small test( SFINAE * ) ; + template static big test(...); + + public: + static constexpr bool value = sizeof(test(0)) == sizeof(char) ; + }; + + template + struct heavy_value { + + int value; + + size_t nNo; + size_t nWriterNo; + + static std::vector pop_buff; + static size_t buffer_size; + + explicit heavy_value(int new_value = 0) + : value(new_value), + nNo(0), + nWriterNo(0) + { + }; + heavy_value(const heavy_value &other) + : value(other.value), + nNo(other.nNo), + nWriterNo(other.nWriterNo) + { + for(size_t i = 0; i < buffer_size; ++i) + pop_buff[i] = static_cast(std::sqrt(other.pop_buff[i]*rand())); + } + void set_array(size_t new_size) { + set_array_size(new_size); + } + static void set_array_size(size_t new_size){ + if (buffer_size == new_size) return; + buffer_size = new_size; + pop_buff.resize(buffer_size, rand()); + } + }; + template + std::vector heavy_value< DefaultSize >::pop_buff(DefaultSize, rand()); + template + std::vector::size_type heavy_value< DefaultSize >::buffer_size = DefaultSize; +} +#endif /* SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEVY_VALUE_H_ */ diff --git a/test/include/cds_test/fixture.h b/test/include/cds_test/fixture.h index 0aefacc2..6705770e 100644 --- a/test/include/cds_test/fixture.h +++ b/test/include/cds_test/fixture.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/hash_func.h b/test/include/cds_test/hash_func.h index 22d67d3d..d731cac3 100644 --- a/test/include/cds_test/hash_func.h +++ b/test/include/cds_test/hash_func.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_bronson_avltree_out.h b/test/include/cds_test/stat_bronson_avltree_out.h index 4b4ef762..1e444e28 100644 --- a/test/include/cds_test/stat_bronson_avltree_out.h +++ b/test/include/cds_test/stat_bronson_avltree_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_cuckoo_out.h b/test/include/cds_test/stat_cuckoo_out.h index 021f3ce8..46cdeb34 100644 --- a/test/include/cds_test/stat_cuckoo_out.h +++ b/test/include/cds_test/stat_cuckoo_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_ellenbintree_out.h b/test/include/cds_test/stat_ellenbintree_out.h index b81cd157..ce79f5f6 100644 --- a/test/include/cds_test/stat_ellenbintree_out.h +++ b/test/include/cds_test/stat_ellenbintree_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_feldman_hashset_out.h b/test/include/cds_test/stat_feldman_hashset_out.h index 5fc11fb6..f2317f0b 100644 --- a/test/include/cds_test/stat_feldman_hashset_out.h +++ b/test/include/cds_test/stat_feldman_hashset_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_flat_combining_out.h b/test/include/cds_test/stat_flat_combining_out.h index ef0404d2..d9ace9ba 100644 --- a/test/include/cds_test/stat_flat_combining_out.h +++ b/test/include/cds_test/stat_flat_combining_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_iterable_list_out.h b/test/include/cds_test/stat_iterable_list_out.h index 692b7e55..49d4b694 100644 --- a/test/include/cds_test/stat_iterable_list_out.h +++ b/test/include/cds_test/stat_iterable_list_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_lazy_list_out.h b/test/include/cds_test/stat_lazy_list_out.h index c1e54e98..33b479fe 100644 --- a/test/include/cds_test/stat_lazy_list_out.h +++ b/test/include/cds_test/stat_lazy_list_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_michael_list_out.h b/test/include/cds_test/stat_michael_list_out.h index b1bd95bd..bca40a7f 100644 --- a/test/include/cds_test/stat_michael_list_out.h +++ b/test/include/cds_test/stat_michael_list_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_skiplist_out.h b/test/include/cds_test/stat_skiplist_out.h index d263130a..d867127a 100644 --- a/test/include/cds_test/stat_skiplist_out.h +++ b/test/include/cds_test/stat_skiplist_out.h @@ -1,7 +1,7 @@ /* 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/ @@ -75,13 +75,10 @@ namespace cds_test { << CDSSTRESS_STAT_OUT( s, m_nFindSlowFailed ) << CDSSTRESS_STAT_OUT( s, m_nRenewInsertPosition ) << CDSSTRESS_STAT_OUT( s, m_nLogicDeleteWhileInsert ) - << CDSSTRESS_STAT_OUT( s, m_nEraseWhileInsert ) - << CDSSTRESS_STAT_OUT( s, m_nNotFoundWhileInsert ) + << CDSSTRESS_STAT_OUT( s, m_nRemoveWhileInsert ) << CDSSTRESS_STAT_OUT( s, m_nFastErase ) - << CDSSTRESS_STAT_OUT( s, m_nFastEraseHelped ) << CDSSTRESS_STAT_OUT( s, m_nSlowErase ) << CDSSTRESS_STAT_OUT( s, m_nFastExtract ) - << CDSSTRESS_STAT_OUT( s, m_nFastExtractHelped ) << CDSSTRESS_STAT_OUT( s, m_nSlowExtract ) << CDSSTRESS_STAT_OUT( s, m_nEraseWhileFind ) << CDSSTRESS_STAT_OUT( s, m_nExtractWhileFind ) diff --git a/test/include/cds_test/stat_splitlist_out.h b/test/include/cds_test/stat_splitlist_out.h index d08084ec..e1b5044f 100644 --- a/test/include/cds_test/stat_splitlist_out.h +++ b/test/include/cds_test/stat_splitlist_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stat_sync_monitor_out.h b/test/include/cds_test/stat_sync_monitor_out.h index b108b9e5..3abc1ac4 100644 --- a/test/include/cds_test/stat_sync_monitor_out.h +++ b/test/include/cds_test/stat_sync_monitor_out.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/stress_test.h b/test/include/cds_test/stress_test.h index c6f49008..a739a4b4 100644 --- a/test/include/cds_test/stress_test.h +++ b/test/include/cds_test/stress_test.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/include/cds_test/thread.h b/test/include/cds_test/thread.h index a56987ad..fe9e925e 100644 --- a/test/include/cds_test/thread.h +++ b/test/include/cds_test/thread.h @@ -1,7 +1,7 @@ /* 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/ @@ -192,7 +192,7 @@ namespace cds_test { // Create threads std::vector< std::thread > threads; - threads.reserve( m_workers.size() ); + threads.reserve( m_workers.size()); for ( auto w : m_workers ) threads.emplace_back( &thread::run, w ); diff --git a/test/stress/CMakeLists.txt b/test/stress/CMakeLists.txt index 7aa703dc..036d71c4 100644 --- a/test/stress/CMakeLists.txt +++ b/test/stress/CMakeLists.txt @@ -4,7 +4,6 @@ set(CDSSTRESS_FRAMEWORK_SOURCES framework/city.cpp framework/config.cpp framework/ellen_bintree_update_desc_pool.cpp - framework/michael_alloc.cpp framework/stress_test.cpp ) diff --git a/test/stress/data/test-debug.conf b/test/stress/data/test-debug.conf index 9c57b513..d1b19626 100644 --- a/test/stress/data/test-debug.conf +++ b/test/stress/data/test-debug.conf @@ -1,12 +1,12 @@ [General] # HZP scan strategy, possible values are "classic", "inplace". Default is "classic" -HZP_scan_strategy=inplace +hp_scan_strategy=inplace hazard_pointer_count=72 +#hp_max_thread_count=32 +#hp_retired_ptr_count=256 # cds::gc::DHP initialization parameters -dhp_liberate_threshold=1024 dhp_init_guard_count=8 -dhp_epoch_count=16 # cds::urcu::gc initialization parameters rcu_buffer_size=256 @@ -62,6 +62,8 @@ SegmentedQueue_SegmentSize=64 ProducerCount=3 ConsumerCount=3 QueueSize=100000 +# HeavyValueSize - size of value for flat cobining containers, default 100 +# HeavyValueSize=100 # SegmentedQueue parameters: # SegmentedQueue_Iterate: # 1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize diff --git a/test/stress/data/test-express-x86.conf b/test/stress/data/test-express-x86.conf index 8362345b..f87e6e39 100644 --- a/test/stress/data/test-express-x86.conf +++ b/test/stress/data/test-express-x86.conf @@ -1,13 +1,13 @@ [General] # HZP scan strategy, possible values are "classic", "inplace". Default is "classic" -HZP_scan_strategy=inplace +hp_scan_strategy=inplace # Hazard pointer count per thread, for gc::HP hazard_pointer_count=72 +#hp_max_thread_count=32 +#hp_retired_ptr_count=256 # cds::gc::DHP initialization parameters -dhp_liberate_threshold=1024 dhp_init_guard_count=16 -dhp_epoch_count=16 # cds::urcu::gc initialization parameters rcu_buffer_size=256 diff --git a/test/stress/data/test-express.conf b/test/stress/data/test-express.conf index 559b893f..7f29c24c 100644 --- a/test/stress/data/test-express.conf +++ b/test/stress/data/test-express.conf @@ -1,13 +1,13 @@ [General] -# HZP scan strategy, possible values are "classic", "inplace". Default is "classic" -HZP_scan_strategy=inplace +# HP scan strategy, possible values are "classic", "inplace". Default is "classic" +hp_scan_strategy=inplace # Hazard pointer count per thread, for gc::HP hazard_pointer_count=72 +#hp_max_thread_count=32 +#hp_retired_ptr_count=256 # cds::gc::DHP initialization parameters -dhp_liberate_threshold=1024 dhp_init_guard_count=16 -dhp_epoch_count=16 # cds::urcu::gc initialization parameters rcu_buffer_size=256 diff --git a/test/stress/data/test.conf b/test/stress/data/test.conf index bc3ec554..35449f8e 100644 --- a/test/stress/data/test.conf +++ b/test/stress/data/test.conf @@ -1,12 +1,12 @@ [General] # HZP scan strategy, possible values are "classic", "inplace". Default is "classic" -HZP_scan_strategy=inplace +hp_scan_strategy=inplace hazard_pointer_count=72 +#hp_max_thread_count=32 +#hp_retired_ptr_count=256 # cds::gc::DHP initialization parameters -dhp_liberate_threshold=1024 dhp_init_guard_count=16 -dhp_epoch_count=16 # cds::urcu::gc initialization parameters rcu_buffer_size=256 @@ -62,6 +62,8 @@ SegmentedQueue_SegmentSize=256 ConsumerCount=4 ProducerCount=4 QueueSize=5000000 +# HeavyValueSize - size of value for flat cobining containers, default 100 +# HeavyValueSize=100 # SegmentedQueue parameters: # SegmentedQueue_Iterate: # 1 - run test iteratively for segment size from 4 up to SegmentedQueue_SegmentSize diff --git a/test/stress/framework/config.cpp b/test/stress/framework/config.cpp index e1933890..b0ad4e75 100644 --- a/test/stress/framework/config.cpp +++ b/test/stress/framework/config.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/framework/ellen_bintree_update_desc_pool.cpp b/test/stress/framework/ellen_bintree_update_desc_pool.cpp index 4cac4047..6cc2bceb 100644 --- a/test/stress/framework/ellen_bintree_update_desc_pool.cpp +++ b/test/stress/framework/ellen_bintree_update_desc_pool.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/framework/ellen_bintree_update_desc_pool.h b/test/stress/framework/ellen_bintree_update_desc_pool.h index ba55758b..f4bd92b6 100644 --- a/test/stress/framework/ellen_bintree_update_desc_pool.h +++ b/test/stress/framework/ellen_bintree_update_desc_pool.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/framework/michael_alloc.cpp b/test/stress/framework/michael_alloc.cpp deleted file mode 100644 index 8154a7ff..00000000 --- a/test/stress/framework/michael_alloc.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "michael_alloc.h" - -namespace memory { - michael_heap s_MichaelHeap; -} diff --git a/test/stress/framework/michael_alloc.h b/test/stress/framework/michael_alloc.h deleted file mode 100644 index 6d506e04..00000000 --- a/test/stress/framework/michael_alloc.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016 - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CDSSTRESS_MICHAEL_ALLOC_H -#define CDSSTRESS_MICHAEL_ALLOC_H - -#include -#include - -namespace memory { - - typedef cds::memory::michael::Heap< - cds::memory::michael::opt::check_bounds< cds::memory::michael::debug_bound_checking > - > michael_heap; - extern michael_heap s_MichaelHeap; - - template - class MichaelAllocator - { - typedef std::allocator std_allocator; - public: - // Declare typedefs from std::allocator - typedef typename std_allocator::const_pointer const_pointer; - typedef typename std_allocator::pointer pointer; - typedef typename std_allocator::const_reference const_reference; - typedef typename std_allocator::reference reference; - typedef typename std_allocator::difference_type difference_type; - typedef typename std_allocator::size_type size_type; - typedef typename std_allocator::value_type value_type; - - // Allocation function - pointer allocate( size_type _Count, const void* /*_Hint*/ = nullptr ) - { - return reinterpret_cast( s_MichaelHeap.alloc( sizeof(T) * _Count )); - } - - // Deallocation function - void deallocate( pointer _Ptr, size_type /*_Count*/ ) - { - s_MichaelHeap.free( _Ptr ); - } - - pointer address( reference r ) const - { - return &r; - } - const_pointer address( const_reference r ) const - { - return &r; - } - void construct( pointer p, const T& val ) - { - return new( p ) T( val ); - } - void destroy( pointer p ) - { - p->T::~T(); - } - - // Rebinding allocator to other type - template - struct rebind { - typedef MichaelAllocator other; - }; - }; -} // namespace memory - -#endif // #ifndef CDSSTRESS_MICHAEL_ALLOC_H diff --git a/test/stress/framework/stress_test.cpp b/test/stress/framework/stress_test.cpp index 22090792..1497cc7d 100644 --- a/test/stress/framework/stress_test.cpp +++ b/test/stress/framework/stress_test.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/freelist/put_get.cpp b/test/stress/freelist/put_get.cpp index 59f6878a..368162c8 100644 --- a/test/stress/freelist/put_get.cpp +++ b/test/stress/freelist/put_get.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/freelist/put_get_single.cpp b/test/stress/freelist/put_get_single.cpp index bfca817f..2ac23b9c 100644 --- a/test/stress/freelist/put_get_single.cpp +++ b/test/stress/freelist/put_get_single.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/main.cpp b/test/stress/main.cpp index 82ddec81..0c7acd83 100644 --- a/test/stress/main.cpp +++ b/test/stress/main.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -58,13 +58,15 @@ int main( int argc, char **argv ) cds_test::config const& general_cfg = cds_test::stress_fixture::get_config( "General" ); // Init SMR - cds::gc::HP hzpGC( general_cfg.get_size_t( "hazard_pointer_count", 16 )); - hzpGC.setScanType( general_cfg.get( "HZP_scan_strategy", "inplace" ) == "inplace" ? cds::gc::HP::scan_type::inplace : cds::gc::HP::scan_type::classic ); + cds::gc::HP hzpGC( + general_cfg.get_size_t( "hazard_pointer_count", 16 ), + general_cfg.get_size_t( "hp_max_thread_count", 0 ), + general_cfg.get_size_t( "hp_retired_ptr_count", 0 ), + general_cfg.get( "hp_scan_strategy", "inplace" ) == "inplace" ? cds::gc::HP::scan_type::inplace : cds::gc::HP::scan_type::classic + ); cds::gc::DHP dhpGC( - general_cfg.get_size_t( "dhp_liberate_threshold", 1024 ), - general_cfg.get_size_t( "dhp_init_guard_count", 16 ), - general_cfg.get_size_t( "dhp_epoch_count", 16 ) + general_cfg.get_size_t( "dhp_init_guard_count", 16 ) ); #ifdef CDSUNIT_USE_URCU diff --git a/test/stress/map/delodd/map_delodd.cpp b/test/stress/map/delodd/map_delodd.cpp index 7cc7fdfd..bd9d9855 100644 --- a/test/stress/map/delodd/map_delodd.cpp +++ b/test/stress/map/delodd/map_delodd.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -46,7 +46,7 @@ namespace map { size_t Map_DelOdd::s_nFeldmanMap_HeadBits = 10; size_t Map_DelOdd::s_nFeldmanMap_ArrayBits = 4; - + size_t Map_DelOdd::s_nLoadFactor = 1; std::vector Map_DelOdd::m_arrElements; @@ -95,7 +95,7 @@ namespace map { m_arrElements.resize( s_nMapSize ); for ( size_t i = 0; i < s_nMapSize; ++i ) m_arrElements[i] = i;; - shuffle( m_arrElements.begin(), m_arrElements.end() ); + shuffle( m_arrElements.begin(), m_arrElements.end()); } void Map_DelOdd::TearDownTestCase() diff --git a/test/stress/map/delodd/map_delodd.h b/test/stress/map/delodd/map_delodd.h index 98d33fd6..f4db078d 100644 --- a/test/stress/map/delodd/map_delodd.h +++ b/test/stress/map/delodd/map_delodd.h @@ -1,7 +1,7 @@ /* 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/ @@ -29,6 +29,7 @@ */ #include "map_type.h" +#include namespace map { @@ -139,13 +140,13 @@ namespace map { template static void prepare_array( std::vector& arr, Pred pred ) { - arr.reserve( m_arrElements.size() ); + arr.reserve( m_arrElements.size()); for ( auto el : m_arrElements ) { - if ( pred( el ) ) + if ( pred( el )) arr.push_back( el ); } - arr.resize( arr.size() ); - shuffle( arr.begin(), arr.end() ); + arr.resize( arr.size()); + shuffle( arr.begin(), arr.end()); } protected: @@ -189,7 +190,7 @@ namespace map { { prepare_array( m_arr, []( size_t ) -> bool { return true; } ); for ( size_t i = 0; i < m_arr.size(); ++i ) { - if ( m_Map.insert( key_type( m_arr[i], id() ) ) ) + if ( m_Map.insert( key_type( m_arr[i], id()))) ++m_nInsertInitSuccess; else ++m_nInsertInitFailed; @@ -236,7 +237,7 @@ namespace map { // insert pass for ( auto el : m_arr ) { if ( el & 1 ) { - if ( rMap.insert( key_type( el, id() ))) + if ( rMap.insert( key_type( el, id()))) ++m_nInsertSuccess; else ++m_nInsertFailed; @@ -249,7 +250,7 @@ namespace map { if ( el & 1 ) { bool success; bool inserted; - std::tie( success, inserted ) = rMap.update( key_type( el, id() ), f ); + std::tie( success, inserted ) = rMap.update( key_type( el, id()), f ); if ( success && inserted ) ++m_nInsertSuccess; else @@ -355,7 +356,7 @@ namespace map { else { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( auto el: m_arr ) { - if ( rMap.erase( key_type( el, k ) ) ) + if ( rMap.erase( key_type( el, k ))) ++m_nDeleteSuccess; else ++m_nDeleteFailed; @@ -430,7 +431,7 @@ namespace map { else { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( auto el: m_arr ) { - gp = rMap.extract( key_type( el, k ) ); + gp = rMap.extract( key_type( el, k )); if ( gp ) ++m_nDeleteSuccess; else @@ -496,14 +497,14 @@ namespace map { for ( auto el: m_arr ) { if ( Map::c_bExtractLockExternal ) { typename Map::rcu_lock l; - xp = rMap.extract( key_type( el, k ) ); + xp = rMap.extract( key_type( el, k )); if ( xp ) ++m_nDeleteSuccess; else ++m_nDeleteFailed; } else { - xp = rMap.extract( key_type( el, k ) ); + xp = rMap.extract( key_type( el, k )); if ( xp ) ++m_nDeleteSuccess; else @@ -518,14 +519,14 @@ namespace map { for ( size_t k = 0; k < nInsThreadCount; ++k ) { if ( Map::c_bExtractLockExternal ) { typename Map::rcu_lock l; - xp = rMap.extract( key_type( el, k ) ); + xp = rMap.extract( key_type( el, k )); if ( xp ) ++m_nDeleteSuccess; else ++m_nDeleteFailed; } else { - xp = rMap.extract( key_type( el, k ) ); + xp = rMap.extract( key_type( el, k )); if ( xp ) ++m_nDeleteSuccess; else @@ -641,7 +642,7 @@ namespace map { for ( size_t i = 0; i < pool.size(); ++i ) { cds_test::thread& thr = pool.get( i ); - switch ( thr.type() ) { + switch ( thr.type()) { case inserter_thread: { insert_thread& inserter = static_cast( thr ); diff --git a/test/stress/map/delodd/map_delodd_bronsonavltree.cpp b/test/stress/map/delodd/map_delodd_bronsonavltree.cpp index 1255f23a..ec1ffe03 100644 --- a/test/stress/map/delodd/map_delodd_bronsonavltree.cpp +++ b/test/stress/map/delodd/map_delodd_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/delodd/map_delodd_cuckoo.cpp b/test/stress/map/delodd/map_delodd_cuckoo.cpp index b7f8a297..a0ee5cd4 100644 --- a/test/stress/map/delodd/map_delodd_cuckoo.cpp +++ b/test/stress/map/delodd/map_delodd_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/delodd/map_delodd_ellentree.cpp b/test/stress/map/delodd/map_delodd_ellentree.cpp index fc4f25aa..91707858 100644 --- a/test/stress/map/delodd/map_delodd_ellentree.cpp +++ b/test/stress/map/delodd/map_delodd_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/delodd/map_delodd_feldman_hashmap.cpp b/test/stress/map/delodd/map_delodd_feldman_hashmap.cpp index dcb1d79f..aa2a5fac 100644 --- a/test/stress/map/delodd/map_delodd_feldman_hashmap.cpp +++ b/test/stress/map/delodd/map_delodd_feldman_hashmap.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/delodd/map_delodd_michael.cpp b/test/stress/map/delodd/map_delodd_michael.cpp index a5ddb9b4..49d3f435 100644 --- a/test/stress/map/delodd/map_delodd_michael.cpp +++ b/test/stress/map/delodd/map_delodd_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/delodd/map_delodd_skip.cpp b/test/stress/map/delodd/map_delodd_skip.cpp index 888296a7..139dc366 100644 --- a/test/stress/map/delodd/map_delodd_skip.cpp +++ b/test/stress/map/delodd/map_delodd_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/delodd/map_delodd_split.cpp b/test/stress/map/delodd/map_delodd_split.cpp index 63f75cb8..8553b279 100644 --- a/test/stress/map/delodd/map_delodd_split.cpp +++ b/test/stress/map/delodd/map_delodd_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int.cpp b/test/stress/map/find_int/map_find_int.cpp index e0f40496..dfc516a8 100644 --- a/test/stress/map/find_int/map_find_int.cpp +++ b/test/stress/map/find_int/map_find_int.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int.h b/test/stress/map/find_int/map_find_int.h index ab8a9ed8..7ea84980 100644 --- a/test/stress/map/find_int/map_find_int.h +++ b/test/stress/map/find_int/map_find_int.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_bronsonavltree.cpp b/test/stress/map/find_int/map_find_int_bronsonavltree.cpp index 1e3b40fd..58d80206 100644 --- a/test/stress/map/find_int/map_find_int_bronsonavltree.cpp +++ b/test/stress/map/find_int/map_find_int_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_cuckoo.cpp b/test/stress/map/find_int/map_find_int_cuckoo.cpp index 88e44a2d..446afab2 100644 --- a/test/stress/map/find_int/map_find_int_cuckoo.cpp +++ b/test/stress/map/find_int/map_find_int_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_ellentree.cpp b/test/stress/map/find_int/map_find_int_ellentree.cpp index c84f1794..319965bd 100644 --- a/test/stress/map/find_int/map_find_int_ellentree.cpp +++ b/test/stress/map/find_int/map_find_int_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_feldman_hashset.cpp b/test/stress/map/find_int/map_find_int_feldman_hashset.cpp index ba000b07..311e67da 100644 --- a/test/stress/map/find_int/map_find_int_feldman_hashset.cpp +++ b/test/stress/map/find_int/map_find_int_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_michael.cpp b/test/stress/map/find_int/map_find_int_michael.cpp index 3cdcf4e1..05317c54 100644 --- a/test/stress/map/find_int/map_find_int_michael.cpp +++ b/test/stress/map/find_int/map_find_int_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_skip.cpp b/test/stress/map/find_int/map_find_int_skip.cpp index 5b118bf8..8aac30b7 100644 --- a/test/stress/map/find_int/map_find_int_skip.cpp +++ b/test/stress/map/find_int/map_find_int_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_split.cpp b/test/stress/map/find_int/map_find_int_split.cpp index b5b4e168..bbbe1d1f 100644 --- a/test/stress/map/find_int/map_find_int_split.cpp +++ b/test/stress/map/find_int/map_find_int_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_std.cpp b/test/stress/map/find_int/map_find_int_std.cpp index 492c7728..94307d64 100644 --- a/test/stress/map/find_int/map_find_int_std.cpp +++ b/test/stress/map/find_int/map_find_int_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_int/map_find_int_striped.cpp b/test/stress/map/find_int/map_find_int_striped.cpp index ecf7f6b5..e4a462ce 100644 --- a/test/stress/map/find_int/map_find_int_striped.cpp +++ b/test/stress/map/find_int/map_find_int_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string.cpp b/test/stress/map/find_string/map_find_string.cpp index 27bff50d..adac0a30 100644 --- a/test/stress/map/find_string/map_find_string.cpp +++ b/test/stress/map/find_string/map_find_string.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string.h b/test/stress/map/find_string/map_find_string.h index cfa04626..81f543c6 100644 --- a/test/stress/map/find_string/map_find_string.h +++ b/test/stress/map/find_string/map_find_string.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_bronsonavltree.cpp b/test/stress/map/find_string/map_find_string_bronsonavltree.cpp index 6e388813..fe18050f 100644 --- a/test/stress/map/find_string/map_find_string_bronsonavltree.cpp +++ b/test/stress/map/find_string/map_find_string_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_cuckoo.cpp b/test/stress/map/find_string/map_find_string_cuckoo.cpp index 873f164d..f605563e 100644 --- a/test/stress/map/find_string/map_find_string_cuckoo.cpp +++ b/test/stress/map/find_string/map_find_string_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_ellentree.cpp b/test/stress/map/find_string/map_find_string_ellentree.cpp index 690ab3c5..9cd3da26 100644 --- a/test/stress/map/find_string/map_find_string_ellentree.cpp +++ b/test/stress/map/find_string/map_find_string_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_feldman_hashset.cpp b/test/stress/map/find_string/map_find_string_feldman_hashset.cpp index a9bc0ac1..84b370e3 100644 --- a/test/stress/map/find_string/map_find_string_feldman_hashset.cpp +++ b/test/stress/map/find_string/map_find_string_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_michael.cpp b/test/stress/map/find_string/map_find_string_michael.cpp index 9c00f56e..b649f374 100644 --- a/test/stress/map/find_string/map_find_string_michael.cpp +++ b/test/stress/map/find_string/map_find_string_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_skip.cpp b/test/stress/map/find_string/map_find_string_skip.cpp index bb62559c..e790568a 100644 --- a/test/stress/map/find_string/map_find_string_skip.cpp +++ b/test/stress/map/find_string/map_find_string_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_split.cpp b/test/stress/map/find_string/map_find_string_split.cpp index 65f78171..b90be379 100644 --- a/test/stress/map/find_string/map_find_string_split.cpp +++ b/test/stress/map/find_string/map_find_string_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_std.cpp b/test/stress/map/find_string/map_find_string_std.cpp index 3121e5eb..51caae96 100644 --- a/test/stress/map/find_string/map_find_string_std.cpp +++ b/test/stress/map/find_string/map_find_string_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/find_string/map_find_string_striped.cpp b/test/stress/map/find_string/map_find_string_striped.cpp index 17a32d88..5859e334 100644 --- a/test/stress/map/find_string/map_find_string_striped.cpp +++ b/test/stress/map/find_string/map_find_string_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func.cpp b/test/stress/map/insdel_func/map_insdel_func.cpp index 6227d342..5d357432 100644 --- a/test/stress/map/insdel_func/map_insdel_func.cpp +++ b/test/stress/map/insdel_func/map_insdel_func.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func.h b/test/stress/map/insdel_func/map_insdel_func.h index 66e3a949..b2605ca5 100644 --- a/test/stress/map/insdel_func/map_insdel_func.h +++ b/test/stress/map/insdel_func/map_insdel_func.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_bronsonavltree.cpp b/test/stress/map/insdel_func/map_insdel_func_bronsonavltree.cpp index b4bd59cb..6643b99c 100644 --- a/test/stress/map/insdel_func/map_insdel_func_bronsonavltree.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_cuckoo.cpp b/test/stress/map/insdel_func/map_insdel_func_cuckoo.cpp index b017c16c..aa94c779 100644 --- a/test/stress/map/insdel_func/map_insdel_func_cuckoo.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_ellentree.cpp b/test/stress/map/insdel_func/map_insdel_func_ellentree.cpp index befebbd8..b2047bc3 100644 --- a/test/stress/map/insdel_func/map_insdel_func_ellentree.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_feldman_hashset.cpp b/test/stress/map/insdel_func/map_insdel_func_feldman_hashset.cpp index b14045ca..d5ed79cc 100644 --- a/test/stress/map/insdel_func/map_insdel_func_feldman_hashset.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_michael.cpp b/test/stress/map/insdel_func/map_insdel_func_michael.cpp index 4ed6b595..a425fa39 100644 --- a/test/stress/map/insdel_func/map_insdel_func_michael.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_skip.cpp b/test/stress/map/insdel_func/map_insdel_func_skip.cpp index 63a3464a..fe49cc95 100644 --- a/test/stress/map/insdel_func/map_insdel_func_skip.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_split.cpp b/test/stress/map/insdel_func/map_insdel_func_split.cpp index 173b4590..a4d68357 100644 --- a/test/stress/map/insdel_func/map_insdel_func_split.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_func/map_insdel_func_striped.cpp b/test/stress/map/insdel_func/map_insdel_func_striped.cpp index f9f34888..93a35ce1 100644 --- a/test/stress/map/insdel_func/map_insdel_func_striped.cpp +++ b/test/stress/map/insdel_func/map_insdel_func_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int.cpp b/test/stress/map/insdel_int/map_insdel_int.cpp index 020a70a0..09117613 100644 --- a/test/stress/map/insdel_int/map_insdel_int.cpp +++ b/test/stress/map/insdel_int/map_insdel_int.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int.h b/test/stress/map/insdel_int/map_insdel_int.h index fc1d88f1..d757021c 100644 --- a/test/stress/map/insdel_int/map_insdel_int.h +++ b/test/stress/map/insdel_int/map_insdel_int.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_bronsonavltree.cpp b/test/stress/map/insdel_int/map_insdel_int_bronsonavltree.cpp index 203c1b08..b28326d1 100644 --- a/test/stress/map/insdel_int/map_insdel_int_bronsonavltree.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_cuckoo.cpp b/test/stress/map/insdel_int/map_insdel_int_cuckoo.cpp index ad87eb2d..a3af5a65 100644 --- a/test/stress/map/insdel_int/map_insdel_int_cuckoo.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_ellentree.cpp b/test/stress/map/insdel_int/map_insdel_int_ellentree.cpp index ff0510e4..231494b0 100644 --- a/test/stress/map/insdel_int/map_insdel_int_ellentree.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_feldman_hashset.cpp b/test/stress/map/insdel_int/map_insdel_int_feldman_hashset.cpp index ba8d7dc0..144e2e47 100644 --- a/test/stress/map/insdel_int/map_insdel_int_feldman_hashset.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_michael.cpp b/test/stress/map/insdel_int/map_insdel_int_michael.cpp index 6bec2dcf..d5b222fd 100644 --- a/test/stress/map/insdel_int/map_insdel_int_michael.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_skip.cpp b/test/stress/map/insdel_int/map_insdel_int_skip.cpp index d853a7e9..f6ef14ca 100644 --- a/test/stress/map/insdel_int/map_insdel_int_skip.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_split.cpp b/test/stress/map/insdel_int/map_insdel_int_split.cpp index 98bf823f..14098680 100644 --- a/test/stress/map/insdel_int/map_insdel_int_split.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_std.cpp b/test/stress/map/insdel_int/map_insdel_int_std.cpp index 05d26ed7..2a925b4f 100644 --- a/test/stress/map/insdel_int/map_insdel_int_std.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_int/map_insdel_int_striped.cpp b/test/stress/map/insdel_int/map_insdel_int_striped.cpp index 0746e3a1..1c72b5a8 100644 --- a/test/stress/map/insdel_int/map_insdel_int_striped.cpp +++ b/test/stress/map/insdel_int/map_insdel_int_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int.cpp index a42f2e9d..75456429 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int.h b/test/stress/map/insdel_item_int/map_insdel_item_int.h index 5e750002..26da8034 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int.h +++ b/test/stress/map/insdel_item_int/map_insdel_item_int.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_bronsonavltree.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_bronsonavltree.cpp index 3386304c..f4feb938 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_bronsonavltree.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_cuckoo.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_cuckoo.cpp index 61bc8c48..2e5f81ab 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_cuckoo.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_ellentree.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_ellentree.cpp index fd0bd203..66571e25 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_ellentree.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_feldman_hashset.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_feldman_hashset.cpp index 05f81d62..b07bbb5e 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_feldman_hashset.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_michael.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_michael.cpp index c40bde52..87ed4232 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_michael.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_skip.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_skip.cpp index 537f9378..f6a17a6a 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_skip.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_split.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_split.cpp index 930f124f..5acacc91 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_split.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_item_int/map_insdel_item_int_striped.cpp b/test/stress/map/insdel_item_int/map_insdel_item_int_striped.cpp index caa54945..2404d75f 100644 --- a/test/stress/map/insdel_item_int/map_insdel_item_int_striped.cpp +++ b/test/stress/map/insdel_item_int/map_insdel_item_int_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string.cpp b/test/stress/map/insdel_string/map_insdel_string.cpp index 1dd25d55..a0826be2 100644 --- a/test/stress/map/insdel_string/map_insdel_string.cpp +++ b/test/stress/map/insdel_string/map_insdel_string.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string.h b/test/stress/map/insdel_string/map_insdel_string.h index ec6dc671..35cf8255 100644 --- a/test/stress/map/insdel_string/map_insdel_string.h +++ b/test/stress/map/insdel_string/map_insdel_string.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_bronsonavltree.cpp b/test/stress/map/insdel_string/map_insdel_string_bronsonavltree.cpp index 25b067d1..f7391f1d 100644 --- a/test/stress/map/insdel_string/map_insdel_string_bronsonavltree.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_cuckoo.cpp b/test/stress/map/insdel_string/map_insdel_string_cuckoo.cpp index 26b28927..23c9f24f 100644 --- a/test/stress/map/insdel_string/map_insdel_string_cuckoo.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_ellentree.cpp b/test/stress/map/insdel_string/map_insdel_string_ellentree.cpp index 9b365c0f..0946b66d 100644 --- a/test/stress/map/insdel_string/map_insdel_string_ellentree.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_feldman_hashset.cpp b/test/stress/map/insdel_string/map_insdel_string_feldman_hashset.cpp index 663c7621..792c6822 100644 --- a/test/stress/map/insdel_string/map_insdel_string_feldman_hashset.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_michael.cpp b/test/stress/map/insdel_string/map_insdel_string_michael.cpp index 0d2a51e9..014e69f3 100644 --- a/test/stress/map/insdel_string/map_insdel_string_michael.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_skip.cpp b/test/stress/map/insdel_string/map_insdel_string_skip.cpp index 236e8dca..9f189274 100644 --- a/test/stress/map/insdel_string/map_insdel_string_skip.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_split.cpp b/test/stress/map/insdel_string/map_insdel_string_split.cpp index 87a01ff3..3c3a3e40 100644 --- a/test/stress/map/insdel_string/map_insdel_string_split.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_std.cpp b/test/stress/map/insdel_string/map_insdel_string_std.cpp index 7096c2ee..1bec6ec7 100644 --- a/test/stress/map/insdel_string/map_insdel_string_std.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdel_string/map_insdel_string_striped.cpp b/test/stress/map/insdel_string/map_insdel_string_striped.cpp index 3d6517a6..012aa9af 100644 --- a/test/stress/map/insdel_string/map_insdel_string_striped.cpp +++ b/test/stress/map/insdel_string/map_insdel_string_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind.cpp b/test/stress/map/insdelfind/map_insdelfind.cpp index d77e7a83..3dcea79b 100644 --- a/test/stress/map/insdelfind/map_insdelfind.cpp +++ b/test/stress/map/insdelfind/map_insdelfind.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind.h b/test/stress/map/insdelfind/map_insdelfind.h index 3c16a9a5..dd909dc9 100644 --- a/test/stress/map/insdelfind/map_insdelfind.h +++ b/test/stress/map/insdelfind/map_insdelfind.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_bronsonavltree.cpp b/test/stress/map/insdelfind/map_insdelfind_bronsonavltree.cpp index 4859330f..410e944c 100644 --- a/test/stress/map/insdelfind/map_insdelfind_bronsonavltree.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_cuckoo.cpp b/test/stress/map/insdelfind/map_insdelfind_cuckoo.cpp index 02d4b167..5d17622b 100644 --- a/test/stress/map/insdelfind/map_insdelfind_cuckoo.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_ellentree.cpp b/test/stress/map/insdelfind/map_insdelfind_ellentree.cpp index c24590b6..ecceaf5a 100644 --- a/test/stress/map/insdelfind/map_insdelfind_ellentree.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_feldman_hashset.cpp b/test/stress/map/insdelfind/map_insdelfind_feldman_hashset.cpp index d767ca6b..d6699aaa 100644 --- a/test/stress/map/insdelfind/map_insdelfind_feldman_hashset.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_michael.cpp b/test/stress/map/insdelfind/map_insdelfind_michael.cpp index 4819862a..1b0c4e79 100644 --- a/test/stress/map/insdelfind/map_insdelfind_michael.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_skip.cpp b/test/stress/map/insdelfind/map_insdelfind_skip.cpp index a2ec2995..655fc36d 100644 --- a/test/stress/map/insdelfind/map_insdelfind_skip.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_split.cpp b/test/stress/map/insdelfind/map_insdelfind_split.cpp index 264e499a..8cb13905 100644 --- a/test/stress/map/insdelfind/map_insdelfind_split.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_std.cpp b/test/stress/map/insdelfind/map_insdelfind_std.cpp index 47e13ad1..5b3e2a7d 100644 --- a/test/stress/map/insdelfind/map_insdelfind_std.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insdelfind/map_insdelfind_striped.cpp b/test/stress/map/insdelfind/map_insdelfind_striped.cpp index dcc3ece8..8a8025c9 100644 --- a/test/stress/map/insdelfind/map_insdelfind_striped.cpp +++ b/test/stress/map/insdelfind/map_insdelfind_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind.cpp b/test/stress/map/insfind_int/map_insfind.cpp index 9a8feb50..7e7d62c9 100644 --- a/test/stress/map/insfind_int/map_insfind.cpp +++ b/test/stress/map/insfind_int/map_insfind.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_bronsonavltree.cpp b/test/stress/map/insfind_int/map_insfind_bronsonavltree.cpp index a7cb1670..4c3902a4 100644 --- a/test/stress/map/insfind_int/map_insfind_bronsonavltree.cpp +++ b/test/stress/map/insfind_int/map_insfind_bronsonavltree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_cuckoo.cpp b/test/stress/map/insfind_int/map_insfind_cuckoo.cpp index e9cbca3a..889b0de3 100644 --- a/test/stress/map/insfind_int/map_insfind_cuckoo.cpp +++ b/test/stress/map/insfind_int/map_insfind_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_ellentree.cpp b/test/stress/map/insfind_int/map_insfind_ellentree.cpp index 662ad0b5..9cf34a62 100644 --- a/test/stress/map/insfind_int/map_insfind_ellentree.cpp +++ b/test/stress/map/insfind_int/map_insfind_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_feldman_hashset.cpp b/test/stress/map/insfind_int/map_insfind_feldman_hashset.cpp index 3fcfafa6..e830b467 100644 --- a/test/stress/map/insfind_int/map_insfind_feldman_hashset.cpp +++ b/test/stress/map/insfind_int/map_insfind_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_int.h b/test/stress/map/insfind_int/map_insfind_int.h index 9c8daa98..f7a09774 100644 --- a/test/stress/map/insfind_int/map_insfind_int.h +++ b/test/stress/map/insfind_int/map_insfind_int.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_michael.cpp b/test/stress/map/insfind_int/map_insfind_michael.cpp index 37401aab..00e98d8c 100644 --- a/test/stress/map/insfind_int/map_insfind_michael.cpp +++ b/test/stress/map/insfind_int/map_insfind_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_skip.cpp b/test/stress/map/insfind_int/map_insfind_skip.cpp index 69eb09a8..78cd387e 100644 --- a/test/stress/map/insfind_int/map_insfind_skip.cpp +++ b/test/stress/map/insfind_int/map_insfind_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_split.cpp b/test/stress/map/insfind_int/map_insfind_split.cpp index b188514f..2ff30247 100644 --- a/test/stress/map/insfind_int/map_insfind_split.cpp +++ b/test/stress/map/insfind_int/map_insfind_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_std.cpp b/test/stress/map/insfind_int/map_insfind_std.cpp index 495b2f9a..6bed8ca0 100644 --- a/test/stress/map/insfind_int/map_insfind_std.cpp +++ b/test/stress/map/insfind_int/map_insfind_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/insfind_int/map_insfind_striped.cpp b/test/stress/map/insfind_int/map_insfind_striped.cpp index 521940e0..3dfb8832 100644 --- a/test/stress/map/insfind_int/map_insfind_striped.cpp +++ b/test/stress/map/insfind_int/map_insfind_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type.h b/test/stress/map/map_type.h index 44f51fb0..a2006f2f 100644 --- a/test/stress/map/map_type.h +++ b/test/stress/map/map_type.h @@ -1,7 +1,7 @@ /* 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/ @@ -43,7 +43,6 @@ #include #include -#include "framework/michael_alloc.h" namespace map { namespace cc = cds::container; diff --git a/test/stress/map/map_type_bronson_avltree.h b/test/stress/map/map_type_bronson_avltree.h index 0bfeb1bf..7f6ee03a 100644 --- a/test/stress/map/map_type_bronson_avltree.h +++ b/test/stress/map/map_type_bronson_avltree.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type_cuckoo.h b/test/stress/map/map_type_cuckoo.h index 85b50205..2ef88925 100644 --- a/test/stress/map/map_type_cuckoo.h +++ b/test/stress/map/map_type_cuckoo.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type_ellen_bintree.h b/test/stress/map/map_type_ellen_bintree.h index 02255d3c..a6ae9550 100644 --- a/test/stress/map/map_type_ellen_bintree.h +++ b/test/stress/map/map_type_ellen_bintree.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type_feldman_hashmap.h b/test/stress/map/map_type_feldman_hashmap.h index c6026064..00134cb1 100644 --- a/test/stress/map/map_type_feldman_hashmap.h +++ b/test/stress/map/map_type_feldman_hashmap.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type_iterable_list.h b/test/stress/map/map_type_iterable_list.h index 6668da36..0ad60fa1 100644 --- a/test/stress/map/map_type_iterable_list.h +++ b/test/stress/map/map_type_iterable_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -46,127 +46,55 @@ namespace map { typedef typename map_type_base::key_compare compare; typedef typename map_type_base::key_less less; - struct traits_IterableList_cmp_stdAlloc : + struct traits_IterableList_cmp : public cc::iterable_list::make_traits< co::compare< compare > >::type {}; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_cmp_stdAlloc > IterableList_HP_cmp_stdAlloc; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_cmp_stdAlloc > IterableList_DHP_cmp_stdAlloc; -// typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_cmp_stdAlloc > IterableList_RCU_GPI_cmp_stdAlloc; -// typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_cmp_stdAlloc > IterableList_RCU_GPB_cmp_stdAlloc; -// typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_cmp_stdAlloc > IterableList_RCU_GPT_cmp_stdAlloc; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_cmp_stdAlloc > IterableList_RCU_SHB_cmp_stdAlloc; -// typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_cmp_stdAlloc > IterableList_RCU_SHT_cmp_stdAlloc; -//#endif - - struct traits_IterableList_cmp_stdAlloc_stat: public traits_IterableList_cmp_stdAlloc + typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_cmp > IterableList_HP_cmp; + typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_cmp > IterableList_DHP_cmp; + + struct traits_IterableList_cmp_stat: public traits_IterableList_cmp { typedef cc::iterable_list::stat<> stat; }; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_cmp_stdAlloc_stat > IterableList_HP_cmp_stdAlloc_stat; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_cmp_stdAlloc_stat > IterableList_DHP_cmp_stdAlloc_stat; - // typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_GPI_cmp_stdAlloc_stat; - // typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_GPB_cmp_stdAlloc_stat; - // typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_GPT_cmp_stdAlloc_stat; - //#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - // typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_SHB_cmp_stdAlloc_stat; - // typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_SHT_cmp_stdAlloc_stat; - //#endif - - struct traits_IterableList_cmp_stdAlloc_seqcst : + typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_cmp_stat > IterableList_HP_cmp_stat; + typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_cmp_stat > IterableList_DHP_cmp_stat; + + struct traits_IterableList_cmp_seqcst : public cc::iterable_list::make_traits< co::compare< compare > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_HP_cmp_stdAlloc_seqcst; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_DHP_cmp_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_GPI_cmp_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_GPB_cmp_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_GPT_cmp_stdAlloc_seqcst; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_SHB_cmp_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_SHT_cmp_stdAlloc_seqcst; -//#endif - - struct traits_IterableList_cmp_michaelAlloc : - public cc::iterable_list::make_traits< - co::compare< compare >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_cmp_michaelAlloc > IterableList_HP_cmp_michaelAlloc; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_cmp_michaelAlloc > IterableList_DHP_cmp_michaelAlloc; -// typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_cmp_michaelAlloc > IterableList_RCU_GPI_cmp_michaelAlloc; -// typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_cmp_michaelAlloc > IterableList_RCU_GPB_cmp_michaelAlloc; -// typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_cmp_michaelAlloc > IterableList_RCU_GPT_cmp_michaelAlloc; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_cmp_michaelAlloc > IterableList_RCU_SHB_cmp_michaelAlloc; -// typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_cmp_michaelAlloc > IterableList_RCU_SHT_cmp_michaelAlloc; -//#endif - - struct traits_IterableList_less_stdAlloc : + typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_cmp_seqcst > IterableList_HP_cmp_seqcst; + typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_cmp_seqcst > IterableList_DHP_cmp_seqcst; + + + struct traits_IterableList_less : public cc::iterable_list::make_traits< co::less< less > >::type {}; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_less_stdAlloc > IterableList_HP_less_stdAlloc; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_less_stdAlloc > IterableList_DHP_less_stdAlloc; -// typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_less_stdAlloc > IterableList_RCU_GPI_less_stdAlloc; -// typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_less_stdAlloc > IterableList_RCU_GPB_less_stdAlloc; -// typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_less_stdAlloc > IterableList_RCU_GPT_less_stdAlloc; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_less_stdAlloc > IterableList_RCU_SHB_less_stdAlloc; -// typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_less_stdAlloc > IterableList_RCU_SHT_less_stdAlloc; -//#endif - - struct traits_IterableList_less_stdAlloc_stat: public traits_IterableList_less_stdAlloc + typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_less > IterableList_HP_less; + typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_less > IterableList_DHP_less; + + struct traits_IterableList_less_stat: public traits_IterableList_less { typedef cc::iterable_list::stat<> stat; }; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_less_stdAlloc_stat > IterableList_HP_less_stdAlloc_stat; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_less_stdAlloc_stat > IterableList_DHP_less_stdAlloc_stat; -// typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_GPI_less_stdAlloc_stat; -// typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_GPB_less_stdAlloc_stat; -// typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_GPT_less_stdAlloc_stat; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_SHB_less_stdAlloc_stat; -// typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_SHT_less_stdAlloc_stat; -//#endif - - struct traits_IterableList_less_stdAlloc_seqcst : + typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_less_stat > IterableList_HP_less_stat; + typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_less_stat > IterableList_DHP_less_stat; + + struct traits_IterableList_less_seqcst : public cc::iterable_list::make_traits< co::less< less > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_less_stdAlloc_seqcst > IterableList_HP_less_stdAlloc_seqcst; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_less_stdAlloc_seqcst > IterableList_DHP_less_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_GPI_less_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_GPB_less_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_GPT_less_stdAlloc_seqcst; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_SHB_less_stdAlloc_seqcst; -// typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_SHT_less_stdAlloc_seqcst; -//#endif - - struct traits_IterableList_less_michaelAlloc : - public cc::iterable_list::make_traits< - co::less< less >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_less_michaelAlloc > IterableList_HP_less_michaelAlloc; - typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_less_michaelAlloc > IterableList_DHP_less_michaelAlloc; -// typedef cc::IterableKVList< rcu_gpi, Key, Value, traits_IterableList_less_michaelAlloc > IterableList_RCU_GPI_less_michaelAlloc; -// typedef cc::IterableKVList< rcu_gpb, Key, Value, traits_IterableList_less_michaelAlloc > IterableList_RCU_GPB_less_michaelAlloc; -// typedef cc::IterableKVList< rcu_gpt, Key, Value, traits_IterableList_less_michaelAlloc > IterableList_RCU_GPT_less_michaelAlloc; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef cc::IterableKVList< rcu_shb, Key, Value, traits_IterableList_less_michaelAlloc > IterableList_RCU_SHB_less_michaelAlloc; -// typedef cc::IterableKVList< rcu_sht, Key, Value, traits_IterableList_less_michaelAlloc > IterableList_RCU_SHT_less_michaelAlloc; -//#endif + typedef cc::IterableKVList< cds::gc::HP, Key, Value, traits_IterableList_less_seqcst > IterableList_HP_less_seqcst; + typedef cc::IterableKVList< cds::gc::DHP, Key, Value, traits_IterableList_less_seqcst > IterableList_DHP_less_seqcst; + }; } // namespace map diff --git a/test/stress/map/map_type_lazy_list.h b/test/stress/map/map_type_lazy_list.h index 861c2c76..ad4a82e8 100644 --- a/test/stress/map/map_type_lazy_list.h +++ b/test/stress/map/map_type_lazy_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -49,143 +49,110 @@ namespace map { typedef typename map_type_base::key_less less; typedef typename map_type_base::equal_to equal_to; - struct traits_LazyList_cmp_stdAlloc: + struct traits_LazyList_cmp: public cc::lazy_list::make_traits< co::compare< compare > >::type {}; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc; + typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp > LazyList_HP_cmp; + typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp > LazyList_DHP_cmp; + typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp > LazyList_NOGC_cmp; + typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp > LazyList_RCU_GPI_cmp; + typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp > LazyList_RCU_GPB_cmp; + typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp > LazyList_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc; + typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp > LazyList_RCU_SHB_cmp; + typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp > LazyList_RCU_SHT_cmp; #endif - struct traits_LazyList_cmp_stdAlloc_stat: public traits_LazyList_cmp_stdAlloc + struct traits_LazyList_cmp_stat: public traits_LazyList_cmp { typedef cc::lazy_list::stat<> stat; }; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_HP_cmp_stdAlloc_stat; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_DHP_cmp_stdAlloc_stat; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_NOGC_cmp_stdAlloc_stat; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_GPI_cmp_stdAlloc_stat; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_GPB_cmp_stdAlloc_stat; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_GPT_cmp_stdAlloc_stat; + typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stat > LazyList_HP_cmp_stat; + typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stat > LazyList_DHP_cmp_stat; + typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stat > LazyList_NOGC_cmp_stat; + typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stat > LazyList_RCU_GPI_cmp_stat; + typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stat > LazyList_RCU_GPB_cmp_stat; + typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stat > LazyList_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_SHB_cmp_stdAlloc_stat; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_SHT_cmp_stdAlloc_stat; + typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stat > LazyList_RCU_SHB_cmp_stat; + typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stat > LazyList_RCU_SHT_cmp_stat; #endif - struct traits_LazyList_unord_stdAlloc : + struct traits_LazyList_unord : public cc::lazy_list::make_traits< co::equal_to< equal_to > ,co::sort< false > >::type {}; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_unord_stdAlloc > LazyList_NOGC_unord_stdAlloc; + typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_unord > LazyList_NOGC_unord; - struct traits_LazyList_cmp_stdAlloc_seqcst : + struct traits_LazyList_cmp_seqcst : public cc::lazy_list::make_traits< co::compare< compare > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst; + typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_seqcst > LazyList_HP_cmp_seqcst; + typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_seqcst > LazyList_DHP_cmp_seqcst; + typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_seqcst > LazyList_NOGC_cmp_seqcst; + typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_seqcst > LazyList_RCU_GPI_cmp_seqcst; + typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_seqcst > LazyList_RCU_GPB_cmp_seqcst; + typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_seqcst > LazyList_RCU_GPT_cmp_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst; + typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_seqcst > LazyList_RCU_SHB_cmp_seqcst; + typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_seqcst > LazyList_RCU_SHT_cmp_seqcst; #endif - struct traits_LazyList_cmp_michaelAlloc : - public cc::lazy_list::make_traits< - co::compare< compare >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC_cmp_michaelAlloc; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc; -#endif - - struct traits_LazyList_less_stdAlloc : + struct traits_LazyList_less : public cc::lazy_list::make_traits< co::less< less > >::type {}; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc; + typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less > LazyList_HP_less; + typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less > LazyList_DHP_less; + typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less > LazyList_NOGC_less; + typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less > LazyList_RCU_GPI_less; + typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less > LazyList_RCU_GPB_less; + typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less > LazyList_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc; + typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less > LazyList_RCU_SHB_less; + typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less > LazyList_RCU_SHT_less; #endif - struct traits_LazyList_less_stdAlloc_stat: public traits_LazyList_less_stdAlloc + struct traits_LazyList_less_stat: public traits_LazyList_less { typedef cc::lazy_list::stat<> stat; }; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_HP_less_stdAlloc_stat; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_DHP_less_stdAlloc_stat; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_NOGC_less_stdAlloc_stat; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_GPI_less_stdAlloc_stat; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_GPB_less_stdAlloc_stat; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_GPT_less_stdAlloc_stat; + typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stat > LazyList_HP_less_stat; + typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stat > LazyList_DHP_less_stat; + typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stat > LazyList_NOGC_less_stat; + typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stat > LazyList_RCU_GPI_less_stat; + typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stat > LazyList_RCU_GPB_less_stat; + typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stat > LazyList_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_SHB_less_stdAlloc_stat; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_SHT_less_stdAlloc_stat; + typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stat > LazyList_RCU_SHB_less_stat; + typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stat > LazyList_RCU_SHT_less_stat; #endif - struct traits_LazyList_less_stdAlloc_seqcst : + struct traits_LazyList_less_seqcst : public cc::lazy_list::make_traits< co::less< less > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst; + typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_seqcst > LazyList_HP_less_seqcst; + typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_seqcst > LazyList_DHP_less_seqcst; + typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_seqcst > LazyList_NOGC_less_seqcst; + typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_seqcst > LazyList_RCU_GPI_less_seqcst; + typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_seqcst > LazyList_RCU_GPB_less_seqcst; + typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_seqcst > LazyList_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst; + typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_seqcst > LazyList_RCU_SHB_less_seqcst; + typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_seqcst > LazyList_RCU_SHT_less_seqcst; #endif - struct traits_LazyList_less_michaelAlloc : - public cc::lazy_list::make_traits< - co::less< less >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc; - typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc; - typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc; - typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc; - typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc; - typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc; - typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc; -#endif }; } // namespace map diff --git a/test/stress/map/map_type_michael.h b/test/stress/map/map_type_michael.h index 16dc7c99..41d2a64b 100644 --- a/test/stress/map/map_type_michael.h +++ b/test/stress/map/map_type_michael.h @@ -1,7 +1,7 @@ /* 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/ @@ -78,96 +78,70 @@ namespace map { // MichaelHashMap based on MichaelKVList typedef michael_list_type< Key, Value > ml; - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc; + typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp, traits_MichaelMap_hash > MichaelMap_HP_cmp; + typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp, traits_MichaelMap_hash > MichaelMap_DHP_cmp; + typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp, traits_MichaelMap_hash > MichaelMap_NOGC_cmp; + typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp; + typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp; + typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc; + typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp; + typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp; #endif - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_stat; + typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_stat, traits_MichaelMap_hash > MichaelMap_HP_cmp_stat; + typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stat, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stat; + typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stat, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stat; + typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stat; + typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stat; + typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_stat; + typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stat; + typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stat; #endif - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc; + typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less, traits_MichaelMap_hash > MichaelMap_HP_less; + typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less, traits_MichaelMap_hash > MichaelMap_DHP_less; + typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less, traits_MichaelMap_hash > MichaelMap_NOGC_less; + typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less; + typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less; + typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc; + typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less; + typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less; #endif - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_stat; + typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stat, traits_MichaelMap_hash > MichaelMap_HP_less_stat; + typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stat, traits_MichaelMap_hash > MichaelMap_DHP_less_stat; + typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stat, traits_MichaelMap_hash > MichaelMap_NOGC_less_stat; + typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stat; + typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stat; + typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stat, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_stat; + typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stat; + typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stat, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stat; #endif - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst; + typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_seqcst; + typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_seqcst; + typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_seqcst; + typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_seqcst; + typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_seqcst; + typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst; + typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_seqcst; + typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_seqcst; #endif - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst; + typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_seqcst; + typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_seqcst; + typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_seqcst; + typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_seqcst; + typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_seqcst; + typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst; -#endif - - struct traits_MichaelSet_michaelAlloc : - public traits_MichaelMap_hash - { - typedef memory::MichaelAllocator allocator; - }; - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc; -#endif - typedef MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc; - typedef MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc; - typedef MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc; - typedef MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc; - typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc; + typedef MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_seqcst; + typedef MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_seqcst; #endif @@ -175,148 +149,93 @@ namespace map { // MichaelHashMap based on LazyKVList typedef lazy_list_type< Key, Value > ll; - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc; + typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp; + typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp; + typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp; + typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp; + typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp; + typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc; + typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp; + typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp; #endif - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_stat; + typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stat; + typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stat; + typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stat; + typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stat; + typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stat; + typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_stat; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_stat; + typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stat; + typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stat; #endif - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_unord_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_unord_stdAlloc; + typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_unord, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_unord; - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc; + typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less; + typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less; + typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less; + typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less; + typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less; + typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc; + typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less; + typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less; #endif - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_stat; + typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stat; + typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stat; + typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stat; + typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stat; + typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stat; + typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_stat; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_stat; + typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stat; + typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stat, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stat; #endif - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst; + typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_seqcst; + typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_seqcst; + typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_seqcst; + typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_seqcst; + typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_seqcst; + typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst; + typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_seqcst; + typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_seqcst; #endif - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst; + typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_seqcst; + typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_seqcst; + typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_seqcst; + typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_seqcst; + typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_seqcst; + typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst; + typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_seqcst; + typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_seqcst; #endif - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc; -#endif - typedef MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc; - typedef MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc; - typedef MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc; - typedef MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc; - typedef MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc; - typedef MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc; -#endif // *************************************************************************** // MichaelHashMap based on IterableKVList typedef iterable_list_type< Key, Value > il; - typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_HP_cmp_stdAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_cmp_stdAlloc; -// typedef MichaelHashMap< rcu_gpi, typename il::IterableList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPI_cmp_stdAlloc; -// typedef MichaelHashMap< rcu_gpb, typename il::IterableList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPB_cmp_stdAlloc; -// typedef MichaelHashMap< rcu_gpt, typename il::IterableList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPT_cmp_stdAlloc; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef MichaelHashMap< rcu_shb, typename il::IterableList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHB_cmp_stdAlloc; -// typedef MichaelHashMap< rcu_sht, typename il::IterableList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHT_cmp_stdAlloc; -//#endif - - typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_HP_cmp_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_cmp_stdAlloc_stat; -// typedef MichaelHashMap< rcu_gpi, typename il::IterableList_RCU_GPI_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPI_cmp_stdAlloc_stat; -// typedef MichaelHashMap< rcu_gpb, typename il::IterableList_RCU_GPB_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPB_cmp_stdAlloc_stat; -// typedef MichaelHashMap< rcu_gpt, typename il::IterableList_RCU_GPT_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPT_cmp_stdAlloc_stat; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef MichaelHashMap< rcu_shb, typename il::IterableList_RCU_SHB_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHB_cmp_stdAlloc_stat; -// typedef MichaelHashMap< rcu_sht, typename il::IterableList_RCU_SHT_cmp_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHT_cmp_stdAlloc_stat; -//#endif - - typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_HP_less_stdAlloc; - typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_less_stdAlloc; -// typedef MichaelHashMap< rcu_gpi, typename il::IterableList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPI_less_stdAlloc; -// typedef MichaelHashMap< rcu_gpb, typename il::IterableList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPB_less_stdAlloc; -// typedef MichaelHashMap< rcu_gpt, typename il::IterableList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPT_less_stdAlloc; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef MichaelHashMap< rcu_shb, typename il::IterableList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHB_less_stdAlloc; -// typedef MichaelHashMap< rcu_sht, typename il::IterableList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHT_less_stdAlloc; -//#endif - - typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_HP_less_stdAlloc_stat; - typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_less_stdAlloc_stat; -// typedef MichaelHashMap< rcu_gpi, typename il::IterableList_RCU_GPI_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPI_less_stdAlloc_stat; -// typedef MichaelHashMap< rcu_gpb, typename il::IterableList_RCU_GPB_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPB_less_stdAlloc_stat; -// typedef MichaelHashMap< rcu_gpt, typename il::IterableList_RCU_GPT_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPT_less_stdAlloc_stat; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef MichaelHashMap< rcu_shb, typename il::IterableList_RCU_SHB_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHB_less_stdAlloc_stat; -// typedef MichaelHashMap< rcu_sht, typename il::IterableList_RCU_SHT_less_stdAlloc_stat, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHT_less_stdAlloc_stat; -//#endif - - typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_HP_cmp_stdAlloc_seqcst; - typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_cmp_stdAlloc_seqcst; -// typedef MichaelHashMap< rcu_gpi, typename il::IterableList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPI_cmp_stdAlloc_seqcst; -// typedef MichaelHashMap< rcu_gpb, typename il::IterableList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPB_cmp_stdAlloc_seqcst; -// typedef MichaelHashMap< rcu_gpt, typename il::IterableList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_GPT_cmp_stdAlloc_seqcst; -//#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -// typedef MichaelHashMap< rcu_shb, typename il::IterableList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHB_cmp_stdAlloc_seqcst; -// typedef MichaelHashMap< rcu_sht, typename il::IterableList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_RCU_SHT_cmp_stdAlloc_seqcst; -//#endif + typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_cmp, traits_MichaelMap_hash > MichaelMap_Iterable_HP_cmp; + typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_cmp, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_cmp; + + typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_cmp_stat, traits_MichaelMap_hash > MichaelMap_Iterable_HP_cmp_stat; + typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_cmp_stat, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_cmp_stat; + + typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_less, traits_MichaelMap_hash > MichaelMap_Iterable_HP_less; + typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_less, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_less; + + typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_less_stat, traits_MichaelMap_hash > MichaelMap_Iterable_HP_less_stat; + typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_less_stat, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_less_stat; + + typedef MichaelHashMap< cds::gc::HP, typename il::IterableList_HP_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_HP_cmp_seqcst; + typedef MichaelHashMap< cds::gc::DHP, typename il::IterableList_DHP_cmp_seqcst, traits_MichaelMap_hash > MichaelMap_Iterable_DHP_cmp_seqcst; }; } // namespace map @@ -331,131 +250,100 @@ namespace map { #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED # define CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less_michaelAlloc, key_type, value_type, 0 ) + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHB_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_SHT_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHB_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_SHT_less_seqcst, key_type, value_type, 2 ) \ + #else # define CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type ) #endif #define CDSSTRESS_MichaelMap( fixture, test_case, key_type, value_type ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less_michaelAlloc, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_HP_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_DHP_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPI_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPB_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_RCU_GPT_less_seqcst, key_type, value_type, 2 ) \ \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less_michaelAlloc, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_HP_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_DHP_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less_seqcst, key_type, value_type, 2 ) \ \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_HP_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Iterable_DHP_cmp_seqcst, key_type, value_type, 2 ) \ CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type ) #define CDSSTRESS_MichaelMap_nogc( fixture, test_case, key_type, value_type ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_unord_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst, key_type, value_type, 2 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less_michaelAlloc, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_NOGC_less_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_unord, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_cmp_seqcst, key_type, value_type, 2 ) \ + CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_NOGC_less_seqcst, key_type, value_type, 2 ) \ #endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_H diff --git a/test/stress/map/map_type_michael_list.h b/test/stress/map/map_type_michael_list.h index 4c71fe9d..b78309b9 100644 --- a/test/stress/map/map_type_michael_list.h +++ b/test/stress/map/map_type_michael_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -48,135 +48,102 @@ namespace map { typedef typename map_type_base::key_compare compare; typedef typename map_type_base::key_less less; - struct traits_MichaelList_cmp_stdAlloc : + struct traits_MichaelList_cmp : public cc::michael_list::make_traits< co::compare< compare > >::type {}; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc; + typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp > MichaelList_HP_cmp; + typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp > MichaelList_DHP_cmp; + typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp > MichaelList_NOGC_cmp; + typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp > MichaelList_RCU_GPI_cmp; + typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp > MichaelList_RCU_GPB_cmp; + typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp > MichaelList_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc; + typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp > MichaelList_RCU_SHB_cmp; + typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp > MichaelList_RCU_SHT_cmp; #endif - struct traits_MichaelList_cmp_stdAlloc_stat : public traits_MichaelList_cmp_stdAlloc + struct traits_MichaelList_cmp_stat : public traits_MichaelList_cmp { typedef cc::michael_list::stat<> stat; }; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_HP_cmp_stdAlloc_stat; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_DHP_cmp_stdAlloc_stat; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_NOGC_cmp_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_GPI_cmp_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_GPB_cmp_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_GPT_cmp_stdAlloc_stat; + typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stat > MichaelList_HP_cmp_stat; + typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stat > MichaelList_DHP_cmp_stat; + typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stat > MichaelList_NOGC_cmp_stat; + typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stat > MichaelList_RCU_GPI_cmp_stat; + typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stat > MichaelList_RCU_GPB_cmp_stat; + typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stat > MichaelList_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_SHB_cmp_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_SHT_cmp_stdAlloc_stat; + typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stat > MichaelList_RCU_SHB_cmp_stat; + typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stat > MichaelList_RCU_SHT_cmp_stat; #endif - struct traits_MichaelList_cmp_stdAlloc_seqcst : + struct traits_MichaelList_cmp_seqcst : public cc::michael_list::make_traits< co::compare< compare > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst; + typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_HP_cmp_seqcst; + typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_DHP_cmp_seqcst; + typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_NOGC_cmp_seqcst; + typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_RCU_GPI_cmp_seqcst; + typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_RCU_GPB_cmp_seqcst; + typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_RCU_GPT_cmp_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst; + typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_RCU_SHB_cmp_seqcst; + typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_seqcst > MichaelList_RCU_SHT_cmp_seqcst; #endif - struct traits_MichaelList_cmp_michaelAlloc : - public cc::michael_list::make_traits< - co::compare< compare >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc; -#endif - - struct traits_MichaelList_less_stdAlloc : + struct traits_MichaelList_less : public cc::michael_list::make_traits< co::less< less > >::type {}; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc; + typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less > MichaelList_HP_less; + typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less > MichaelList_DHP_less; + typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less > MichaelList_NOGC_less; + typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less > MichaelList_RCU_GPI_less; + typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less > MichaelList_RCU_GPB_less; + typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less > MichaelList_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc; + typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less > MichaelList_RCU_SHB_less; + typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less > MichaelList_RCU_SHT_less; #endif - struct traits_MichaelList_less_stdAlloc_stat: public traits_MichaelList_less_stdAlloc + struct traits_MichaelList_less_stat: public traits_MichaelList_less { typedef cc::michael_list::stat<> stat; }; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_HP_less_stdAlloc_stat; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_DHP_less_stdAlloc_stat; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_NOGC_less_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_GPI_less_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_GPB_less_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_GPT_less_stdAlloc_stat; + typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stat > MichaelList_HP_less_stat; + typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stat > MichaelList_DHP_less_stat; + typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stat > MichaelList_NOGC_less_stat; + typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stat > MichaelList_RCU_GPI_less_stat; + typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stat > MichaelList_RCU_GPB_less_stat; + typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stat > MichaelList_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_SHB_less_stdAlloc_stat; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_SHT_less_stdAlloc_stat; + typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stat > MichaelList_RCU_SHB_less_stat; + typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stat > MichaelList_RCU_SHT_less_stat; #endif - struct traits_MichaelList_less_stdAlloc_seqcst : + struct traits_MichaelList_less_seqcst : public cc::michael_list::make_traits< co::less< less > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst; + typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_seqcst > MichaelList_HP_less_seqcst; + typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_seqcst > MichaelList_DHP_less_seqcst; + typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_seqcst > MichaelList_NOGC_less_seqcst; + typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_seqcst > MichaelList_RCU_GPI_less_seqcst; + typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_seqcst > MichaelList_RCU_GPB_less_seqcst; + typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_seqcst > MichaelList_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst; + typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_seqcst > MichaelList_RCU_SHB_less_seqcst; + typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_seqcst > MichaelList_RCU_SHT_less_seqcst; #endif - struct traits_MichaelList_less_michaelAlloc : - public cc::michael_list::make_traits< - co::less< less >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc; - typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc; - typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc; - typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc; - typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc; - typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc; - typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc; -#endif }; } // namespace map diff --git a/test/stress/map/map_type_skip_list.h b/test/stress/map/map_type_skip_list.h index b2a58c85..bb744fe3 100644 --- a/test/stress/map/map_type_skip_list.h +++ b/test/stress/map/map_type_skip_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type_split_list.h b/test/stress/map/map_type_split_list.h index 77efadcb..77e29d9b 100644 --- a/test/stress/map/map_type_split_list.h +++ b/test/stress/map/map_type_split_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type_std.h b/test/stress/map/map_type_std.h index ad4fe57e..f5f7e233 100644 --- a/test/stress/map/map_type_std.h +++ b/test/stress/map/map_type_std.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/map/map_type_striped.h b/test/stress/map/map_type_striped.h index 5ab14511..88be541f 100644 --- a/test/stress/map/map_type_striped.h +++ b/test/stress/map/map_type_striped.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/pqueue/item.h b/test/stress/pqueue/item.h index 4f8671c6..39f9d300 100644 --- a/test/stress/pqueue/item.h +++ b/test/stress/pqueue/item.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/pqueue/pop.cpp b/test/stress/pqueue/pop.cpp index dc979121..4c8dfa7b 100644 --- a/test/stress/pqueue/pop.cpp +++ b/test/stress/pqueue/pop.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/pqueue/pqueue_type.h b/test/stress/pqueue/pqueue_type.h index 60b86f70..3ae99110 100644 --- a/test/stress/pqueue/pqueue_type.h +++ b/test/stress/pqueue/pqueue_type.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/pqueue/push.cpp b/test/stress/pqueue/push.cpp index f945d7a4..07f3ce8f 100644 --- a/test/stress/pqueue/push.cpp +++ b/test/stress/pqueue/push.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/pqueue/push_pop.cpp b/test/stress/pqueue/push_pop.cpp index adfca3c4..a7df346a 100644 --- a/test/stress/pqueue/push_pop.cpp +++ b/test/stress/pqueue/push_pop.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/bounded_queue_fulness.cpp b/test/stress/queue/bounded_queue_fulness.cpp index 70f33e65..bb054fe6 100644 --- a/test/stress/queue/bounded_queue_fulness.cpp +++ b/test/stress/queue/bounded_queue_fulness.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/intrusive_push_pop.cpp b/test/stress/queue/intrusive_push_pop.cpp index 621c0d7f..eede7abd 100644 --- a/test/stress/queue/intrusive_push_pop.cpp +++ b/test/stress/queue/intrusive_push_pop.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/intrusive_queue_type.h b/test/stress/queue/intrusive_queue_type.h index c03056f9..8077d536 100644 --- a/test/stress/queue/intrusive_queue_type.h +++ b/test/stress/queue/intrusive_queue_type.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/pop.cpp b/test/stress/queue/pop.cpp index b9ba753c..3f8a118a 100644 --- a/test/stress/queue/pop.cpp +++ b/test/stress/queue/pop.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/print_stat.h b/test/stress/queue/print_stat.h index 13feb8c9..95ea460f 100644 --- a/test/stress/queue/print_stat.h +++ b/test/stress/queue/print_stat.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/push.cpp b/test/stress/queue/push.cpp index cc043ba7..222a7efe 100644 --- a/test/stress/queue/push.cpp +++ b/test/stress/queue/push.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/push_pop.cpp b/test/stress/queue/push_pop.cpp index 6db97a62..7c754c36 100644 --- a/test/stress/queue/push_pop.cpp +++ b/test/stress/queue/push_pop.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -32,6 +32,7 @@ #include #include +#include // Multi-threaded queue push/pop test namespace { @@ -39,17 +40,21 @@ namespace { static size_t s_nConsumerThreadCount = 4; static size_t s_nProducerThreadCount = 4; static size_t s_nQueueSize = 4000000; + static size_t s_nHeavyValueSize = 100; static std::atomic s_nProducerDone( 0 ); + struct old_value + { + size_t nNo; + size_t nWriterNo; + }; + + template class queue_push_pop: public cds_test::stress_fixture { protected: - struct value_type - { - size_t nNo; - size_t nWriterNo; - }; + using value_type = Value; enum { producer_thread, @@ -298,6 +303,20 @@ namespace { propout() << q.statistics(); } + private: + static void set_array_size( size_t size ) { + const bool tmp = fc_test::has_set_array_size::value; + set_array_size(size, std::integral_constant()); + } + + static void set_array_size(size_t size, std::true_type){ + value_type::set_array_size(size); + } + + static void set_array_size(size_t, std::false_type) + { + } + public: static void SetUpTestCase() { @@ -306,6 +325,7 @@ namespace { s_nConsumerThreadCount = cfg.get_size_t( "ConsumerCount", s_nConsumerThreadCount ); s_nProducerThreadCount = cfg.get_size_t( "ProducerCount", s_nProducerThreadCount ); s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize ); + s_nHeavyValueSize = cfg.get_size_t( "HeavyValueSize", s_nHeavyValueSize ); if ( s_nConsumerThreadCount == 0u ) s_nConsumerThreadCount = 1; @@ -313,19 +333,27 @@ namespace { s_nProducerThreadCount = 1; if ( s_nQueueSize == 0u ) s_nQueueSize = 1000; + if ( s_nHeavyValueSize == 0 ) + s_nHeavyValueSize = 1; + + set_array_size( s_nHeavyValueSize ); } //static void TearDownTestCase(); }; - CDSSTRESS_MSQueue( queue_push_pop ) - CDSSTRESS_MoirQueue( queue_push_pop ) - CDSSTRESS_BasketQueue( queue_push_pop ) - CDSSTRESS_OptimsticQueue( queue_push_pop ) - CDSSTRESS_FCQueue( queue_push_pop ) - CDSSTRESS_FCDeque( queue_push_pop ) - CDSSTRESS_RWQueue( queue_push_pop ) - CDSSTRESS_StdQueue( queue_push_pop ) + using fc_with_heavy_value = queue_push_pop< fc_test::heavy_value<36000> >; + using simple_queue_push_pop = queue_push_pop<>; + + CDSSTRESS_MSQueue( simple_queue_push_pop ) + CDSSTRESS_MoirQueue( simple_queue_push_pop ) + CDSSTRESS_BasketQueue( simple_queue_push_pop ) + CDSSTRESS_OptimsticQueue( simple_queue_push_pop ) + CDSSTRESS_FCQueue( simple_queue_push_pop ) + CDSSTRESS_FCDeque( simple_queue_push_pop ) + CDSSTRESS_FCDeque_HeavyValue( fc_with_heavy_value ) + CDSSTRESS_RWQueue( simple_queue_push_pop ) + CDSSTRESS_StdQueue( simple_queue_push_pop ) #undef CDSSTRESS_Queue_F #define CDSSTRESS_Queue_F( test_fixture, type_name, level ) \ @@ -337,7 +365,7 @@ namespace { test( queue ); \ } - CDSSTRESS_VyukovQueue( queue_push_pop ) + CDSSTRESS_VyukovQueue( simple_queue_push_pop ) #undef CDSSTRESS_Queue_F @@ -346,10 +374,10 @@ namespace { // SegmentedQueue test class segmented_queue_push_pop - : public queue_push_pop + : public queue_push_pop<> , public ::testing::WithParamInterface< size_t > { - typedef queue_push_pop base_class; + typedef queue_push_pop<> base_class; protected: @@ -376,8 +404,7 @@ namespace { if ( bIterative && quasi_factor > 4 ) { for ( size_t qf = 4; qf <= quasi_factor; qf *= 2 ) args.push_back( qf ); - } - else { + } else { if ( quasi_factor > 2 ) args.push_back( quasi_factor ); else diff --git a/test/stress/queue/queue_type.h b/test/stress/queue/queue_type.h index a5453787..3a8af179 100644 --- a/test/stress/queue/queue_type.h +++ b/test/stress/queue/queue_type.h @@ -1,7 +1,7 @@ /* 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/ @@ -46,12 +46,13 @@ #include "std_queue.h" #include "lock/win32_lock.h" -#include "framework/michael_alloc.h" #include #include #include +#include + #include "print_stat.h" namespace queue { @@ -127,6 +128,56 @@ namespace queue { } // namespace details +namespace fc_details{ +// FCDeque + struct traits_FCDeque_stat: + public cds::container::fcdeque::make_traits< + cds::opt::stat< cds::container::fcdeque::stat<> > + >::type + {}; + struct traits_FCDeque_elimination: + public cds::container::fcdeque::make_traits< + cds::opt::enable_elimination< true > + >::type + {}; + struct traits_FCDeque_elimination_stat: + public cds::container::fcdeque::make_traits< + cds::opt::stat< cds::container::fcdeque::stat<> >, + cds::opt::enable_elimination< true > + >::type + {}; + struct traits_FCDeque_mutex: + public cds::container::fcdeque::make_traits< + cds::opt::lock_type< std::mutex > + >::type + {}; + + struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits + { + typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy; + }; + struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss + { + typedef cds::container::fcdeque::stat<> stat; + }; + struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits + { + typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy; + }; + struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm + { + typedef cds::container::fcdeque::stat<> stat; + }; + struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits + { + typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy; + }; + struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm + { + typedef cds::container::fcdeque::stat<> stat; + }; + +} template struct Types { @@ -136,15 +187,6 @@ namespace queue { typedef cds::container::MoirQueue MoirQueue_HP; typedef cds::container::MoirQueue MoirQueue_DHP; - struct traits_MSQueue_michaelAlloc : public cds::container::msqueue::traits - { - typedef memory::MichaelAllocator allocator; - }; - typedef cds::container::MSQueue MSQueue_HP_michaelAlloc; - typedef cds::container::MSQueue MSQueue_DHP_michaelAlloc; - typedef cds::container::MoirQueue MoirQueue_HP_michaelAlloc; - typedef cds::container::MoirQueue MoirQueue_DHP_michaelAlloc; - struct traits_MSQueue_seqcst : public cds::container::msqueue::make_traits < cds::opt::memory_model < cds::opt::v::sequential_consistent > @@ -182,13 +224,6 @@ namespace queue { typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP; typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP; - struct traits_OptimisticQueue_michaelAlloc : public cds::container::optimistic_queue::traits - { - typedef memory::MichaelAllocator allocator; - }; - typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_HP_michaelAlloc; - typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_DHP_michaelAlloc; - struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits { typedef cds::opt::v::sequential_consistent memory_model; @@ -235,28 +270,6 @@ namespace queue { } }; - struct traits_VyukovMPMCCycleQueue_dyn_michaelAlloc : public cds::container::vyukov_queue::traits - { - typedef cds::opt::v::uninitialized_dynamic_buffer< int, memory::MichaelAllocator > buffer; - }; - class VyukovMPMCCycleQueue_dyn_michaelAlloc - : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc > - { - typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc > base_class; - public: - VyukovMPMCCycleQueue_dyn_michaelAlloc() - : base_class( 1024 * 64 ) - {} - VyukovMPMCCycleQueue_dyn_michaelAlloc( size_t nCapacity ) - : base_class( nCapacity ) - {} - - cds::opt::none statistics() const - { - return cds::opt::none(); - } - }; - struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn { typedef cds::atomicity::item_counter item_counter; @@ -285,13 +298,6 @@ namespace queue { typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP; typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP; - struct traits_BasketQueue_michaelAlloc : public cds::container::basket_queue::traits - { - typedef memory::MichaelAllocator allocator; - }; - typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_HP_michaelAlloc; - typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_DHP_michaelAlloc; - struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits { typedef cds::opt::v::sequential_consistent mamory_model; @@ -400,87 +406,40 @@ namespace queue { typedef cds::container::FCQueue< Value, std::queue >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat; - // FCDeque - struct traits_FCDeque_stat: - public cds::container::fcdeque::make_traits< - cds::opt::stat< cds::container::fcdeque::stat<> > - >::type - {}; - struct traits_FCDeque_elimination: - public cds::container::fcdeque::make_traits< - cds::opt::enable_elimination< true > - >::type - {}; - struct traits_FCDeque_elimination_stat: - public cds::container::fcdeque::make_traits< - cds::opt::stat< cds::container::fcdeque::stat<> >, - cds::opt::enable_elimination< true > - >::type - {}; - struct traits_FCDeque_mutex: - public cds::container::fcdeque::make_traits< - cds::opt::lock_type< std::mutex > - >::type - {}; - - struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits - { - typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy; - }; - struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss - { - typedef cds::container::fcdeque::stat<> stat; - }; - struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits - { - typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy; - }; - struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm - { - typedef cds::container::fcdeque::stat<> stat; - }; - struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits - { - typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy; - }; - struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm - { - typedef cds::container::fcdeque::stat<> stat; - }; typedef details::FCDequeL< Value > FCDequeL_default; - typedef details::FCDequeL< Value, traits_FCDeque_mutex > FCDequeL_mutex; - typedef details::FCDequeL< Value, traits_FCDeque_stat > FCDequeL_stat; - typedef details::FCDequeL< Value, traits_FCDeque_wait_ss > FCDequeL_wait_ss; - typedef details::FCDequeL< Value, traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat; - typedef details::FCDequeL< Value, traits_FCDeque_wait_sm > FCDequeL_wait_sm; - typedef details::FCDequeL< Value, traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat; - typedef details::FCDequeL< Value, traits_FCDeque_wait_mm > FCDequeL_wait_mm; - typedef details::FCDequeL< Value, traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat; - typedef details::FCDequeL< Value, traits_FCDeque_elimination > FCDequeL_elimination; - typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_mutex; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_wait_ss; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_wait_sm; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_wait_mm; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_elimination; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_elimination_stat; typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque > FCDequeL_boost; - typedef details::FCDequeL< Value, traits_FCDeque_stat, boost::container::deque > FCDequeL_boost_stat; - typedef details::FCDequeL< Value, traits_FCDeque_elimination, boost::container::deque > FCDequeL_boost_elimination; - typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat, boost::container::deque > FCDequeL_boost_elimination_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque > FCDequeL_boost_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque > FCDequeL_boost_elimination; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque > FCDequeL_boost_elimination_stat; typedef details::FCDequeR< Value > FCDequeR_default; - typedef details::FCDequeR< Value, traits_FCDeque_mutex > FCDequeR_mutex; - typedef details::FCDequeR< Value, traits_FCDeque_stat > FCDequeR_stat; - typedef details::FCDequeR< Value, traits_FCDeque_wait_ss > FCDequeR_wait_ss; - typedef details::FCDequeR< Value, traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat; - typedef details::FCDequeR< Value, traits_FCDeque_wait_sm > FCDequeR_wait_sm; - typedef details::FCDequeR< Value, traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat; - typedef details::FCDequeR< Value, traits_FCDeque_wait_mm > FCDequeR_wait_mm; - typedef details::FCDequeR< Value, traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat; - typedef details::FCDequeR< Value, traits_FCDeque_elimination > FCDequeR_elimination; - typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_mutex; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_wait_ss; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_wait_sm; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_wait_mm; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_elimination; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_elimination_stat; typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque > FCDequeR_boost; - typedef details::FCDequeR< Value, traits_FCDeque_stat, boost::container::deque > FCDequeR_boost_stat; - typedef details::FCDequeR< Value, traits_FCDeque_elimination, boost::container::deque > FCDequeR_boost_elimination; - typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat, boost::container::deque > FCDequeR_boost_elimination_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque > FCDequeR_boost_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque > FCDequeR_boost_elimination; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque > FCDequeR_boost_elimination_stat; // STL typedef StdQueue_deque StdQueue_deque_Spinlock; @@ -537,6 +496,43 @@ namespace queue { typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding > SegmentedQueue_DHP_mutex_padding; typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat > SegmentedQueue_DHP_mutex_stat; }; + + template + struct TypesFCHeavyValue { + typedef details::FCDequeL< Value > FCDequeL_HeavyValue_default; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_HeavyValue_mutex; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_HeavyValue_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_HeavyValue_wait_ss; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_HeavyValue_wait_ss_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_HeavyValue_wait_sm; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_HeavyValue_wait_sm_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_HeavyValue_wait_mm; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_HeavyValue_wait_mm_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_HeavyValue_elimination; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_HeavyValue_elimination_stat; + + typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque > FCDequeL_HeavyValue_boost; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque > FCDequeL_HeavyValue_boost_stat; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque > FCDequeL_HeavyValue_boost_elimination; + typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque > FCDequeL_HeavyValue_boost_elimination_stat; + + typedef details::FCDequeR< Value > FCDequeR_HeavyValue_default; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_HeavyValue_mutex; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_HeavyValue_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_HeavyValue_wait_ss; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_HeavyValue_wait_ss_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_HeavyValue_wait_sm; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_HeavyValue_wait_sm_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_HeavyValue_wait_mm; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_HeavyValue_wait_mm_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_HeavyValue_elimination; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_HeavyValue_elimination_stat; + + typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque > FCDequeR_HeavyValue_boost; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque > FCDequeR_HeavyValue_boost_stat; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque > FCDequeR_HeavyValue_boost_elimination; + typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque > FCDequeR_HeavyValue_boost_elimination_stat; + }; } @@ -592,50 +588,51 @@ namespace cds_test { test( queue ); \ } +#define CDSSTRESS_FCQueue_F( test_fixture, type_name, level ) \ + TEST_F( test_fixture, type_name ) \ + { \ + if ( !check_detail_level( level )) return; \ + typedef queue::TypesFCHeavyValue< value_type >::type_name queue_type; \ + queue_type queue; \ + test( queue ); \ + } + #define CDSSTRESS_MSQueue( test_fixture ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_HP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_stat, 0 ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_stat, 0 ) #define CDSSTRESS_MoirQueue( test_fixture ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_stat, 0 ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_michaelAlloc,0 ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_stat, 0 ) #define CDSSTRESS_OptimsticQueue( test_fixture ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_stat, 0 ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_stat, 0 ) #define CDSSTRESS_BasketQueue( test_fixture ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_stat, 0 ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_seqcst, 2 ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic, 1 ) \ CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_stat, 0 ) @@ -662,11 +659,12 @@ namespace cds_test { CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination, 1 ) \ CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat, 0 ) + #define CDSSTRESS_FCDeque( test_fixture ) \ CDSSTRESS_Queue_F( test_fixture, FCDequeL_default, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss, 1 ) \ + CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex, 1 ) \ + CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat, 1 ) \ + CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss, 1 )\ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss_stat, 0 ) \ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm, 1 ) \ CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm_stat, 0 ) \ @@ -694,6 +692,38 @@ namespace cds_test { CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination, 1 ) \ CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat, 1 ) +#define CDSSTRESS_FCDeque_HeavyValue( test_fixture ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_default, 0 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_mutex, 0 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_stat, 0 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_default, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_mutex, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_stat, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination, 1 ) \ + CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination_stat, 1 ) + #define CDSSTRESS_RWQueue( test_fixture ) \ CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin, 0 ) \ CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic, 1 ) \ @@ -716,7 +746,6 @@ namespace cds_test { #define CDSSTRESS_VyukovQueue( test_fixture ) \ CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn, 0 ) \ - CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_michaelAlloc, 0 ) \ CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic, 1 ) #define CDSSTRESS_StdQueue( test_fixture ) \ diff --git a/test/stress/queue/random.cpp b/test/stress/queue/random.cpp index 2a970dc1..ea30b8eb 100644 --- a/test/stress/queue/random.cpp +++ b/test/stress/queue/random.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/queue/std_queue.h b/test/stress/queue/std_queue.h index 34492341..d943169d 100644 --- a/test/stress/queue/std_queue.h +++ b/test/stress/queue/std_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/delodd/set_delodd.cpp b/test/stress/set/delodd/set_delodd.cpp index 0ad1d671..04c5199e 100644 --- a/test/stress/set/delodd/set_delodd.cpp +++ b/test/stress/set/delodd/set_delodd.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/delodd/set_delodd.h b/test/stress/set/delodd/set_delodd.h index 5400e3e5..45302cd9 100644 --- a/test/stress/set/delodd/set_delodd.h +++ b/test/stress/set/delodd/set_delodd.h @@ -1,7 +1,7 @@ /* 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/ @@ -29,6 +29,7 @@ */ #include "set_type.h" +#include namespace set { @@ -141,13 +142,13 @@ namespace set { template static void prepare_array( std::vector& arr, Pred pred ) { - arr.reserve( m_arrData.size() ); + arr.reserve( m_arrData.size()); for ( auto el : m_arrData ) { - if ( pred( el ) ) + if ( pred( el )) arr.push_back( el ); } - arr.resize( arr.size() ); - shuffle( arr.begin(), arr.end() ); + arr.resize( arr.size()); + shuffle( arr.begin(), arr.end()); } protected: @@ -185,7 +186,7 @@ namespace set { { prepare_array( m_arr, []( size_t ) -> bool { return true; } ); for ( size_t i = 0; i < m_arr.size(); ++i ) { - if ( m_Set.insert( key_type( m_arr[i], id() ) ) ) + if ( m_Set.insert( key_type( m_arr[i], id()))) ++m_nInsertInitSuccess; else ++m_nInsertInitFailed; @@ -230,7 +231,7 @@ namespace set { // insert pass for ( auto el : m_arr ) { if ( el & 1 ) { - if ( rSet.insert( key_type( el, id() ) ) ) + if ( rSet.insert( key_type( el, id()))) ++m_nInsertSuccess; else ++m_nInsertFailed; @@ -243,7 +244,7 @@ namespace set { if ( el & 1 ) { bool success; bool inserted; - std::tie( success, inserted ) = rSet.update( key_type( el, id() ), update_functor() ); + std::tie( success, inserted ) = rSet.update( key_type( el, id()), update_functor()); if ( success && inserted ) ++m_nInsertSuccess; else @@ -394,7 +395,7 @@ namespace set { if ( id() & 1 ) { for ( auto el : m_arr ) { for ( size_t k = 0; k < nInsThreadCount; ++k ) { - if ( rSet.erase( key_type( el, k ) ) ) + if ( rSet.erase( key_type( el, k ))) ++m_nDeleteSuccess; else ++m_nDeleteFailed; @@ -404,7 +405,7 @@ namespace set { else { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( auto el : m_arr ) { - if ( rSet.erase( key_type( el, k ) ) ) + if ( rSet.erase( key_type( el, k ))) ++m_nDeleteSuccess; else ++m_nDeleteFailed; @@ -467,7 +468,7 @@ namespace set { if ( id() & 1 ) { for ( auto el : m_arr ) { for ( size_t k = 0; k < nInsThreadCount; ++k ) { - gp = rSet.extract( key_type( el, k ) ); + gp = rSet.extract( key_type( el, k )); if ( gp ) ++m_nExtractSuccess; else @@ -479,7 +480,7 @@ namespace set { else { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( auto el : m_arr ) { - gp = rSet.extract( key_type( el, k ) ); + gp = rSet.extract( key_type( el, k )); if ( gp ) ++m_nExtractSuccess; else @@ -544,14 +545,14 @@ namespace set { for ( auto el : m_arr ) { if ( Set::c_bExtractLockExternal ) { typename Set::rcu_lock l; - xp = rSet.extract( key_type( el, k ) ); + xp = rSet.extract( key_type( el, k )); if ( xp ) ++m_nExtractSuccess; else ++m_nExtractFailed; } else { - xp = rSet.extract( key_type( el, k ) ); + xp = rSet.extract( key_type( el, k )); if ( xp ) ++m_nExtractSuccess; else @@ -566,14 +567,14 @@ namespace set { for ( size_t k = 0; k < nInsThreadCount; ++k ) { if ( Set::c_bExtractLockExternal ) { typename Set::rcu_lock l; - xp = rSet.extract( key_type( el, k ) ); + xp = rSet.extract( key_type( el, k )); if ( xp ) ++m_nExtractSuccess; else ++m_nExtractFailed; } else { - xp = rSet.extract( key_type( el, k ) ); + xp = rSet.extract( key_type( el, k )); if ( xp ) ++m_nExtractSuccess; else @@ -629,7 +630,7 @@ namespace set { for ( size_t key : arr ) { if ( key & 1 ) { for ( size_t k = 0; k < nInsThreadCount; ++k ) { - if ( set.contains( key_thread( key, k ) ) ) + if ( set.contains( key_thread( key, k ))) ++m_nFindOddSuccess; else ++m_nFindOddFailed; @@ -638,7 +639,7 @@ namespace set { else { // even keys MUST be in the map for ( size_t k = 0; k < nInsThreadCount; ++k ) { - if ( set.contains( key_thread( key, k ) ) ) + if ( set.contains( key_thread( key, k ))) ++m_nFindEvenSuccess; else ++m_nFindEvenFailed; diff --git a/test/stress/set/delodd/set_delodd_cuckoo.cpp b/test/stress/set/delodd/set_delodd_cuckoo.cpp index 66a2434d..7d23dfad 100644 --- a/test/stress/set/delodd/set_delodd_cuckoo.cpp +++ b/test/stress/set/delodd/set_delodd_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/delodd/set_delodd_ellentree.cpp b/test/stress/set/delodd/set_delodd_ellentree.cpp index 02bc582e..49dbfff9 100644 --- a/test/stress/set/delodd/set_delodd_ellentree.cpp +++ b/test/stress/set/delodd/set_delodd_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/delodd/set_delodd_feldman_hashset.cpp b/test/stress/set/delodd/set_delodd_feldman_hashset.cpp index 77da69a0..41a2dd4e 100644 --- a/test/stress/set/delodd/set_delodd_feldman_hashset.cpp +++ b/test/stress/set/delodd/set_delodd_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -46,5 +46,5 @@ namespace set { } CDSSTRESS_FeldmanHashSet_fixed( Set_DelOdd, run_feldman, key_thread, size_t ) - + } // namespace set diff --git a/test/stress/set/delodd/set_delodd_michael.cpp b/test/stress/set/delodd/set_delodd_michael.cpp index 5f8860f6..f41c0157 100644 --- a/test/stress/set/delodd/set_delodd_michael.cpp +++ b/test/stress/set/delodd/set_delodd_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/delodd/set_delodd_skip.cpp b/test/stress/set/delodd/set_delodd_skip.cpp index 994bdfed..f5014ef3 100644 --- a/test/stress/set/delodd/set_delodd_skip.cpp +++ b/test/stress/set/delodd/set_delodd_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/delodd/set_delodd_split.cpp b/test/stress/set/delodd/set_delodd_split.cpp index 1eebe7f0..ce08ba4e 100644 --- a/test/stress/set/delodd/set_delodd_split.cpp +++ b/test/stress/set/delodd/set_delodd_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind.cpp b/test/stress/set/insdel_find/set_insdelfind.cpp index c02691c2..33b3a31f 100644 --- a/test/stress/set/insdel_find/set_insdelfind.cpp +++ b/test/stress/set/insdel_find/set_insdelfind.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind.h b/test/stress/set/insdel_find/set_insdelfind.h index 5989ba49..4cd0bab1 100644 --- a/test/stress/set/insdel_find/set_insdelfind.h +++ b/test/stress/set/insdel_find/set_insdelfind.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_cuckoo.cpp b/test/stress/set/insdel_find/set_insdelfind_cuckoo.cpp index 360cbdb5..c33b75b6 100644 --- a/test/stress/set/insdel_find/set_insdelfind_cuckoo.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_ellentree.cpp b/test/stress/set/insdel_find/set_insdelfind_ellentree.cpp index 3dd193c3..79c4234f 100644 --- a/test/stress/set/insdel_find/set_insdelfind_ellentree.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_feldman_hashset.cpp b/test/stress/set/insdel_find/set_insdelfind_feldman_hashset.cpp index c0fac631..e157aa98 100644 --- a/test/stress/set/insdel_find/set_insdelfind_feldman_hashset.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_michael.cpp b/test/stress/set/insdel_find/set_insdelfind_michael.cpp index 5d22fa37..7b5730b3 100644 --- a/test/stress/set/insdel_find/set_insdelfind_michael.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_skip.cpp b/test/stress/set/insdel_find/set_insdelfind_skip.cpp index 98c0ff2c..9b0e3727 100644 --- a/test/stress/set/insdel_find/set_insdelfind_skip.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_split.cpp b/test/stress/set/insdel_find/set_insdelfind_split.cpp index 2b499efc..493988f2 100644 --- a/test/stress/set/insdel_find/set_insdelfind_split.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_std.cpp b/test/stress/set/insdel_find/set_insdelfind_std.cpp index 23023b61..29cba79e 100644 --- a/test/stress/set/insdel_find/set_insdelfind_std.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_find/set_insdelfind_striped.cpp b/test/stress/set/insdel_find/set_insdelfind_striped.cpp index 64a7ee41..a48fe112 100644 --- a/test/stress/set/insdel_find/set_insdelfind_striped.cpp +++ b/test/stress/set/insdel_find/set_insdelfind_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func.cpp b/test/stress/set/insdel_func/set_insdel_func.cpp index 140d7dff..3fcbdac3 100644 --- a/test/stress/set/insdel_func/set_insdel_func.cpp +++ b/test/stress/set/insdel_func/set_insdel_func.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func.h b/test/stress/set/insdel_func/set_insdel_func.h index 20e88f13..d7b4439c 100644 --- a/test/stress/set/insdel_func/set_insdel_func.h +++ b/test/stress/set/insdel_func/set_insdel_func.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func_cuckoo.cpp b/test/stress/set/insdel_func/set_insdel_func_cuckoo.cpp index e49f1b09..be47e980 100644 --- a/test/stress/set/insdel_func/set_insdel_func_cuckoo.cpp +++ b/test/stress/set/insdel_func/set_insdel_func_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func_ellentree.cpp b/test/stress/set/insdel_func/set_insdel_func_ellentree.cpp index e6d196a7..42235d53 100644 --- a/test/stress/set/insdel_func/set_insdel_func_ellentree.cpp +++ b/test/stress/set/insdel_func/set_insdel_func_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func_feldman_hashset.cpp b/test/stress/set/insdel_func/set_insdel_func_feldman_hashset.cpp index e0f04b2c..b918eb2b 100644 --- a/test/stress/set/insdel_func/set_insdel_func_feldman_hashset.cpp +++ b/test/stress/set/insdel_func/set_insdel_func_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func_michael.cpp b/test/stress/set/insdel_func/set_insdel_func_michael.cpp index 704427e5..bef62825 100644 --- a/test/stress/set/insdel_func/set_insdel_func_michael.cpp +++ b/test/stress/set/insdel_func/set_insdel_func_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func_skip.cpp b/test/stress/set/insdel_func/set_insdel_func_skip.cpp index 50237340..10272191 100644 --- a/test/stress/set/insdel_func/set_insdel_func_skip.cpp +++ b/test/stress/set/insdel_func/set_insdel_func_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func_split.cpp b/test/stress/set/insdel_func/set_insdel_func_split.cpp index 6a889ad1..a752c4d2 100644 --- a/test/stress/set/insdel_func/set_insdel_func_split.cpp +++ b/test/stress/set/insdel_func/set_insdel_func_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_func/set_insdel_func_striped.cpp b/test/stress/set/insdel_func/set_insdel_func_striped.cpp index 75b521c3..281e926b 100644 --- a/test/stress/set/insdel_func/set_insdel_func_striped.cpp +++ b/test/stress/set/insdel_func/set_insdel_func_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string.cpp b/test/stress/set/insdel_string/set_insdel_string.cpp index eede8e39..4690a4ec 100644 --- a/test/stress/set/insdel_string/set_insdel_string.cpp +++ b/test/stress/set/insdel_string/set_insdel_string.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string.h b/test/stress/set/insdel_string/set_insdel_string.h index 6e03537d..ad1a1b63 100644 --- a/test/stress/set/insdel_string/set_insdel_string.h +++ b/test/stress/set/insdel_string/set_insdel_string.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_cuckoo.cpp b/test/stress/set/insdel_string/set_insdel_string_cuckoo.cpp index ffe37245..a4cb6afd 100644 --- a/test/stress/set/insdel_string/set_insdel_string_cuckoo.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_cuckoo.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_ellentree.cpp b/test/stress/set/insdel_string/set_insdel_string_ellentree.cpp index 1a21b51f..13c9e043 100644 --- a/test/stress/set/insdel_string/set_insdel_string_ellentree.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_ellentree.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_feldman_hashset.cpp b/test/stress/set/insdel_string/set_insdel_string_feldman_hashset.cpp index 7e7c4069..94f1d6d5 100644 --- a/test/stress/set/insdel_string/set_insdel_string_feldman_hashset.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_michael.cpp b/test/stress/set/insdel_string/set_insdel_string_michael.cpp index d666a60a..d0c181b0 100644 --- a/test/stress/set/insdel_string/set_insdel_string_michael.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_skip.cpp b/test/stress/set/insdel_string/set_insdel_string_skip.cpp index f3c632a7..1b6a7241 100644 --- a/test/stress/set/insdel_string/set_insdel_string_skip.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_skip.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_split.cpp b/test/stress/set/insdel_string/set_insdel_string_split.cpp index 7308e285..8d9ff713 100644 --- a/test/stress/set/insdel_string/set_insdel_string_split.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_std.cpp b/test/stress/set/insdel_string/set_insdel_string_std.cpp index f5849b68..6db7384a 100644 --- a/test/stress/set/insdel_string/set_insdel_string_std.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_std.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/insdel_string/set_insdel_string_striped.cpp b/test/stress/set/insdel_string/set_insdel_string_striped.cpp index 8dce1eb0..f6523562 100644 --- a/test/stress/set/insdel_string/set_insdel_string_striped.cpp +++ b/test/stress/set/insdel_string/set_insdel_string_striped.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/iteration/set_iteration.cpp b/test/stress/set/iteration/set_iteration.cpp index 7484b5fc..888a620d 100644 --- a/test/stress/set/iteration/set_iteration.cpp +++ b/test/stress/set/iteration/set_iteration.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/iteration/set_iteration.h b/test/stress/set/iteration/set_iteration.h index 127e47a2..2be247d3 100644 --- a/test/stress/set/iteration/set_iteration.h +++ b/test/stress/set/iteration/set_iteration.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/iteration/set_iteration_feldman_hashset.cpp b/test/stress/set/iteration/set_iteration_feldman_hashset.cpp index ed772d2b..fb0ff3af 100644 --- a/test/stress/set/iteration/set_iteration_feldman_hashset.cpp +++ b/test/stress/set/iteration/set_iteration_feldman_hashset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/iteration/set_iteration_michael.cpp b/test/stress/set/iteration/set_iteration_michael.cpp index 058d8e2e..f603e70b 100644 --- a/test/stress/set/iteration/set_iteration_michael.cpp +++ b/test/stress/set/iteration/set_iteration_michael.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/iteration/set_iteration_split.cpp b/test/stress/set/iteration/set_iteration_split.cpp index 1d22d713..d9b7b776 100644 --- a/test/stress/set/iteration/set_iteration_split.cpp +++ b/test/stress/set/iteration/set_iteration_split.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/set_type.h b/test/stress/set/set_type.h index 3d0edd7c..20a6369b 100644 --- a/test/stress/set/set_type.h +++ b/test/stress/set/set_type.h @@ -1,7 +1,7 @@ /* 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/ @@ -41,7 +41,6 @@ #include #include -#include "framework/michael_alloc.h" namespace set { namespace cc = cds::container; diff --git a/test/stress/set/set_type_cuckoo.h b/test/stress/set/set_type_cuckoo.h index dd76322d..9592b195 100644 --- a/test/stress/set/set_type_cuckoo.h +++ b/test/stress/set/set_type_cuckoo.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/set_type_ellen_bintree.h b/test/stress/set/set_type_ellen_bintree.h index 84cbcf1e..394c2eb4 100644 --- a/test/stress/set/set_type_ellen_bintree.h +++ b/test/stress/set/set_type_ellen_bintree.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/set_type_feldman_hashset.h b/test/stress/set/set_type_feldman_hashset.h index a0e3527c..d5af2587 100644 --- a/test/stress/set/set_type_feldman_hashset.h +++ b/test/stress/set/set_type_feldman_hashset.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/set_type_iterable_list.h b/test/stress/set/set_type_iterable_list.h index 3840bd16..df316ac8 100644 --- a/test/stress/set/set_type_iterable_list.h +++ b/test/stress/set/set_type_iterable_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -46,93 +46,51 @@ namespace set { typedef typename set_type_base< Key, Val >::compare compare; typedef typename set_type_base< Key, Val >::less less; - struct traits_IterableList_cmp_stdAlloc: + struct traits_IterableList_cmp: public cc::iterable_list::make_traits< co::compare< compare > >::type {}; - typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_cmp_stdAlloc > IterableList_HP_cmp_stdAlloc; - typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_cmp_stdAlloc > IterableList_DHP_cmp_stdAlloc; - //typedef cc::IterableList< rcu_gpi, key_val, traits_IterableList_cmp_stdAlloc > IterableList_RCU_GPI_cmp_stdAlloc; - //typedef cc::IterableList< rcu_gpb, key_val, traits_IterableList_cmp_stdAlloc > IterableList_RCU_GPB_cmp_stdAlloc; - //typedef cc::IterableList< rcu_gpt, key_val, traits_IterableList_cmp_stdAlloc > IterableList_RCU_GPT_cmp_stdAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef cc::IterableList< rcu_shb, key_val, traits_IterableList_cmp_stdAlloc > IterableList_RCU_SHB_cmp_stdAlloc; - //typedef cc::IterableList< rcu_sht, key_val, traits_IterableList_cmp_stdAlloc > IterableList_RCU_SHT_cmp_stdAlloc; -#endif - - struct traits_IterableList_cmp_stdAlloc_stat: public traits_IterableList_cmp_stdAlloc + typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_cmp > IterableList_HP_cmp; + typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_cmp > IterableList_DHP_cmp; + + struct traits_IterableList_cmp_stat: public traits_IterableList_cmp { typedef cc::iterable_list::stat<> stat; }; - typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_cmp_stdAlloc_stat > IterableList_HP_cmp_stdAlloc_stat; - typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_cmp_stdAlloc_stat > IterableList_DHP_cmp_stdAlloc_stat; - //typedef cc::IterableList< rcu_gpi, key_val, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_GPI_cmp_stdAlloc_stat; - //typedef cc::IterableList< rcu_gpb, key_val, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_GPB_cmp_stdAlloc_stat; - //typedef cc::IterableList< rcu_gpt, key_val, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_GPT_cmp_stdAlloc_stat; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef cc::IterableList< rcu_shb, key_val, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_SHB_cmp_stdAlloc_stat; - //typedef cc::IterableList< rcu_sht, key_val, traits_IterableList_cmp_stdAlloc_stat > IterableList_RCU_SHT_cmp_stdAlloc_stat; -#endif - - struct traits_IterableList_cmp_stdAlloc_seqcst : public traits_IterableList_cmp_stdAlloc + typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_cmp_stat > IterableList_HP_cmp_stat; + typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_cmp_stat > IterableList_DHP_cmp_stat; + + struct traits_IterableList_cmp_seqcst : public traits_IterableList_cmp { typedef co::v::sequential_consistent memory_model; }; - typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_HP_cmp_stdAlloc_seqcst; - typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_DHP_cmp_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_gpi, key_val, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_GPI_cmp_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_gpb, key_val, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_GPB_cmp_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_gpt, key_val, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_GPT_cmp_stdAlloc_seqcst; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef cc::IterableList< rcu_shb, key_val, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_SHB_cmp_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_sht, key_val, traits_IterableList_cmp_stdAlloc_seqcst > IterableList_RCU_SHT_cmp_stdAlloc_seqcst; -#endif - - struct traits_IterableList_less_stdAlloc : + typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_cmp_seqcst > IterableList_HP_cmp_seqcst; + typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_cmp_seqcst > IterableList_DHP_cmp_seqcst; + + struct traits_IterableList_less : public cc::iterable_list::make_traits< co::less< less > >::type {}; - typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_less_stdAlloc > IterableList_HP_less_stdAlloc; - typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_less_stdAlloc > IterableList_DHP_less_stdAlloc; - //typedef cc::IterableList< rcu_gpi, key_val, traits_IterableList_less_stdAlloc > IterableList_RCU_GPI_less_stdAlloc; - //typedef cc::IterableList< rcu_gpb, key_val, traits_IterableList_less_stdAlloc > IterableList_RCU_GPB_less_stdAlloc; - //typedef cc::IterableList< rcu_gpt, key_val, traits_IterableList_less_stdAlloc > IterableList_RCU_GPT_less_stdAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef cc::IterableList< rcu_shb, key_val, traits_IterableList_less_stdAlloc > IterableList_RCU_SHB_less_stdAlloc; - //typedef cc::IterableList< rcu_sht, key_val, traits_IterableList_less_stdAlloc > IterableList_RCU_SHT_less_stdAlloc; -#endif - - struct traits_IterableList_less_stdAlloc_stat : public traits_IterableList_less_stdAlloc + typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_less > IterableList_HP_less; + typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_less > IterableList_DHP_less; + + struct traits_IterableList_less_stat : public traits_IterableList_less { typedef cc::iterable_list::stat<> stat; }; - typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_less_stdAlloc_stat > IterableList_HP_less_stdAlloc_stat; - typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_less_stdAlloc_stat > IterableList_DHP_less_stdAlloc_stat; - //typedef cc::IterableList< rcu_gpi, key_val, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_GPI_less_stdAlloc_stat; - //typedef cc::IterableList< rcu_gpb, key_val, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_GPB_less_stdAlloc_stat; - //typedef cc::IterableList< rcu_gpt, key_val, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_GPT_less_stdAlloc_stat; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef cc::IterableList< rcu_shb, key_val, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_SHB_less_stdAlloc_stat; - //typedef cc::IterableList< rcu_sht, key_val, traits_IterableList_less_stdAlloc_stat > IterableList_RCU_SHT_less_stdAlloc_stat; -#endif - - struct traits_IterableList_less_stdAlloc_seqcst : + typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_less_stat > IterableList_HP_less_stat; + typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_less_stat > IterableList_DHP_less_stat; + + struct traits_IterableList_less_seqcst : public cc::iterable_list::make_traits< co::less< less > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_less_stdAlloc_seqcst > IterableList_HP_less_stdAlloc_seqcst; - typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_less_stdAlloc_seqcst > IterableList_DHP_less_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_gpi, key_val, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_GPI_less_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_gpb, key_val, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_GPB_less_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_gpt, key_val, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_GPT_less_stdAlloc_seqcst; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef cc::IterableList< rcu_shb, key_val, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_SHB_less_stdAlloc_seqcst; - //typedef cc::IterableList< rcu_sht, key_val, traits_IterableList_less_stdAlloc_seqcst > IterableList_RCU_SHT_less_stdAlloc_seqcst; -#endif + typedef cc::IterableList< cds::gc::HP, key_val, traits_IterableList_less_seqcst > IterableList_HP_less_seqcst; + typedef cc::IterableList< cds::gc::DHP, key_val, traits_IterableList_less_seqcst > IterableList_DHP_less_seqcst; }; diff --git a/test/stress/set/set_type_lazy_list.h b/test/stress/set/set_type_lazy_list.h index df4afaef..ecd36ad8 100644 --- a/test/stress/set/set_type_lazy_list.h +++ b/test/stress/set/set_type_lazy_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -46,126 +46,96 @@ namespace set { typedef typename set_type_base< Key, Val >::compare compare; typedef typename set_type_base< Key, Val >::less less; - struct traits_LazyList_cmp_stdAlloc : + struct traits_LazyList_cmp : public cc::lazy_list::make_traits< co::compare< compare > >::type {}; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc; + typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp > LazyList_HP_cmp; + typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp > LazyList_DHP_cmp; + typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp > LazyList_RCU_GPI_cmp; + typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp > LazyList_RCU_GPB_cmp; + typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp > LazyList_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc; + typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp > LazyList_RCU_SHB_cmp; + typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp > LazyList_RCU_SHT_cmp; #endif - struct traits_LazyList_cmp_stdAlloc_stat : public traits_LazyList_cmp_stdAlloc + struct traits_LazyList_cmp_stat : public traits_LazyList_cmp { typedef cc::lazy_list::stat<> stat; }; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc_stat > LazyList_HP_cmp_stdAlloc_stat; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc_stat > LazyList_DHP_cmp_stdAlloc_stat; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_GPI_cmp_stdAlloc_stat; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_GPB_cmp_stdAlloc_stat; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_GPT_cmp_stdAlloc_stat; + typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stat > LazyList_HP_cmp_stat; + typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stat > LazyList_DHP_cmp_stat; + typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stat > LazyList_RCU_GPI_cmp_stat; + typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stat > LazyList_RCU_GPB_cmp_stat; + typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stat > LazyList_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_SHB_cmp_stdAlloc_stat; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc_stat > LazyList_RCU_SHT_cmp_stdAlloc_stat; + typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stat > LazyList_RCU_SHB_cmp_stat; + typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stat > LazyList_RCU_SHT_cmp_stat; #endif - struct traits_LazyList_cmp_stdAlloc_seqcst : + struct traits_LazyList_cmp_seqcst : public cc::lazy_list::make_traits< co::compare< compare > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst; + typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_seqcst > LazyList_HP_cmp_seqcst; + typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_seqcst > LazyList_DHP_cmp_seqcst; + typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_seqcst > LazyList_RCU_GPI_cmp_seqcst; + typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_seqcst > LazyList_RCU_GPB_cmp_seqcst; + typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_seqcst > LazyList_RCU_GPT_cmp_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst; -#endif - struct traits_LazyList_cmp_michaelAlloc : - public cc::lazy_list::make_traits< - co::compare< compare >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc; + typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_seqcst > LazyList_RCU_SHB_cmp_seqcst; + typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_seqcst > LazyList_RCU_SHT_cmp_seqcst; #endif - struct traits_LazyList_less_stdAlloc: + struct traits_LazyList_less: public cc::lazy_list::make_traits< co::less< less > >::type {}; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc; + typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less > LazyList_HP_less; + typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less > LazyList_DHP_less; + typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less > LazyList_RCU_GPI_less; + typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less > LazyList_RCU_GPB_less; + typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less > LazyList_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc; + typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less > LazyList_RCU_SHB_less; + typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less > LazyList_RCU_SHT_less; #endif - struct traits_LazyList_less_stdAlloc_stat: public traits_LazyList_less_stdAlloc + struct traits_LazyList_less_stat: public traits_LazyList_less { typedef cc::lazy_list::stat<> stat; }; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc_stat > LazyList_HP_less_stdAlloc_stat; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc_stat > LazyList_DHP_less_stdAlloc_stat; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_GPI_less_stdAlloc_stat; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_GPB_less_stdAlloc_stat; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_GPT_less_stdAlloc_stat; + typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stat > LazyList_HP_less_stat; + typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stat > LazyList_DHP_less_stat; + typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stat > LazyList_RCU_GPI_less_stat; + typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stat > LazyList_RCU_GPB_less_stat; + typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stat > LazyList_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_SHB_less_stdAlloc_stat; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc_stat > LazyList_RCU_SHT_less_stdAlloc_stat; + typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stat > LazyList_RCU_SHB_less_stat; + typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stat > LazyList_RCU_SHT_less_stat; #endif - struct traits_LazyList_less_stdAlloc_seqcst : + struct traits_LazyList_less_seqcst : public cc::lazy_list::make_traits< co::less< less > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst; + typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_seqcst > LazyList_HP_less_seqcst; + typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_seqcst > LazyList_DHP_less_seqcst; + typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_seqcst > LazyList_RCU_GPI_less_seqcst; + typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_seqcst > LazyList_RCU_GPB_less_seqcst; + typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_seqcst > LazyList_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst; + typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_seqcst > LazyList_RCU_SHB_less_seqcst; + typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_seqcst > LazyList_RCU_SHT_less_seqcst; #endif - struct traits_LazyList_less_michaelAlloc : - public cc::lazy_list::make_traits< - co::less< less >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc; - typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc; - typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc; - typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc; - typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc; - typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc; -#endif }; } // namespace set diff --git a/test/stress/set/set_type_michael.h b/test/stress/set/set_type_michael.h index ebf6567b..eddb33e3 100644 --- a/test/stress/set/set_type_michael.h +++ b/test/stress/set/set_type_michael.h @@ -1,7 +1,7 @@ /* 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/ @@ -42,8 +42,6 @@ #include #include -#include - namespace set { template @@ -78,85 +76,59 @@ namespace set { typedef michael_list_type< Key, Val > ml; - struct traits_MichaelSet_stdAlloc : + struct traits_MichaelSet : public cc::michael_set::make_traits< co::hash< hash > >::type {}; - typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_cmp_stdAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_cmp_stdAlloc; - typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_cmp_stdAlloc; - typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_cmp_stdAlloc; - typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_cmp_stdAlloc; + typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_cmp, traits_MichaelSet > MichaelSet_HP_cmp; + typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp, traits_MichaelSet > MichaelSet_DHP_cmp; + typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp, traits_MichaelSet > MichaelSet_RCU_GPI_cmp; + typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp, traits_MichaelSet > MichaelSet_RCU_GPB_cmp; + typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp, traits_MichaelSet > MichaelSet_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_cmp_stdAlloc; - typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_cmp_stdAlloc; + typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp, traits_MichaelSet > MichaelSet_RCU_SHB_cmp; + typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp, traits_MichaelSet > MichaelSet_RCU_SHT_cmp; #endif - typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_HP_cmp_stdAlloc_stat; - typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_DHP_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_cmp_stdAlloc_stat; + typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_cmp_stat, traits_MichaelSet > MichaelSet_HP_cmp_stat; + typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stat, traits_MichaelSet > MichaelSet_DHP_cmp_stat; + typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stat, traits_MichaelSet > MichaelSet_RCU_GPI_cmp_stat; + typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stat, traits_MichaelSet > MichaelSet_RCU_GPB_cmp_stat; + typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stat, traits_MichaelSet > MichaelSet_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_cmp_stdAlloc_stat; + typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stat, traits_MichaelSet > MichaelSet_RCU_SHB_cmp_stat; + typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stat, traits_MichaelSet > MichaelSet_RCU_SHT_cmp_stat; #endif - typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc; - typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc; - typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc; - typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc; + typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less, traits_MichaelSet > MichaelSet_HP_less; + typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less, traits_MichaelSet > MichaelSet_DHP_less; + typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less, traits_MichaelSet > MichaelSet_RCU_GPI_less; + typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less, traits_MichaelSet > MichaelSet_RCU_GPB_less; + typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less, traits_MichaelSet > MichaelSet_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc; - typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc; + typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less, traits_MichaelSet > MichaelSet_RCU_SHB_less; + typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less, traits_MichaelSet > MichaelSet_RCU_SHT_less; #endif - typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc_stat; - typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc_stat; + typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stat, traits_MichaelSet > MichaelSet_HP_less_stat; + typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stat, traits_MichaelSet > MichaelSet_DHP_less_stat; + typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stat, traits_MichaelSet > MichaelSet_RCU_GPI_less_stat; + typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stat, traits_MichaelSet > MichaelSet_RCU_GPB_less_stat; + typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stat, traits_MichaelSet > MichaelSet_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc_stat; + typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stat, traits_MichaelSet > MichaelSet_RCU_SHB_less_stat; + typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stat, traits_MichaelSet > MichaelSet_RCU_SHT_less_stat; #endif - typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc_seqcst; - typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc_seqcst; + typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_seqcst, traits_MichaelSet > MichaelSet_HP_less_seqcst; + typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_seqcst, traits_MichaelSet > MichaelSet_DHP_less_seqcst; + typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_seqcst, traits_MichaelSet > MichaelSet_RCU_GPI_less_seqcst; + typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_seqcst, traits_MichaelSet > MichaelSet_RCU_GPB_less_seqcst; + typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_seqcst, traits_MichaelSet > MichaelSet_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc_seqcst; -#endif - - struct traits_MichaelSet_michaelAlloc : - public cc::michael_set::make_traits< - co::hash< hash >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_cmp_michaelAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_cmp_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_cmp_michaelAlloc; -#endif - - typedef MichaelHashSet< cds::gc::HP, typename ml::MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_less_michaelAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ml::MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_less_michaelAlloc; - typedef MichaelHashSet< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_less_michaelAlloc; - typedef MichaelHashSet< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_less_michaelAlloc; - typedef MichaelHashSet< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_less_michaelAlloc; - typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_less_michaelAlloc; + typedef MichaelHashSet< rcu_shb, typename ml::MichaelList_RCU_SHB_less_seqcst, traits_MichaelSet > MichaelSet_RCU_SHB_less_seqcst; + typedef MichaelHashSet< rcu_sht, typename ml::MichaelList_RCU_SHT_less_seqcst, traits_MichaelSet > MichaelSet_RCU_SHT_less_seqcst; #endif @@ -165,74 +137,54 @@ namespace set { typedef lazy_list_type< Key, Val > ll; - typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_cmp_stdAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_cmp_stdAlloc; - typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc; - typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc; - typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc; - typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc; -#endif - - typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_cmp_stdAlloc_stat; - typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc_stat; + typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp, traits_MichaelSet > MichaelSet_Lazy_HP_cmp; + typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp, traits_MichaelSet > MichaelSet_Lazy_DHP_cmp; + typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp, traits_MichaelSet > MichaelSet_Lazy_RCU_GPI_cmp; + typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp, traits_MichaelSet > MichaelSet_Lazy_RCU_GPB_cmp; + typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp, traits_MichaelSet > MichaelSet_Lazy_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc_stat; - typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc_stat; + typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp, traits_MichaelSet > MichaelSet_Lazy_RCU_SHB_cmp; + typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp, traits_MichaelSet > MichaelSet_Lazy_RCU_SHT_cmp; #endif - typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc; - typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc; - typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc; - typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc; + typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_stat, traits_MichaelSet > MichaelSet_Lazy_HP_cmp_stat; + typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stat, traits_MichaelSet > MichaelSet_Lazy_DHP_cmp_stat; + typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_GPI_cmp_stat; + typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_GPB_cmp_stat; + typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc; - typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc; + typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_SHB_cmp_stat; + typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_SHT_cmp_stat; #endif - typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc_stat; - typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_stat; + typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less, traits_MichaelSet > MichaelSet_Lazy_HP_less; + typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less, traits_MichaelSet > MichaelSet_Lazy_DHP_less; + typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less, traits_MichaelSet > MichaelSet_Lazy_RCU_GPI_less; + typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less, traits_MichaelSet > MichaelSet_Lazy_RCU_GPB_less; + typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less, traits_MichaelSet > MichaelSet_Lazy_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_stat; - typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_stat; + typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less, traits_MichaelSet > MichaelSet_Lazy_RCU_SHB_less; + typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less, traits_MichaelSet > MichaelSet_Lazy_RCU_SHT_less; #endif - typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc_seqcst; - typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst; + typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_stat, traits_MichaelSet > MichaelSet_Lazy_HP_less_stat; + typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_stat, traits_MichaelSet > MichaelSet_Lazy_DHP_less_stat; + typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_GPI_less_stat; + typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_GPB_less_stat; + typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst; - typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst; + typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_SHB_less_stat; + typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_stat, traits_MichaelSet > MichaelSet_Lazy_RCU_SHT_less_stat; #endif - typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_cmp_michaelAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc; + typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_seqcst, traits_MichaelSet > MichaelSet_Lazy_HP_less_seqcst; + typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_seqcst, traits_MichaelSet > MichaelSet_Lazy_DHP_less_seqcst; + typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_seqcst, traits_MichaelSet > MichaelSet_Lazy_RCU_GPI_less_seqcst; + typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_seqcst, traits_MichaelSet > MichaelSet_Lazy_RCU_GPB_less_seqcst; + typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_seqcst, traits_MichaelSet > MichaelSet_Lazy_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc; - typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc; -#endif - - typedef MichaelHashSet< cds::gc::HP, typename ll::LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_less_michaelAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename ll::LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_less_michaelAlloc; - typedef MichaelHashSet< rcu_gpi, typename ll::LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc; - typedef MichaelHashSet< rcu_gpb, typename ll::LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc; - typedef MichaelHashSet< rcu_gpt, typename ll::LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc; - typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc; + typedef MichaelHashSet< rcu_shb, typename ll::LazyList_RCU_SHB_less_seqcst, traits_MichaelSet > MichaelSet_Lazy_RCU_SHB_less_seqcst; + typedef MichaelHashSet< rcu_sht, typename ll::LazyList_RCU_SHT_less_seqcst, traits_MichaelSet > MichaelSet_Lazy_RCU_SHT_less_seqcst; #endif @@ -241,55 +193,20 @@ namespace set { typedef iterable_list_type< Key, Val > il; - typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_HP_cmp_stdAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_DHP_cmp_stdAlloc; - //typedef MichaelHashSet< rcu_gpi, typename il::IterableList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPI_cmp_stdAlloc; - //typedef MichaelHashSet< rcu_gpb, typename il::IterableList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPB_cmp_stdAlloc; - //typedef MichaelHashSet< rcu_gpt, typename il::IterableList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPT_cmp_stdAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef MichaelHashSet< rcu_shb, typename il::IterableList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHB_cmp_stdAlloc; - //typedef MichaelHashSet< rcu_sht, typename il::IterableList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHT_cmp_stdAlloc; -#endif + typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_cmp, traits_MichaelSet > MichaelSet_Iterable_HP_cmp; + typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_cmp, traits_MichaelSet > MichaelSet_Iterable_DHP_cmp; - typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_HP_cmp_stdAlloc_stat; - typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_DHP_cmp_stdAlloc_stat; - //typedef MichaelHashSet< rcu_gpi, typename il::IterableList_RCU_GPI_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPI_cmp_stdAlloc_stat; - //typedef MichaelHashSet< rcu_gpb, typename il::IterableList_RCU_GPB_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPB_cmp_stdAlloc_stat; - //typedef MichaelHashSet< rcu_gpt, typename il::IterableList_RCU_GPT_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPT_cmp_stdAlloc_stat; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef MichaelHashSet< rcu_shb, typename il::IterableList_RCU_SHB_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHB_cmp_stdAlloc_stat; - //typedef MichaelHashSet< rcu_sht, typename il::IterableList_RCU_SHT_cmp_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHT_cmp_stdAlloc_stat; -#endif + typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_cmp_stat, traits_MichaelSet > MichaelSet_Iterable_HP_cmp_stat; + typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_cmp_stat, traits_MichaelSet > MichaelSet_Iterable_DHP_cmp_stat; - typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_HP_less_stdAlloc; - typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_DHP_less_stdAlloc; - //typedef MichaelHashSet< rcu_gpi, typename il::IterableList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPI_less_stdAlloc; - //typedef MichaelHashSet< rcu_gpb, typename il::IterableList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPB_less_stdAlloc; - //typedef MichaelHashSet< rcu_gpt, typename il::IterableList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPT_less_stdAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef MichaelHashSet< rcu_shb, typename il::IterableList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHB_less_stdAlloc; - //typedef MichaelHashSet< rcu_sht, typename il::IterableList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHT_less_stdAlloc; -#endif + typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_less, traits_MichaelSet > MichaelSet_Iterable_HP_less; + typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_less, traits_MichaelSet > MichaelSet_Iterable_DHP_less; - typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_HP_less_stdAlloc_stat; - typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_DHP_less_stdAlloc_stat; - //typedef MichaelHashSet< rcu_gpi, typename il::IterableList_RCU_GPI_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPI_less_stdAlloc_stat; - //typedef MichaelHashSet< rcu_gpb, typename il::IterableList_RCU_GPB_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPB_less_stdAlloc_stat; - //typedef MichaelHashSet< rcu_gpt, typename il::IterableList_RCU_GPT_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPT_less_stdAlloc_stat; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef MichaelHashSet< rcu_shb, typename il::IterableList_RCU_SHB_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHB_less_stdAlloc_stat; - //typedef MichaelHashSet< rcu_sht, typename il::IterableList_RCU_SHT_less_stdAlloc_stat, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHT_less_stdAlloc_stat; -#endif + typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_less_stat, traits_MichaelSet > MichaelSet_Iterable_HP_less_stat; + typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_less_stat, traits_MichaelSet > MichaelSet_Iterable_DHP_less_stat; - typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_HP_less_stdAlloc_seqcst; - typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_DHP_less_stdAlloc_seqcst; - //typedef MichaelHashSet< rcu_gpi, typename il::IterableList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPI_less_stdAlloc_seqcst; - //typedef MichaelHashSet< rcu_gpb, typename il::IterableList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPB_less_stdAlloc_seqcst; - //typedef MichaelHashSet< rcu_gpt, typename il::IterableList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_GPT_less_stdAlloc_seqcst; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - //typedef MichaelHashSet< rcu_shb, typename il::IterableList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHB_less_stdAlloc_seqcst; - //typedef MichaelHashSet< rcu_sht, typename il::IterableList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Iterable_RCU_SHT_less_stdAlloc_seqcst; -#endif + typedef MichaelHashSet< cds::gc::HP, typename il::IterableList_HP_less_seqcst, traits_MichaelSet > MichaelSet_Iterable_HP_less_seqcst; + typedef MichaelHashSet< cds::gc::DHP, typename il::IterableList_DHP_less_seqcst, traits_MichaelSet > MichaelSet_Iterable_DHP_less_seqcst; }; @@ -312,40 +229,32 @@ namespace set { #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED # define CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_less_michaelAlloc, key_type, value_type, 0 ) + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHB_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_SHT_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHB_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_SHT_less_stat, key_type, value_type, 1 ) \ # define CDSSTRESS_MichaelIterableSet_SHRCU( fixture, test_case, key_type, value_type ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_less_stdAlloc_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHB_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_SHT_less_stat, key_type, value_type, 1 ) \ #else # define CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type ) @@ -354,89 +263,56 @@ namespace set { #define CDSSTRESS_MichaelSet( fixture, test_case, key_type, value_type ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less_michaelAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less_michaelAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less_michaelAlloc, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_HP_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_DHP_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPI_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPB_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_RCU_GPT_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_HP_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_DHP_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less_stat, key_type, value_type, 0 ) \ CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type ) #define CDSSTRESS_MichaelIterableSet( fixture, test_case, key_type, value_type ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_cmp_stdAlloc, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_cmp_stdAlloc, key_type, value_type, 1 ) \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPI_cmp_stdAlloc, key_type, value_type, 0 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPB_cmp_stdAlloc, key_type, value_type, 1 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPT_cmp_stdAlloc, key_type, value_type, 0 )*/ \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_cmp_stdAlloc_stat, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_cmp_stdAlloc_stat, key_type, value_type, 0 ) \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPI_cmp_stdAlloc_stat, key_type, value_type, 1 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPB_cmp_stdAlloc_stat, key_type, value_type, 0 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPT_cmp_stdAlloc_stat, key_type, value_type, 1 )*/ \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_less_stdAlloc, key_type, value_type, 1 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_less_stdAlloc, key_type, value_type, 0 ) \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPI_less_stdAlloc, key_type, value_type, 1 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPB_less_stdAlloc, key_type, value_type, 0 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPT_less_stdAlloc, key_type, value_type, 1 )*/ \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_less_stdAlloc_stat, key_type, value_type, 0 ) \ - CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_less_stdAlloc_stat, key_type, value_type, 1 ) \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPI_less_stdAlloc_stat, key_type, value_type, 0 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPB_less_stdAlloc_stat, key_type, value_type, 1 )*/ \ - /*CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_RCU_GPT_less_stdAlloc_stat, key_type, value_type, 0 )*/ \ - /*CDSSTRESS_MichaelIterableSet_SHRCU( fixture, test_case, key_type, value_type )*/ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_cmp, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_cmp, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_cmp_stat, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_cmp_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_less, key_type, value_type, 1 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_less, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_HP_less_stat, key_type, value_type, 0 ) \ + CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_less_stat, key_type, value_type, 1 ) \ #endif // #ifndef CDSUNIT_SET_TYPE_MICHAEL_H diff --git a/test/stress/set/set_type_michael_list.h b/test/stress/set/set_type_michael_list.h index 64069c45..9bfdd355 100644 --- a/test/stress/set/set_type_michael_list.h +++ b/test/stress/set/set_type_michael_list.h @@ -1,7 +1,7 @@ /* 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/ @@ -46,125 +46,94 @@ namespace set { typedef typename set_type_base< Key, Val >::compare compare; typedef typename set_type_base< Key, Val >::less less; - struct traits_MichaelList_cmp_stdAlloc: + struct traits_MichaelList_cmp: public cc::michael_list::make_traits< co::compare< compare > >::type {}; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc; + typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp > MichaelList_HP_cmp; + typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp > MichaelList_DHP_cmp; + typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp > MichaelList_RCU_GPI_cmp; + typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp > MichaelList_RCU_GPB_cmp; + typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp > MichaelList_RCU_GPT_cmp; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc; + typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp > MichaelList_RCU_SHB_cmp; + typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp > MichaelList_RCU_SHT_cmp; #endif - struct traits_MichaelList_cmp_stdAlloc_stat: public traits_MichaelList_cmp_stdAlloc + struct traits_MichaelList_cmp_stat: public traits_MichaelList_cmp { typedef cc::michael_list::stat<> stat; }; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_HP_cmp_stdAlloc_stat; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_DHP_cmp_stdAlloc_stat; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_GPI_cmp_stdAlloc_stat; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_GPB_cmp_stdAlloc_stat; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_GPT_cmp_stdAlloc_stat; + typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stat > MichaelList_HP_cmp_stat; + typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stat > MichaelList_DHP_cmp_stat; + typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stat > MichaelList_RCU_GPI_cmp_stat; + typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stat > MichaelList_RCU_GPB_cmp_stat; + typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stat > MichaelList_RCU_GPT_cmp_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_SHB_cmp_stdAlloc_stat; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc_stat > MichaelList_RCU_SHT_cmp_stdAlloc_stat; + typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stat > MichaelList_RCU_SHB_cmp_stat; + typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stat > MichaelList_RCU_SHT_cmp_stat; #endif - struct traits_MichaelList_cmp_stdAlloc_seqcst : public traits_MichaelList_cmp_stdAlloc + struct traits_MichaelList_cmp_seqcst : public traits_MichaelList_cmp { typedef co::v::sequential_consistent memory_model; }; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst; + typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_seqcst > MichaelList_HP_cmp_seqcst; + typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_seqcst > MichaelList_DHP_cmp_seqcst; + typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_seqcst > MichaelList_RCU_GPI_cmp_seqcst; + typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_seqcst > MichaelList_RCU_GPB_cmp_seqcst; + typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_seqcst > MichaelList_RCU_GPT_cmp_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst; + typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_seqcst > MichaelList_RCU_SHB_cmp_seqcst; + typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_seqcst > MichaelList_RCU_SHT_cmp_seqcst; #endif - struct traits_MichaelList_less_stdAlloc : + struct traits_MichaelList_less : public cc::michael_list::make_traits< co::less< less > >::type {}; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc; + typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less > MichaelList_HP_less; + typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less > MichaelList_DHP_less; + typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less > MichaelList_RCU_GPI_less; + typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less > MichaelList_RCU_GPB_less; + typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less > MichaelList_RCU_GPT_less; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc; + typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less > MichaelList_RCU_SHB_less; + typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less > MichaelList_RCU_SHT_less; #endif - struct traits_MichaelList_less_stdAlloc_stat : public traits_MichaelList_less_stdAlloc + struct traits_MichaelList_less_stat : public traits_MichaelList_less { typedef cc::michael_list::stat<> stat; }; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc_stat > MichaelList_HP_less_stdAlloc_stat; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc_stat > MichaelList_DHP_less_stdAlloc_stat; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_GPI_less_stdAlloc_stat; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_GPB_less_stdAlloc_stat; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_GPT_less_stdAlloc_stat; + typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stat > MichaelList_HP_less_stat; + typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stat > MichaelList_DHP_less_stat; + typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stat > MichaelList_RCU_GPI_less_stat; + typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stat > MichaelList_RCU_GPB_less_stat; + typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stat > MichaelList_RCU_GPT_less_stat; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_SHB_less_stdAlloc_stat; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc_stat > MichaelList_RCU_SHT_less_stdAlloc_stat; + typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stat > MichaelList_RCU_SHB_less_stat; + typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stat > MichaelList_RCU_SHT_less_stat; #endif - struct traits_MichaelList_less_stdAlloc_seqcst : + struct traits_MichaelList_less_seqcst : public cc::michael_list::make_traits< co::less< less > ,co::memory_model< co::v::sequential_consistent > >::type {}; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst; + typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_seqcst > MichaelList_HP_less_seqcst; + typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_seqcst > MichaelList_DHP_less_seqcst; + typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_seqcst > MichaelList_RCU_GPI_less_seqcst; + typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_seqcst > MichaelList_RCU_GPB_less_seqcst; + typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_seqcst > MichaelList_RCU_GPT_less_seqcst; #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst; + typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_seqcst > MichaelList_RCU_SHB_less_seqcst; + typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_seqcst > MichaelList_RCU_SHT_less_seqcst; #endif - struct traits_MichaelList_cmp_michaelAlloc : - public cc::michael_list::make_traits< - co::compare< compare >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc; -#endif - - struct traits_MichaelList_less_michaelAlloc : - public cc::michael_list::make_traits< - co::less< less >, - co::allocator< memory::MichaelAllocator > - >::type - {}; - typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc; - typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc; - typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc; - typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc; - typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc; - typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc; -#endif }; } // namespace set diff --git a/test/stress/set/set_type_skip_list.h b/test/stress/set/set_type_skip_list.h index 9363a10a..ac3ebbc9 100644 --- a/test/stress/set/set_type_skip_list.h +++ b/test/stress/set/set_type_skip_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/set_type_split_list.h b/test/stress/set/set_type_split_list.h index 19299954..e3a69baa 100644 --- a/test/stress/set/set_type_split_list.h +++ b/test/stress/set/set_type_split_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/set_type_std.h b/test/stress/set/set_type_std.h index c4481cf4..4b6eec2f 100644 --- a/test/stress/set/set_type_std.h +++ b/test/stress/set/set_type_std.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/set/set_type_striped.h b/test/stress/set/set_type_striped.h index 94268f11..a67a20bc 100644 --- a/test/stress/set/set_type_striped.h +++ b/test/stress/set/set_type_striped.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/stack/intrusive_push_pop.cpp b/test/stress/stack/intrusive_push_pop.cpp index da9f083a..176f20ff 100644 --- a/test/stress/stack/intrusive_push_pop.cpp +++ b/test/stress/stack/intrusive_push_pop.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/stack/intrusive_push_pop_fcstack.cpp b/test/stress/stack/intrusive_push_pop_fcstack.cpp index d835d621..eac8337d 100644 --- a/test/stress/stack/intrusive_push_pop_fcstack.cpp +++ b/test/stress/stack/intrusive_push_pop_fcstack.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/stack/intrusive_stack_push_pop.h b/test/stress/stack/intrusive_stack_push_pop.h index 4a2c33a2..48e6fee9 100644 --- a/test/stress/stack/intrusive_stack_push_pop.h +++ b/test/stress/stack/intrusive_stack_push_pop.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/stack/intrusive_stack_type.h b/test/stress/stack/intrusive_stack_type.h index 308237f6..7d9a75af 100644 --- a/test/stress/stack/intrusive_stack_type.h +++ b/test/stress/stack/intrusive_stack_type.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/stack/push.cpp b/test/stress/stack/push.cpp index 0a7c30e4..a580e858 100644 --- a/test/stress/stack/push.cpp +++ b/test/stress/stack/push.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/stack/push_pop.cpp b/test/stress/stack/push_pop.cpp index 83acfb71..4ed882d4 100644 --- a/test/stress/stack/push_pop.cpp +++ b/test/stress/stack/push_pop.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/stress/stack/stack_type.h b/test/stress/stack/stack_type.h index 5c1dff20..1d1ab13c 100644 --- a/test/stress/stack/stack_type.h +++ b/test/stress/stack/stack_type.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/deque/fcdeque.cpp b/test/unit/deque/fcdeque.cpp index d8e5b367..0b8fe069 100644 --- a/test/unit/deque/fcdeque.cpp +++ b/test/unit/deque/fcdeque.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_iterable_dhp.cpp b/test/unit/intrusive-list/intrusive_iterable_dhp.cpp index 1101627d..8f98641d 100644 --- a/test/unit/intrusive-list/intrusive_iterable_dhp.cpp +++ b/test/unit/intrusive-list/intrusive_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -42,14 +42,14 @@ namespace { { typedef ci::IterableList< gc_type, item_type > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-list/intrusive_iterable_hp.cpp b/test/unit/intrusive-list/intrusive_iterable_hp.cpp index 2a1c7b7c..d68c7e85 100644 --- a/test/unit/intrusive-list/intrusive_iterable_hp.cpp +++ b/test/unit/intrusive-list/intrusive_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_lazy_dhp.cpp b/test/unit/intrusive-list/intrusive_lazy_dhp.cpp index f154049e..d9191647 100644 --- a/test/unit/intrusive-list/intrusive_lazy_dhp.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -53,14 +53,14 @@ namespace { }; typedef ci::LazyList< gc_type, base_item, traits > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-list/intrusive_lazy_hp.cpp b/test/unit/intrusive-list/intrusive_lazy_hp.cpp index 4004405c..8991e6ac 100644 --- a/test/unit/intrusive-list/intrusive_lazy_hp.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_lazy_nogc.cpp b/test/unit/intrusive-list/intrusive_lazy_nogc.cpp index 76f140f2..36f6b7ef 100644 --- a/test/unit/intrusive-list/intrusive_lazy_nogc.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_lazy_rcu_gpb.cpp b/test/unit/intrusive-list/intrusive_lazy_rcu_gpb.cpp index 3b3ff318..003d1c78 100644 --- a/test/unit/intrusive-list/intrusive_lazy_rcu_gpb.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_lazy_rcu_gpi.cpp b/test/unit/intrusive-list/intrusive_lazy_rcu_gpi.cpp index 6807c48c..cd0f2050 100644 --- a/test/unit/intrusive-list/intrusive_lazy_rcu_gpi.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_lazy_rcu_gpt.cpp b/test/unit/intrusive-list/intrusive_lazy_rcu_gpt.cpp index e0d943c5..463b1637 100644 --- a/test/unit/intrusive-list/intrusive_lazy_rcu_gpt.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_lazy_rcu_shb.cpp b/test/unit/intrusive-list/intrusive_lazy_rcu_shb.cpp index 490b0afd..25f51af6 100644 --- a/test/unit/intrusive-list/intrusive_lazy_rcu_shb.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_lazy_rcu_sht.cpp b/test/unit/intrusive-list/intrusive_lazy_rcu_sht.cpp index 905cf2d4..cc58f19e 100644 --- a/test/unit/intrusive-list/intrusive_lazy_rcu_sht.cpp +++ b/test/unit/intrusive-list/intrusive_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_michael_dhp.cpp b/test/unit/intrusive-list/intrusive_michael_dhp.cpp index b699b95f..8f19c84c 100644 --- a/test/unit/intrusive-list/intrusive_michael_dhp.cpp +++ b/test/unit/intrusive-list/intrusive_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -50,14 +50,14 @@ namespace { }; typedef ci::MichaelList< gc_type, base_item, traits > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-list/intrusive_michael_hp.cpp b/test/unit/intrusive-list/intrusive_michael_hp.cpp index c6fa081f..3ad0802b 100644 --- a/test/unit/intrusive-list/intrusive_michael_hp.cpp +++ b/test/unit/intrusive-list/intrusive_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_michael_nogc.cpp b/test/unit/intrusive-list/intrusive_michael_nogc.cpp index b37fdd04..299aa4dc 100644 --- a/test/unit/intrusive-list/intrusive_michael_nogc.cpp +++ b/test/unit/intrusive-list/intrusive_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_michael_rcu_gpb.cpp b/test/unit/intrusive-list/intrusive_michael_rcu_gpb.cpp index d2b0b277..8159d151 100644 --- a/test/unit/intrusive-list/intrusive_michael_rcu_gpb.cpp +++ b/test/unit/intrusive-list/intrusive_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_michael_rcu_gpi.cpp b/test/unit/intrusive-list/intrusive_michael_rcu_gpi.cpp index edaeaf3a..99807f2e 100644 --- a/test/unit/intrusive-list/intrusive_michael_rcu_gpi.cpp +++ b/test/unit/intrusive-list/intrusive_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_michael_rcu_gpt.cpp b/test/unit/intrusive-list/intrusive_michael_rcu_gpt.cpp index 75c4a4e6..6caa9f4f 100644 --- a/test/unit/intrusive-list/intrusive_michael_rcu_gpt.cpp +++ b/test/unit/intrusive-list/intrusive_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_michael_rcu_shb.cpp b/test/unit/intrusive-list/intrusive_michael_rcu_shb.cpp index fea8656b..bed30c4d 100644 --- a/test/unit/intrusive-list/intrusive_michael_rcu_shb.cpp +++ b/test/unit/intrusive-list/intrusive_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/intrusive_michael_rcu_sht.cpp b/test/unit/intrusive-list/intrusive_michael_rcu_sht.cpp index c75db4d6..d2befeb8 100644 --- a/test/unit/intrusive-list/intrusive_michael_rcu_sht.cpp +++ b/test/unit/intrusive-list/intrusive_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_iterable_list.h b/test/unit/intrusive-list/test_intrusive_iterable_list.h index 5d45600d..9dad1190 100644 --- a/test/unit/intrusive-list/test_intrusive_iterable_list.h +++ b/test/unit/intrusive-list/test_intrusive_iterable_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_iterable_list_hp.h b/test/unit/intrusive-list/test_intrusive_iterable_list_hp.h index 1a7983ff..8adb6357 100644 --- a/test/unit/intrusive-list/test_intrusive_iterable_list_hp.h +++ b/test/unit/intrusive-list/test_intrusive_iterable_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_lazy_rcu.h b/test/unit/intrusive-list/test_intrusive_lazy_rcu.h index 52c7f45b..5f685fe6 100644 --- a/test/unit/intrusive-list/test_intrusive_lazy_rcu.h +++ b/test/unit/intrusive-list/test_intrusive_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_list.h b/test/unit/intrusive-list/test_intrusive_list.h index 563fb70d..2a5825f1 100644 --- a/test/unit/intrusive-list/test_intrusive_list.h +++ b/test/unit/intrusive-list/test_intrusive_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_list_hp.h b/test/unit/intrusive-list/test_intrusive_list_hp.h index dab47f13..f91cfcce 100644 --- a/test/unit/intrusive-list/test_intrusive_list_hp.h +++ b/test/unit/intrusive-list/test_intrusive_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_list_nogc.h b/test/unit/intrusive-list/test_intrusive_list_nogc.h index 69f636f3..08274cc6 100644 --- a/test/unit/intrusive-list/test_intrusive_list_nogc.h +++ b/test/unit/intrusive-list/test_intrusive_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_list_rcu.h b/test/unit/intrusive-list/test_intrusive_list_rcu.h index ac2a4e3a..2d25804e 100644 --- a/test/unit/intrusive-list/test_intrusive_list_rcu.h +++ b/test/unit/intrusive-list/test_intrusive_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-list/test_intrusive_michael_rcu.h b/test/unit/intrusive-list/test_intrusive_michael_rcu.h index 89396b7c..6b9a06d3 100644 --- a/test/unit/intrusive-list/test_intrusive_michael_rcu.h +++ b/test/unit/intrusive-list/test_intrusive_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_dhp.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_dhp.cpp index fffa02f9..13feb875 100644 --- a/test/unit/intrusive-set/intrusive_feldman_hashset_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_feldman_hashset_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -53,14 +53,14 @@ namespace { >::type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_hp.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_hp.cpp index c8e9e534..b85d9941 100644 --- a/test/unit/intrusive-set/intrusive_feldman_hashset_hp.cpp +++ b/test/unit/intrusive-set/intrusive_feldman_hashset_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpb.cpp index b85f86e5..3fb6b22f 100644 --- a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpb.cpp +++ b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpi.cpp index b223361a..85c3b468 100644 --- a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpi.cpp +++ b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpt.cpp index 9c466f91..f2832591 100644 --- a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpt.cpp +++ b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_shb.cpp index 515759f5..4046b589 100644 --- a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_shb.cpp +++ b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_sht.cpp index 5067ad32..d286f2a2 100644 --- a/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_sht.cpp +++ b/test/unit/intrusive-set/intrusive_feldman_hashset_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_iterable_dhp.cpp b/test/unit/intrusive-set/intrusive_michael_iterable_dhp.cpp index 02632ff4..1fabda22 100644 --- a/test/unit/intrusive-set/intrusive_michael_iterable_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_michael_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -50,14 +50,14 @@ namespace { typedef ci::IterableList< gc_type, item_type, list_traits > list_type; typedef ci::MichaelHashSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_michael_iterable_hp.cpp b/test/unit/intrusive-set/intrusive_michael_iterable_hp.cpp index 56bcdb08..9c6356d1 100644 --- a/test/unit/intrusive-set/intrusive_michael_iterable_hp.cpp +++ b/test/unit/intrusive-set/intrusive_michael_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_dhp.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_dhp.cpp index 835611b2..2d315e07 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -59,14 +59,14 @@ namespace { typedef ci::LazyList< gc_type, base_item_type, list_traits > list_type; typedef ci::MichaelHashSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_hp.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_hp.cpp index 89c31984..07aacded 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_hp.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_nogc.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_nogc.cpp index 4d86b559..bb7e215c 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_nogc.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpb.cpp index f9b48f88..09429d10 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpb.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpi.cpp index 3b9faccc..43baa682 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpi.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpt.cpp index 0c5147ff..276dc545 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpt.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_shb.cpp index a2951fb4..682c7f91 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_shb.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_sht.cpp index 3623f93e..2c991563 100644 --- a/test/unit/intrusive-set/intrusive_michael_lazy_rcu_sht.cpp +++ b/test/unit/intrusive-set/intrusive_michael_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_michael_dhp.cpp b/test/unit/intrusive-set/intrusive_michael_michael_dhp.cpp index fe2d6e8d..75901131 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { typedef ci::MichaelList< gc_type, base_item_type, list_traits > list_type; typedef ci::MichaelHashSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_michael_michael_hp.cpp b/test/unit/intrusive-set/intrusive_michael_michael_hp.cpp index e043cece..a41421dd 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_hp.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_michael_nogc.cpp b/test/unit/intrusive-set/intrusive_michael_michael_nogc.cpp index 72ab511c..8087a56f 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_nogc.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpb.cpp index 71914265..38e7306a 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpb.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpi.cpp index 48bca231..56f63f7b 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpi.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpt.cpp index 04b61970..c9eda412 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpt.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_shb.cpp index 315e70f1..fa45b4a7 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_rcu_shb.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_michael_michael_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_michael_michael_rcu_sht.cpp index a2e76b5f..16257c8f 100644 --- a/test/unit/intrusive-set/intrusive_michael_michael_rcu_sht.cpp +++ b/test/unit/intrusive-set/intrusive_michael_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_skiplist_dhp.cpp b/test/unit/intrusive-set/intrusive_skiplist_dhp.cpp index 4a0a5df7..92d8320a 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { >::type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_skiplist_hp.cpp b/test/unit/intrusive-set/intrusive_skiplist_hp.cpp index 20468fd8..9c6f36d3 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_hp.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_skiplist_nogc.cpp b/test/unit/intrusive-set/intrusive_skiplist_nogc.cpp index f7128b27..70f5898d 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_nogc.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpb.cpp index d33465cc..e2e6a364 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpb.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpi.cpp index db6b6cc9..e59db7f2 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpi.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpt.cpp index cdcf74a5..0b9e8382 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_rcu_gpt.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_shb.cpp index 8eebed98..73539448 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_rcu_shb.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_skiplist_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_skiplist_rcu_sht.cpp index 4451af0f..cd246791 100644 --- a/test/unit/intrusive-set/intrusive_skiplist_rcu_sht.cpp +++ b/test/unit/intrusive-set/intrusive_skiplist_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_iterable_dhp.cpp b/test/unit/intrusive-set/intrusive_split_iterable_dhp.cpp index b355e5e3..32cdf780 100644 --- a/test/unit/intrusive-set/intrusive_split_iterable_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_split_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -52,14 +52,14 @@ namespace { typedef ci::IterableList< gc_type, item_type, list_traits > list_type; typedef ci::SplitListSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_split_iterable_hp.cpp b/test/unit/intrusive-set/intrusive_split_iterable_hp.cpp index 7de3a039..d63b54a4 100644 --- a/test/unit/intrusive-set/intrusive_split_iterable_hp.cpp +++ b/test/unit/intrusive-set/intrusive_split_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_lazy_dhp.cpp b/test/unit/intrusive-set/intrusive_split_lazy_dhp.cpp index f1366e6e..0d4da1ec 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -60,14 +60,14 @@ namespace { typedef ci::LazyList< gc_type, base_item_type, list_traits > list_type; typedef ci::SplitListSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_split_lazy_hp.cpp b/test/unit/intrusive-set/intrusive_split_lazy_hp.cpp index f91c4ba6..c3883b3a 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_hp.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_lazy_nogc.cpp b/test/unit/intrusive-set/intrusive_split_lazy_nogc.cpp index 139a814a..4b874d70 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_nogc.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpb.cpp index 751fe737..e5b10a7b 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpb.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpi.cpp index e1443148..34f64504 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpi.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpt.cpp index af0f191a..9b83de5b 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpt.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_shb.cpp index b8c9a749..48876634 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_rcu_shb.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_lazy_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_split_lazy_rcu_sht.cpp index be6a9acc..398ab4f8 100644 --- a/test/unit/intrusive-set/intrusive_split_lazy_rcu_sht.cpp +++ b/test/unit/intrusive-set/intrusive_split_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_michael_dhp.cpp b/test/unit/intrusive-set/intrusive_split_michael_dhp.cpp index 1a1d665f..dc378b6f 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_dhp.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -56,14 +56,14 @@ namespace { typedef ci::MichaelList< gc_type, base_item_type, list_traits > list_type; typedef ci::SplitListSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/intrusive-set/intrusive_split_michael_hp.cpp b/test/unit/intrusive-set/intrusive_split_michael_hp.cpp index f08ff04c..cd9ec9c2 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_hp.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_michael_nogc.cpp b/test/unit/intrusive-set/intrusive_split_michael_nogc.cpp index 87f74be3..4ddb3ff1 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_nogc.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpb.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpb.cpp index 1713d4ec..8911c4e3 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpb.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpi.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpi.cpp index 5ffa2a03..1197d956 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpi.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpt.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpt.cpp index 366e1fdf..4fdabe2b 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_rcu_gpt.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_shb.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_shb.cpp index 4e3ad1a6..0213564a 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_rcu_shb.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/intrusive_split_michael_rcu_sht.cpp b/test/unit/intrusive-set/intrusive_split_michael_rcu_sht.cpp index 8747fc97..c7dd447f 100644 --- a/test/unit/intrusive-set/intrusive_split_michael_rcu_sht.cpp +++ b/test/unit/intrusive-set/intrusive_split_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_feldman_hashset.h b/test/unit/intrusive-set/test_intrusive_feldman_hashset.h index c545a9fe..92115d1f 100644 --- a/test/unit/intrusive-set/test_intrusive_feldman_hashset.h +++ b/test/unit/intrusive-set/test_intrusive_feldman_hashset.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_feldman_hashset_hp.h b/test/unit/intrusive-set/test_intrusive_feldman_hashset_hp.h index 49dfb733..fe33c3e5 100644 --- a/test/unit/intrusive-set/test_intrusive_feldman_hashset_hp.h +++ b/test/unit/intrusive-set/test_intrusive_feldman_hashset_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_feldman_hashset_rcu.h b/test/unit/intrusive-set/test_intrusive_feldman_hashset_rcu.h index 6099a8e7..896cf486 100644 --- a/test/unit/intrusive-set/test_intrusive_feldman_hashset_rcu.h +++ b/test/unit/intrusive-set/test_intrusive_feldman_hashset_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_michael_iterable.h b/test/unit/intrusive-set/test_intrusive_michael_iterable.h index ef0fca48..2b257390 100644 --- a/test/unit/intrusive-set/test_intrusive_michael_iterable.h +++ b/test/unit/intrusive-set/test_intrusive_michael_iterable.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_michael_iterable_hp.h b/test/unit/intrusive-set/test_intrusive_michael_iterable_hp.h index 674a3655..c8b83aae 100644 --- a/test/unit/intrusive-set/test_intrusive_michael_iterable_hp.h +++ b/test/unit/intrusive-set/test_intrusive_michael_iterable_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_michael_lazy_rcu.h b/test/unit/intrusive-set/test_intrusive_michael_lazy_rcu.h index 4dcf8ade..d8312680 100644 --- a/test/unit/intrusive-set/test_intrusive_michael_lazy_rcu.h +++ b/test/unit/intrusive-set/test_intrusive_michael_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_michael_michael_rcu.h b/test/unit/intrusive-set/test_intrusive_michael_michael_rcu.h index 66bb8182..1c387317 100644 --- a/test/unit/intrusive-set/test_intrusive_michael_michael_rcu.h +++ b/test/unit/intrusive-set/test_intrusive_michael_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_set.h b/test/unit/intrusive-set/test_intrusive_set.h index de18a348..94c268e7 100644 --- a/test/unit/intrusive-set/test_intrusive_set.h +++ b/test/unit/intrusive-set/test_intrusive_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_set_hp.h b/test/unit/intrusive-set/test_intrusive_set_hp.h index e9f830d9..c732d34f 100644 --- a/test/unit/intrusive-set/test_intrusive_set_hp.h +++ b/test/unit/intrusive-set/test_intrusive_set_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_set_nogc.h b/test/unit/intrusive-set/test_intrusive_set_nogc.h index 7782d0b5..2c021c07 100644 --- a/test/unit/intrusive-set/test_intrusive_set_nogc.h +++ b/test/unit/intrusive-set/test_intrusive_set_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_set_rcu.h b/test/unit/intrusive-set/test_intrusive_set_rcu.h index b3e47ce7..06e788dc 100644 --- a/test/unit/intrusive-set/test_intrusive_set_rcu.h +++ b/test/unit/intrusive-set/test_intrusive_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_skiplist_rcu.h b/test/unit/intrusive-set/test_intrusive_skiplist_rcu.h index d676026a..306ebfa1 100644 --- a/test/unit/intrusive-set/test_intrusive_skiplist_rcu.h +++ b/test/unit/intrusive-set/test_intrusive_skiplist_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_split_iterable_set.h b/test/unit/intrusive-set/test_intrusive_split_iterable_set.h index 7d3b9cfc..91bfbb58 100644 --- a/test/unit/intrusive-set/test_intrusive_split_iterable_set.h +++ b/test/unit/intrusive-set/test_intrusive_split_iterable_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_split_iterable_set_hp.h b/test/unit/intrusive-set/test_intrusive_split_iterable_set_hp.h index 76b04351..0cbdcad4 100644 --- a/test/unit/intrusive-set/test_intrusive_split_iterable_set_hp.h +++ b/test/unit/intrusive-set/test_intrusive_split_iterable_set_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_split_lazy_rcu.h b/test/unit/intrusive-set/test_intrusive_split_lazy_rcu.h index c9179297..7d7176aa 100644 --- a/test/unit/intrusive-set/test_intrusive_split_lazy_rcu.h +++ b/test/unit/intrusive-set/test_intrusive_split_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/intrusive-set/test_intrusive_split_michael_rcu.h b/test/unit/intrusive-set/test_intrusive_split_michael_rcu.h index 2a020a27..a82ced48 100644 --- a/test/unit/intrusive-set/test_intrusive_split_michael_rcu.h +++ b/test/unit/intrusive-set/test_intrusive_split_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/iterable_dhp.cpp b/test/unit/list/iterable_dhp.cpp index b1da7f23..38a064fa 100644 --- a/test/unit/list/iterable_dhp.cpp +++ b/test/unit/list/iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -42,14 +42,14 @@ namespace { { typedef cc::IterableList< gc_type, item > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/list/iterable_hp.cpp b/test/unit/list/iterable_hp.cpp index f96b60cd..fe4dac29 100644 --- a/test/unit/list/iterable_hp.cpp +++ b/test/unit/list/iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_iterable_dhp.cpp b/test/unit/list/kv_iterable_dhp.cpp index 94903d5d..8b725ed6 100644 --- a/test/unit/list/kv_iterable_dhp.cpp +++ b/test/unit/list/kv_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -42,14 +42,14 @@ namespace { { typedef cc::IterableKVList< gc_type, key_type, value_type > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/list/kv_iterable_hp.cpp b/test/unit/list/kv_iterable_hp.cpp index 6553792a..e43a676e 100644 --- a/test/unit/list/kv_iterable_hp.cpp +++ b/test/unit/list/kv_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_lazy_dhp.cpp b/test/unit/list/kv_lazy_dhp.cpp index 49844e10..bd5c0431 100644 --- a/test/unit/list/kv_lazy_dhp.cpp +++ b/test/unit/list/kv_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -42,14 +42,14 @@ namespace { { typedef cc::LazyKVList< gc_type, key_type, value_type > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::Construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::Destruct(); } }; diff --git a/test/unit/list/kv_lazy_hp.cpp b/test/unit/list/kv_lazy_hp.cpp index c9c3c6e2..03cfad7e 100644 --- a/test/unit/list/kv_lazy_hp.cpp +++ b/test/unit/list/kv_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_lazy_nogc.cpp b/test/unit/list/kv_lazy_nogc.cpp index cb701372..ab532275 100644 --- a/test/unit/list/kv_lazy_nogc.cpp +++ b/test/unit/list/kv_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_lazy_rcu_gpb.cpp b/test/unit/list/kv_lazy_rcu_gpb.cpp index eefbae80..86987f3a 100644 --- a/test/unit/list/kv_lazy_rcu_gpb.cpp +++ b/test/unit/list/kv_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_lazy_rcu_gpi.cpp b/test/unit/list/kv_lazy_rcu_gpi.cpp index dfe1b1ad..c2861bc4 100644 --- a/test/unit/list/kv_lazy_rcu_gpi.cpp +++ b/test/unit/list/kv_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_lazy_rcu_gpt.cpp b/test/unit/list/kv_lazy_rcu_gpt.cpp index ea573c28..371f3214 100644 --- a/test/unit/list/kv_lazy_rcu_gpt.cpp +++ b/test/unit/list/kv_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_lazy_rcu_shb.cpp b/test/unit/list/kv_lazy_rcu_shb.cpp index dd097ccf..26e0803a 100644 --- a/test/unit/list/kv_lazy_rcu_shb.cpp +++ b/test/unit/list/kv_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_lazy_rcu_sht.cpp b/test/unit/list/kv_lazy_rcu_sht.cpp index b1dcd309..e6be9a12 100644 --- a/test/unit/list/kv_lazy_rcu_sht.cpp +++ b/test/unit/list/kv_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_michael_dhp.cpp b/test/unit/list/kv_michael_dhp.cpp index 37541972..c0bc4181 100644 --- a/test/unit/list/kv_michael_dhp.cpp +++ b/test/unit/list/kv_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -42,14 +42,14 @@ namespace { { typedef cc::MichaelKVList< gc_type, key_type, value_type > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::Construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::Destruct(); } }; diff --git a/test/unit/list/kv_michael_hp.cpp b/test/unit/list/kv_michael_hp.cpp index 254ac954..5436e04f 100644 --- a/test/unit/list/kv_michael_hp.cpp +++ b/test/unit/list/kv_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_michael_nogc.cpp b/test/unit/list/kv_michael_nogc.cpp index 90353ad0..626cd322 100644 --- a/test/unit/list/kv_michael_nogc.cpp +++ b/test/unit/list/kv_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_michael_rcu_gpb.cpp b/test/unit/list/kv_michael_rcu_gpb.cpp index 50612c45..a9f63f58 100644 --- a/test/unit/list/kv_michael_rcu_gpb.cpp +++ b/test/unit/list/kv_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_michael_rcu_gpi.cpp b/test/unit/list/kv_michael_rcu_gpi.cpp index 1b06cf74..cf719442 100644 --- a/test/unit/list/kv_michael_rcu_gpi.cpp +++ b/test/unit/list/kv_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_michael_rcu_gpt.cpp b/test/unit/list/kv_michael_rcu_gpt.cpp index 4b06904f..8b63fd6b 100644 --- a/test/unit/list/kv_michael_rcu_gpt.cpp +++ b/test/unit/list/kv_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_michael_rcu_shb.cpp b/test/unit/list/kv_michael_rcu_shb.cpp index 07f74f98..9ba92343 100644 --- a/test/unit/list/kv_michael_rcu_shb.cpp +++ b/test/unit/list/kv_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/kv_michael_rcu_sht.cpp b/test/unit/list/kv_michael_rcu_sht.cpp index 2e100b14..6f78346f 100644 --- a/test/unit/list/kv_michael_rcu_sht.cpp +++ b/test/unit/list/kv_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/lazy_dhp.cpp b/test/unit/list/lazy_dhp.cpp index 04e64e1f..9a2b2ef1 100644 --- a/test/unit/list/lazy_dhp.cpp +++ b/test/unit/list/lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -42,14 +42,14 @@ namespace { { typedef cc::LazyList< gc_type, item > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::Construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::Destruct(); } }; diff --git a/test/unit/list/lazy_hp.cpp b/test/unit/list/lazy_hp.cpp index 24e4dd6c..e147f381 100644 --- a/test/unit/list/lazy_hp.cpp +++ b/test/unit/list/lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/lazy_nogc.cpp b/test/unit/list/lazy_nogc.cpp index 283af56c..378bfc80 100644 --- a/test/unit/list/lazy_nogc.cpp +++ b/test/unit/list/lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/lazy_rcu_gpb.cpp b/test/unit/list/lazy_rcu_gpb.cpp index 691fb533..af946d49 100644 --- a/test/unit/list/lazy_rcu_gpb.cpp +++ b/test/unit/list/lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/lazy_rcu_gpi.cpp b/test/unit/list/lazy_rcu_gpi.cpp index f35a5cc6..e3123842 100644 --- a/test/unit/list/lazy_rcu_gpi.cpp +++ b/test/unit/list/lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/lazy_rcu_gpt.cpp b/test/unit/list/lazy_rcu_gpt.cpp index 41748a95..239da668 100644 --- a/test/unit/list/lazy_rcu_gpt.cpp +++ b/test/unit/list/lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/lazy_rcu_shb.cpp b/test/unit/list/lazy_rcu_shb.cpp index 1da42bd2..d39dbea8 100644 --- a/test/unit/list/lazy_rcu_shb.cpp +++ b/test/unit/list/lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/lazy_rcu_sht.cpp b/test/unit/list/lazy_rcu_sht.cpp index 2c809058..59f19151 100644 --- a/test/unit/list/lazy_rcu_sht.cpp +++ b/test/unit/list/lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/michael_dhp.cpp b/test/unit/list/michael_dhp.cpp index 8aac6fde..3cac39b8 100644 --- a/test/unit/list/michael_dhp.cpp +++ b/test/unit/list/michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -42,7 +42,7 @@ namespace { { typedef cc::MichaelList< gc_type, item > list_type; - cds::gc::dhp::GarbageCollector::Construct( 16, list_type::c_nHazardPtrCount ); + cds::gc::dhp::GarbageCollector::Construct( list_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } diff --git a/test/unit/list/michael_hp.cpp b/test/unit/list/michael_hp.cpp index b51ebc6f..d4bc1966 100644 --- a/test/unit/list/michael_hp.cpp +++ b/test/unit/list/michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/michael_nogc.cpp b/test/unit/list/michael_nogc.cpp index 3df35e4d..ff4940d3 100644 --- a/test/unit/list/michael_nogc.cpp +++ b/test/unit/list/michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/michael_rcu_gpb.cpp b/test/unit/list/michael_rcu_gpb.cpp index 9647d1f2..6108273d 100644 --- a/test/unit/list/michael_rcu_gpb.cpp +++ b/test/unit/list/michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/michael_rcu_gpi.cpp b/test/unit/list/michael_rcu_gpi.cpp index bdf5fdae..e25838f8 100644 --- a/test/unit/list/michael_rcu_gpi.cpp +++ b/test/unit/list/michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/michael_rcu_gpt.cpp b/test/unit/list/michael_rcu_gpt.cpp index 574d91ec..044331f1 100644 --- a/test/unit/list/michael_rcu_gpt.cpp +++ b/test/unit/list/michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/michael_rcu_shb.cpp b/test/unit/list/michael_rcu_shb.cpp index 11911627..a323ef72 100644 --- a/test/unit/list/michael_rcu_shb.cpp +++ b/test/unit/list/michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/michael_rcu_sht.cpp b/test/unit/list/michael_rcu_sht.cpp index 0c7f5818..4179ab2d 100644 --- a/test/unit/list/michael_rcu_sht.cpp +++ b/test/unit/list/michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_iterable_list.h b/test/unit/list/test_iterable_list.h index e9e3e9c0..9233a842 100644 --- a/test/unit/list/test_iterable_list.h +++ b/test/unit/list/test_iterable_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_iterable_list_hp.h b/test/unit/list/test_iterable_list_hp.h index dde76085..dad5cc2b 100644 --- a/test/unit/list/test_iterable_list_hp.h +++ b/test/unit/list/test_iterable_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_iterable_list.h b/test/unit/list/test_kv_iterable_list.h index e148161f..9fcefda7 100644 --- a/test/unit/list/test_kv_iterable_list.h +++ b/test/unit/list/test_kv_iterable_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_iterable_list_hp.h b/test/unit/list/test_kv_iterable_list_hp.h index 34847513..5ca2f346 100644 --- a/test/unit/list/test_kv_iterable_list_hp.h +++ b/test/unit/list/test_kv_iterable_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_lazy_rcu.h b/test/unit/list/test_kv_lazy_rcu.h index 8659dee3..81962f16 100644 --- a/test/unit/list/test_kv_lazy_rcu.h +++ b/test/unit/list/test_kv_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_list.h b/test/unit/list/test_kv_list.h index 558cc676..5425e89f 100644 --- a/test/unit/list/test_kv_list.h +++ b/test/unit/list/test_kv_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_list_hp.h b/test/unit/list/test_kv_list_hp.h index 55f4ae00..ee75eadd 100644 --- a/test/unit/list/test_kv_list_hp.h +++ b/test/unit/list/test_kv_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_list_nogc.h b/test/unit/list/test_kv_list_nogc.h index d9761fe5..785069c3 100644 --- a/test/unit/list/test_kv_list_nogc.h +++ b/test/unit/list/test_kv_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_list_rcu.h b/test/unit/list/test_kv_list_rcu.h index 6a247747..b8a24fa1 100644 --- a/test/unit/list/test_kv_list_rcu.h +++ b/test/unit/list/test_kv_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_kv_michael_rcu.h b/test/unit/list/test_kv_michael_rcu.h index 9bd674ab..435e9e4b 100644 --- a/test/unit/list/test_kv_michael_rcu.h +++ b/test/unit/list/test_kv_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_lazy_rcu.h b/test/unit/list/test_lazy_rcu.h index 77094aa6..543c244a 100644 --- a/test/unit/list/test_lazy_rcu.h +++ b/test/unit/list/test_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_list.h b/test/unit/list/test_list.h index 97e88e70..9637e1d6 100644 --- a/test/unit/list/test_list.h +++ b/test/unit/list/test_list.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_list_hp.h b/test/unit/list/test_list_hp.h index 6c4a3975..c65ab55a 100644 --- a/test/unit/list/test_list_hp.h +++ b/test/unit/list/test_list_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_list_nogc.h b/test/unit/list/test_list_nogc.h index d78ada68..66203fa4 100644 --- a/test/unit/list/test_list_nogc.h +++ b/test/unit/list/test_list_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_list_rcu.h b/test/unit/list/test_list_rcu.h index eff095dd..f3de5be6 100644 --- a/test/unit/list/test_list_rcu.h +++ b/test/unit/list/test_list_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/list/test_michael_rcu.h b/test/unit/list/test_michael_rcu.h index fcbd3234..381bccae 100644 --- a/test/unit/list/test_michael_rcu.h +++ b/test/unit/list/test_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/main.cpp b/test/unit/main.cpp index 4dc8c041..6e9fb809 100644 --- a/test/unit/main.cpp +++ b/test/unit/main.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/feldman_hashmap_dhp.cpp b/test/unit/map/feldman_hashmap_dhp.cpp index 26cc1636..a1411b47 100644 --- a/test/unit/map/feldman_hashmap_dhp.cpp +++ b/test/unit/map/feldman_hashmap_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -45,15 +45,14 @@ namespace { { typedef cc::FeldmanHashMap< gc_type, key_type, value_type > map_type; - // +1 - for guarded_ptr - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/map/feldman_hashmap_hp.cpp b/test/unit/map/feldman_hashmap_hp.cpp index d462339e..c04ae6a0 100644 --- a/test/unit/map/feldman_hashmap_hp.cpp +++ b/test/unit/map/feldman_hashmap_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/feldman_hashset_rcu_gpb.cpp b/test/unit/map/feldman_hashset_rcu_gpb.cpp index edbc0e73..d5ca78c7 100644 --- a/test/unit/map/feldman_hashset_rcu_gpb.cpp +++ b/test/unit/map/feldman_hashset_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/feldman_hashset_rcu_gpi.cpp b/test/unit/map/feldman_hashset_rcu_gpi.cpp index a6821fc1..d86fc0b6 100644 --- a/test/unit/map/feldman_hashset_rcu_gpi.cpp +++ b/test/unit/map/feldman_hashset_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/feldman_hashset_rcu_gpt.cpp b/test/unit/map/feldman_hashset_rcu_gpt.cpp index 17c95b0a..88f5c098 100644 --- a/test/unit/map/feldman_hashset_rcu_gpt.cpp +++ b/test/unit/map/feldman_hashset_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/feldman_hashset_rcu_shb.cpp b/test/unit/map/feldman_hashset_rcu_shb.cpp index 64fbf1e8..a1a99c1c 100644 --- a/test/unit/map/feldman_hashset_rcu_shb.cpp +++ b/test/unit/map/feldman_hashset_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/feldman_hashset_rcu_sht.cpp b/test/unit/map/feldman_hashset_rcu_sht.cpp index aa5879cd..f8a290f3 100644 --- a/test/unit/map/feldman_hashset_rcu_sht.cpp +++ b/test/unit/map/feldman_hashset_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_iterable_dhp.cpp b/test/unit/map/michael_iterable_dhp.cpp index 74c448ab..c341b053 100644 --- a/test/unit/map/michael_iterable_dhp.cpp +++ b/test/unit/map/michael_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -48,14 +48,14 @@ namespace { typedef cc::IterableKVList< gc_type, key_type, value_type > list_type; typedef cc::MichaelHashMap< gc_type, list_type > map_type; - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/map/michael_iterable_hp.cpp b/test/unit/map/michael_iterable_hp.cpp index 4b3abb9a..1b2f420e 100644 --- a/test/unit/map/michael_iterable_hp.cpp +++ b/test/unit/map/michael_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_lazy_dhp.cpp b/test/unit/map/michael_lazy_dhp.cpp index 1e1b5c88..33ac2647 100644 --- a/test/unit/map/michael_lazy_dhp.cpp +++ b/test/unit/map/michael_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -48,14 +48,14 @@ namespace { typedef cc::LazyKVList< gc_type, key_type, value_type > list_type; typedef cc::MichaelHashMap< gc_type, list_type > map_type; - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/map/michael_lazy_hp.cpp b/test/unit/map/michael_lazy_hp.cpp index fb54ca78..ec0595cb 100644 --- a/test/unit/map/michael_lazy_hp.cpp +++ b/test/unit/map/michael_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_lazy_nogc.cpp b/test/unit/map/michael_lazy_nogc.cpp index 83053779..a0c41d0b 100644 --- a/test/unit/map/michael_lazy_nogc.cpp +++ b/test/unit/map/michael_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_lazy_rcu_gpb.cpp b/test/unit/map/michael_lazy_rcu_gpb.cpp index b9114525..ffc0c557 100644 --- a/test/unit/map/michael_lazy_rcu_gpb.cpp +++ b/test/unit/map/michael_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_lazy_rcu_gpi.cpp b/test/unit/map/michael_lazy_rcu_gpi.cpp index 388f5dd1..2bde55a4 100644 --- a/test/unit/map/michael_lazy_rcu_gpi.cpp +++ b/test/unit/map/michael_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_lazy_rcu_gpt.cpp b/test/unit/map/michael_lazy_rcu_gpt.cpp index 8bbb9295..0bf78622 100644 --- a/test/unit/map/michael_lazy_rcu_gpt.cpp +++ b/test/unit/map/michael_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_lazy_rcu_shb.cpp b/test/unit/map/michael_lazy_rcu_shb.cpp index 636f388c..f3e8ff4e 100644 --- a/test/unit/map/michael_lazy_rcu_shb.cpp +++ b/test/unit/map/michael_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_lazy_rcu_sht.cpp b/test/unit/map/michael_lazy_rcu_sht.cpp index e9f9765d..cfe48349 100644 --- a/test/unit/map/michael_lazy_rcu_sht.cpp +++ b/test/unit/map/michael_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_michael_dhp.cpp b/test/unit/map/michael_michael_dhp.cpp index b852e46a..175d665c 100644 --- a/test/unit/map/michael_michael_dhp.cpp +++ b/test/unit/map/michael_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -48,14 +48,14 @@ namespace { typedef cc::MichaelKVList< gc_type, key_type, value_type > list_type; typedef cc::MichaelHashMap< gc_type, list_type > map_type; - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/map/michael_michael_hp.cpp b/test/unit/map/michael_michael_hp.cpp index d6d5e045..aa91047b 100644 --- a/test/unit/map/michael_michael_hp.cpp +++ b/test/unit/map/michael_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_michael_nogc.cpp b/test/unit/map/michael_michael_nogc.cpp index a9d69013..1fb92690 100644 --- a/test/unit/map/michael_michael_nogc.cpp +++ b/test/unit/map/michael_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_michael_rcu_gpb.cpp b/test/unit/map/michael_michael_rcu_gpb.cpp index bd795e69..23be9824 100644 --- a/test/unit/map/michael_michael_rcu_gpb.cpp +++ b/test/unit/map/michael_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_michael_rcu_gpi.cpp b/test/unit/map/michael_michael_rcu_gpi.cpp index 72fa469a..0729089a 100644 --- a/test/unit/map/michael_michael_rcu_gpi.cpp +++ b/test/unit/map/michael_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_michael_rcu_gpt.cpp b/test/unit/map/michael_michael_rcu_gpt.cpp index 684b9c7c..1844d50c 100644 --- a/test/unit/map/michael_michael_rcu_gpt.cpp +++ b/test/unit/map/michael_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_michael_rcu_shb.cpp b/test/unit/map/michael_michael_rcu_shb.cpp index e8ce4961..4d6f740d 100644 --- a/test/unit/map/michael_michael_rcu_shb.cpp +++ b/test/unit/map/michael_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/michael_michael_rcu_sht.cpp b/test/unit/map/michael_michael_rcu_sht.cpp index ae8d2bc9..7016610a 100644 --- a/test/unit/map/michael_michael_rcu_sht.cpp +++ b/test/unit/map/michael_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/skiplist_dhp.cpp b/test/unit/map/skiplist_dhp.cpp index dbae7057..410beed7 100644 --- a/test/unit/map/skiplist_dhp.cpp +++ b/test/unit/map/skiplist_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -45,14 +45,14 @@ namespace { { typedef cc::SkipListMap< gc_type, key_type, value_type > map_type; - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/map/skiplist_hp.cpp b/test/unit/map/skiplist_hp.cpp index 6bb262f2..e66b0388 100644 --- a/test/unit/map/skiplist_hp.cpp +++ b/test/unit/map/skiplist_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/skiplist_nogc.cpp b/test/unit/map/skiplist_nogc.cpp index 68ea52df..0c29eb8a 100644 --- a/test/unit/map/skiplist_nogc.cpp +++ b/test/unit/map/skiplist_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/skiplist_rcu_gpb.cpp b/test/unit/map/skiplist_rcu_gpb.cpp index 128ff602..6bb4f4f3 100644 --- a/test/unit/map/skiplist_rcu_gpb.cpp +++ b/test/unit/map/skiplist_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/skiplist_rcu_gpi.cpp b/test/unit/map/skiplist_rcu_gpi.cpp index de064a5b..5aeaf57b 100644 --- a/test/unit/map/skiplist_rcu_gpi.cpp +++ b/test/unit/map/skiplist_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/skiplist_rcu_gpt.cpp b/test/unit/map/skiplist_rcu_gpt.cpp index 8fe43aeb..307f4e96 100644 --- a/test/unit/map/skiplist_rcu_gpt.cpp +++ b/test/unit/map/skiplist_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/skiplist_rcu_shb.cpp b/test/unit/map/skiplist_rcu_shb.cpp index c1aff4a5..6610b427 100644 --- a/test/unit/map/skiplist_rcu_shb.cpp +++ b/test/unit/map/skiplist_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/skiplist_rcu_sht.cpp b/test/unit/map/skiplist_rcu_sht.cpp index c04e4802..91ac7547 100644 --- a/test/unit/map/skiplist_rcu_sht.cpp +++ b/test/unit/map/skiplist_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_iterable_dhp.cpp b/test/unit/map/split_iterable_dhp.cpp index 9fc952e5..27f6d5ae 100644 --- a/test/unit/map/split_iterable_dhp.cpp +++ b/test/unit/map/split_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { }; typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type; - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/map/split_iterable_hp.cpp b/test/unit/map/split_iterable_hp.cpp index ead29a76..d93c3843 100644 --- a/test/unit/map/split_iterable_hp.cpp +++ b/test/unit/map/split_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_lazy_dhp.cpp b/test/unit/map/split_lazy_dhp.cpp index fb5e230f..1979ebef 100644 --- a/test/unit/map/split_lazy_dhp.cpp +++ b/test/unit/map/split_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { }; typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type; - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/map/split_lazy_hp.cpp b/test/unit/map/split_lazy_hp.cpp index 4d449ca0..7fb749d2 100644 --- a/test/unit/map/split_lazy_hp.cpp +++ b/test/unit/map/split_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_lazy_nogc.cpp b/test/unit/map/split_lazy_nogc.cpp index a38a7c99..d1642bbd 100644 --- a/test/unit/map/split_lazy_nogc.cpp +++ b/test/unit/map/split_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_lazy_rcu_gpb.cpp b/test/unit/map/split_lazy_rcu_gpb.cpp index 91da38d5..aec800d6 100644 --- a/test/unit/map/split_lazy_rcu_gpb.cpp +++ b/test/unit/map/split_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_lazy_rcu_gpi.cpp b/test/unit/map/split_lazy_rcu_gpi.cpp index d8f3c682..d31e4323 100644 --- a/test/unit/map/split_lazy_rcu_gpi.cpp +++ b/test/unit/map/split_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_lazy_rcu_gpt.cpp b/test/unit/map/split_lazy_rcu_gpt.cpp index 169595ab..f3519ec8 100644 --- a/test/unit/map/split_lazy_rcu_gpt.cpp +++ b/test/unit/map/split_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_lazy_rcu_shb.cpp b/test/unit/map/split_lazy_rcu_shb.cpp index 4cca46c9..00f39027 100644 --- a/test/unit/map/split_lazy_rcu_shb.cpp +++ b/test/unit/map/split_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_lazy_rcu_sht.cpp b/test/unit/map/split_lazy_rcu_sht.cpp index 09861f91..bfe7b44f 100644 --- a/test/unit/map/split_lazy_rcu_sht.cpp +++ b/test/unit/map/split_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_michael_dhp.cpp b/test/unit/map/split_michael_dhp.cpp index b3b6edd7..4d7f6f29 100644 --- a/test/unit/map/split_michael_dhp.cpp +++ b/test/unit/map/split_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,15 +55,14 @@ namespace { }; typedef cc::SplitListMap< gc_type, key_type, value_type, map_traits > map_type; - // +1 - for guarded_ptr - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct( true ); } }; diff --git a/test/unit/map/split_michael_hp.cpp b/test/unit/map/split_michael_hp.cpp index 19837a77..fb117c00 100644 --- a/test/unit/map/split_michael_hp.cpp +++ b/test/unit/map/split_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_michael_nogc.cpp b/test/unit/map/split_michael_nogc.cpp index 0fc50fd2..feb7d96c 100644 --- a/test/unit/map/split_michael_nogc.cpp +++ b/test/unit/map/split_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_michael_rcu_gpb.cpp b/test/unit/map/split_michael_rcu_gpb.cpp index 0efea254..c712bb67 100644 --- a/test/unit/map/split_michael_rcu_gpb.cpp +++ b/test/unit/map/split_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_michael_rcu_gpi.cpp b/test/unit/map/split_michael_rcu_gpi.cpp index f4b4cf1c..5ea546c4 100644 --- a/test/unit/map/split_michael_rcu_gpi.cpp +++ b/test/unit/map/split_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_michael_rcu_gpt.cpp b/test/unit/map/split_michael_rcu_gpt.cpp index 04263403..d1415de3 100644 --- a/test/unit/map/split_michael_rcu_gpt.cpp +++ b/test/unit/map/split_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_michael_rcu_shb.cpp b/test/unit/map/split_michael_rcu_shb.cpp index 97823970..2e87735b 100644 --- a/test/unit/map/split_michael_rcu_shb.cpp +++ b/test/unit/map/split_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/split_michael_rcu_sht.cpp b/test/unit/map/split_michael_rcu_sht.cpp index bd748c05..b4e5096e 100644 --- a/test/unit/map/split_michael_rcu_sht.cpp +++ b/test/unit/map/split_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_feldman_hashmap.h b/test/unit/map/test_feldman_hashmap.h index cf567d60..2c1524f5 100644 --- a/test/unit/map/test_feldman_hashmap.h +++ b/test/unit/map/test_feldman_hashmap.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_feldman_hashmap_hp.h b/test/unit/map/test_feldman_hashmap_hp.h index f27ef686..26718eca 100644 --- a/test/unit/map/test_feldman_hashmap_hp.h +++ b/test/unit/map/test_feldman_hashmap_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_feldman_hashmap_rcu.h b/test/unit/map/test_feldman_hashmap_rcu.h index 27e3ae0e..f49540f7 100644 --- a/test/unit/map/test_feldman_hashmap_rcu.h +++ b/test/unit/map/test_feldman_hashmap_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_map.h b/test/unit/map/test_map.h index 6593f3b6..5e79c666 100644 --- a/test/unit/map/test_map.h +++ b/test/unit/map/test_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_map_data.h b/test/unit/map/test_map_data.h index 3faaecef..f6dc2138 100644 --- a/test/unit/map/test_map_data.h +++ b/test/unit/map/test_map_data.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_map_hp.h b/test/unit/map/test_map_hp.h index 294dae55..9b69ebe9 100644 --- a/test/unit/map/test_map_hp.h +++ b/test/unit/map/test_map_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_map_nogc.h b/test/unit/map/test_map_nogc.h index ddf12bfa..6aa5e686 100644 --- a/test/unit/map/test_map_nogc.h +++ b/test/unit/map/test_map_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_map_rcu.h b/test/unit/map/test_map_rcu.h index 17a4a225..b8b9a4aa 100644 --- a/test/unit/map/test_map_rcu.h +++ b/test/unit/map/test_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_michael_iterable.h b/test/unit/map/test_michael_iterable.h index 43432757..54e7dbb5 100644 --- a/test/unit/map/test_michael_iterable.h +++ b/test/unit/map/test_michael_iterable.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_michael_iterable_hp.h b/test/unit/map/test_michael_iterable_hp.h index f8f2e867..6e940b8f 100644 --- a/test/unit/map/test_michael_iterable_hp.h +++ b/test/unit/map/test_michael_iterable_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_michael_lazy_rcu.h b/test/unit/map/test_michael_lazy_rcu.h index ceb5cf72..19f731cf 100644 --- a/test/unit/map/test_michael_lazy_rcu.h +++ b/test/unit/map/test_michael_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_skiplist_hp.h b/test/unit/map/test_skiplist_hp.h index b3a53f85..124111da 100644 --- a/test/unit/map/test_skiplist_hp.h +++ b/test/unit/map/test_skiplist_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_skiplist_rcu.h b/test/unit/map/test_skiplist_rcu.h index 63978e13..61a44cd9 100644 --- a/test/unit/map/test_skiplist_rcu.h +++ b/test/unit/map/test_skiplist_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_split_lazy_rcu.h b/test/unit/map/test_split_lazy_rcu.h index f42b19cd..74eefcda 100644 --- a/test/unit/map/test_split_lazy_rcu.h +++ b/test/unit/map/test_split_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/map/test_split_michael_rcu.h b/test/unit/map/test_split_michael_rcu.h index 30f14732..ef71fe4c 100644 --- a/test/unit/map/test_split_michael_rcu.h +++ b/test/unit/map/test_split_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/bitop.cpp b/test/unit/misc/bitop.cpp index 4f64931c..34b7fed1 100644 --- a/test/unit/misc/bitop.cpp +++ b/test/unit/misc/bitop.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/cxx11_atomic_class.cpp b/test/unit/misc/cxx11_atomic_class.cpp index fa113f7e..9d447a5d 100644 --- a/test/unit/misc/cxx11_atomic_class.cpp +++ b/test/unit/misc/cxx11_atomic_class.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/cxx11_atomic_func.cpp b/test/unit/misc/cxx11_atomic_func.cpp index 2ed477d7..8e4713a0 100644 --- a/test/unit/misc/cxx11_atomic_func.cpp +++ b/test/unit/misc/cxx11_atomic_func.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/cxx11_convert_memory_order.h b/test/unit/misc/cxx11_convert_memory_order.h index 294fcd95..1e6450e6 100644 --- a/test/unit/misc/cxx11_convert_memory_order.h +++ b/test/unit/misc/cxx11_convert_memory_order.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/find_option.cpp b/test/unit/misc/find_option.cpp index 2b8b9253..fa908dd0 100644 --- a/test/unit/misc/find_option.cpp +++ b/test/unit/misc/find_option.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/hash_tuple.cpp b/test/unit/misc/hash_tuple.cpp index d4f3ded7..aba62d6d 100644 --- a/test/unit/misc/hash_tuple.cpp +++ b/test/unit/misc/hash_tuple.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/permutation_generator.cpp b/test/unit/misc/permutation_generator.cpp index bba58f31..68a164ed 100644 --- a/test/unit/misc/permutation_generator.cpp +++ b/test/unit/misc/permutation_generator.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/misc/split_bitstring.cpp b/test/unit/misc/split_bitstring.cpp index 69e5842c..250b58be 100644 --- a/test/unit/misc/split_bitstring.cpp +++ b/test/unit/misc/split_bitstring.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/pqueue/fcpqueue_boost_stable_vector.cpp b/test/unit/pqueue/fcpqueue_boost_stable_vector.cpp index cb51b445..f62c5c44 100644 --- a/test/unit/pqueue/fcpqueue_boost_stable_vector.cpp +++ b/test/unit/pqueue/fcpqueue_boost_stable_vector.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/pqueue/fcpqueue_deque.cpp b/test/unit/pqueue/fcpqueue_deque.cpp index 1da9be98..707cde65 100644 --- a/test/unit/pqueue/fcpqueue_deque.cpp +++ b/test/unit/pqueue/fcpqueue_deque.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/pqueue/fcpqueue_vector.cpp b/test/unit/pqueue/fcpqueue_vector.cpp index b1c9ef0f..95f21372 100644 --- a/test/unit/pqueue/fcpqueue_vector.cpp +++ b/test/unit/pqueue/fcpqueue_vector.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/pqueue/intrusive_mspqueue.cpp b/test/unit/pqueue/intrusive_mspqueue.cpp index 6c8cdae3..b91c1a69 100644 --- a/test/unit/pqueue/intrusive_mspqueue.cpp +++ b/test/unit/pqueue/intrusive_mspqueue.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/pqueue/mspqueue.cpp b/test/unit/pqueue/mspqueue.cpp index 3d726abe..a369925d 100644 --- a/test/unit/pqueue/mspqueue.cpp +++ b/test/unit/pqueue/mspqueue.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/pqueue/test_data.h b/test/unit/pqueue/test_data.h index 7145d4c9..a65ed54a 100644 --- a/test/unit/pqueue/test_data.h +++ b/test/unit/pqueue/test_data.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/pqueue/test_fcpqueue.h b/test/unit/pqueue/test_fcpqueue.h index 2edad90a..79e29367 100644 --- a/test/unit/pqueue/test_fcpqueue.h +++ b/test/unit/pqueue/test_fcpqueue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/basket_queue_dhp.cpp b/test/unit/queue/basket_queue_dhp.cpp index 33173ab1..6c2992ba 100644 --- a/test/unit/queue/basket_queue_dhp.cpp +++ b/test/unit/queue/basket_queue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -45,7 +45,7 @@ namespace { { typedef cc::BasketQueue< gc_type, int > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } diff --git a/test/unit/queue/basket_queue_hp.cpp b/test/unit/queue/basket_queue_hp.cpp index 031b8720..bc87ad04 100644 --- a/test/unit/queue/basket_queue_hp.cpp +++ b/test/unit/queue/basket_queue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/fcqueue.cpp b/test/unit/queue/fcqueue.cpp index 432fb6ce..3a553ab2 100644 --- a/test/unit/queue/fcqueue.cpp +++ b/test/unit/queue/fcqueue.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -30,6 +30,7 @@ #include #include +#include #include @@ -166,6 +167,67 @@ namespace { test( q ); } + TEST_F( FCQueue, std_deque_heavy_value ) + { + typedef fc_test::heavy_value<> ValueType; + typedef cds::container::FCQueue queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_empty_wait_strategy_heavy_value ) + { + typedef fc_test::heavy_value<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::empty > + >::type + > queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_single_mutex_single_condvar_heavy_value ) + { + typedef fc_test::heavy_value<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> > + >::type + > queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_single_mutex_multi_condvar_heavy_value ) + { + typedef fc_test::heavy_value<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> > + >::type + > queue_type; + + queue_type q; + test( q ); + } + + TEST_F( FCQueue, std_multi_mutex_multi_condvar_heavy_value ) + { + typedef fc_test::heavy_value<> ValueType; + typedef cds::container::FCQueue>, + cds::container::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> > + >::type + > queue_type; + + queue_type q; + test( q ); + } + TEST_F( FCQueue, std_single_mutex_single_condvar ) { typedef cds::container::FCQueue>, diff --git a/test/unit/queue/intrusive_basket_queue_dhp.cpp b/test/unit/queue/intrusive_basket_queue_dhp.cpp index a9fcefd6..522ecc9e 100644 --- a/test/unit/queue/intrusive_basket_queue_dhp.cpp +++ b/test/unit/queue/intrusive_basket_queue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,7 +55,7 @@ namespace { >::type > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::GarbageCollector::Construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } diff --git a/test/unit/queue/intrusive_basket_queue_hp.cpp b/test/unit/queue/intrusive_basket_queue_hp.cpp index 6542db90..18e59aaf 100644 --- a/test/unit/queue/intrusive_basket_queue_hp.cpp +++ b/test/unit/queue/intrusive_basket_queue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/intrusive_fcqueue.cpp b/test/unit/queue/intrusive_fcqueue.cpp index e979b8c5..fbd74871 100644 --- a/test/unit/queue/intrusive_fcqueue.cpp +++ b/test/unit/queue/intrusive_fcqueue.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/intrusive_moirqueue_dhp.cpp b/test/unit/queue/intrusive_moirqueue_dhp.cpp index 7ae7b3c9..4345479b 100644 --- a/test/unit/queue/intrusive_moirqueue_dhp.cpp +++ b/test/unit/queue/intrusive_moirqueue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { >::type > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } template diff --git a/test/unit/queue/intrusive_moirqueue_hp.cpp b/test/unit/queue/intrusive_moirqueue_hp.cpp index 91d18ac4..2a3f3a81 100644 --- a/test/unit/queue/intrusive_moirqueue_hp.cpp +++ b/test/unit/queue/intrusive_moirqueue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/intrusive_msqueue_dhp.cpp b/test/unit/queue/intrusive_msqueue_dhp.cpp index a2e86552..2108ca6b 100644 --- a/test/unit/queue/intrusive_msqueue_dhp.cpp +++ b/test/unit/queue/intrusive_msqueue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { >::type > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } template diff --git a/test/unit/queue/intrusive_msqueue_hp.cpp b/test/unit/queue/intrusive_msqueue_hp.cpp index 9bd718fd..fbe13483 100644 --- a/test/unit/queue/intrusive_msqueue_hp.cpp +++ b/test/unit/queue/intrusive_msqueue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/intrusive_optqueue_dhp.cpp b/test/unit/queue/intrusive_optqueue_dhp.cpp index c6036ed1..9f8c662b 100644 --- a/test/unit/queue/intrusive_optqueue_dhp.cpp +++ b/test/unit/queue/intrusive_optqueue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { >::type > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } template diff --git a/test/unit/queue/intrusive_optqueue_hp.cpp b/test/unit/queue/intrusive_optqueue_hp.cpp index 5b4c128f..594a7c67 100644 --- a/test/unit/queue/intrusive_optqueue_hp.cpp +++ b/test/unit/queue/intrusive_optqueue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/intrusive_segmented_queue_dhp.cpp b/test/unit/queue/intrusive_segmented_queue_dhp.cpp index 5e7d25d3..24ac1eaa 100644 --- a/test/unit/queue/intrusive_segmented_queue_dhp.cpp +++ b/test/unit/queue/intrusive_segmented_queue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -49,14 +49,14 @@ namespace { { typedef ci::SegmentedQueue< gc_type, item > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::hp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } template diff --git a/test/unit/queue/intrusive_segmented_queue_hp.cpp b/test/unit/queue/intrusive_segmented_queue_hp.cpp index 85008164..129f7c4a 100644 --- a/test/unit/queue/intrusive_segmented_queue_hp.cpp +++ b/test/unit/queue/intrusive_segmented_queue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/intrusive_vyukov_queue.cpp b/test/unit/queue/intrusive_vyukov_queue.cpp index 547649d0..26d71e02 100644 --- a/test/unit/queue/intrusive_vyukov_queue.cpp +++ b/test/unit/queue/intrusive_vyukov_queue.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/moirqueue_dhp.cpp b/test/unit/queue/moirqueue_dhp.cpp index 5713ad60..15fca504 100644 --- a/test/unit/queue/moirqueue_dhp.cpp +++ b/test/unit/queue/moirqueue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -45,14 +45,14 @@ namespace { { typedef cc::MoirQueue< gc_type, int > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/queue/moirqueue_hp.cpp b/test/unit/queue/moirqueue_hp.cpp index bd72ee28..ff5eb196 100644 --- a/test/unit/queue/moirqueue_hp.cpp +++ b/test/unit/queue/moirqueue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/msqueue_dhp.cpp b/test/unit/queue/msqueue_dhp.cpp index 46ac006f..2ae32820 100644 --- a/test/unit/queue/msqueue_dhp.cpp +++ b/test/unit/queue/msqueue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -45,14 +45,14 @@ namespace { { typedef cc::MSQueue< gc_type, int > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/queue/msqueue_hp.cpp b/test/unit/queue/msqueue_hp.cpp index 0d959a44..3cbfb7dd 100644 --- a/test/unit/queue/msqueue_hp.cpp +++ b/test/unit/queue/msqueue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/optimistic_queue_dhp.cpp b/test/unit/queue/optimistic_queue_dhp.cpp index 2c74a988..9a1c7c56 100644 --- a/test/unit/queue/optimistic_queue_dhp.cpp +++ b/test/unit/queue/optimistic_queue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -45,14 +45,14 @@ namespace { { typedef cc::OptimisticQueue< gc_type, int > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/queue/optimistic_queue_hp.cpp b/test/unit/queue/optimistic_queue_hp.cpp index ba279d44..5a777910 100644 --- a/test/unit/queue/optimistic_queue_hp.cpp +++ b/test/unit/queue/optimistic_queue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/rwqueue.cpp b/test/unit/queue/rwqueue.cpp index b9fd4361..f28e802d 100644 --- a/test/unit/queue/rwqueue.cpp +++ b/test/unit/queue/rwqueue.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/segmented_queue_dhp.cpp b/test/unit/queue/segmented_queue_dhp.cpp index a76a00df..8280f58d 100644 --- a/test/unit/queue/segmented_queue_dhp.cpp +++ b/test/unit/queue/segmented_queue_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -46,14 +46,14 @@ namespace { { typedef cc::SegmentedQueue< gc_type, int > queue_type; - cds::gc::dhp::GarbageCollector::Construct( 16, queue_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( queue_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/queue/segmented_queue_hp.cpp b/test/unit/queue/segmented_queue_hp.cpp index 21b5e87a..eb69fd55 100644 --- a/test/unit/queue/segmented_queue_hp.cpp +++ b/test/unit/queue/segmented_queue_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/test_bounded_queue.h b/test/unit/queue/test_bounded_queue.h index 4edb773d..f4179963 100644 --- a/test/unit/queue/test_bounded_queue.h +++ b/test/unit/queue/test_bounded_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/test_generic_queue.h b/test/unit/queue/test_generic_queue.h index eec329d1..0c084407 100644 --- a/test/unit/queue/test_generic_queue.h +++ b/test/unit/queue/test_generic_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/test_intrusive_bounded_queue.h b/test/unit/queue/test_intrusive_bounded_queue.h index a5bb7073..df9a7590 100644 --- a/test/unit/queue/test_intrusive_bounded_queue.h +++ b/test/unit/queue/test_intrusive_bounded_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/test_intrusive_msqueue.h b/test/unit/queue/test_intrusive_msqueue.h index f4e955db..9c0492ea 100644 --- a/test/unit/queue/test_intrusive_msqueue.h +++ b/test/unit/queue/test_intrusive_msqueue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/test_intrusive_segmented_queue.h b/test/unit/queue/test_intrusive_segmented_queue.h index 90ece348..cea21511 100644 --- a/test/unit/queue/test_intrusive_segmented_queue.h +++ b/test/unit/queue/test_intrusive_segmented_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/test_segmented_queue.h b/test/unit/queue/test_segmented_queue.h index 94e02921..d205e47d 100644 --- a/test/unit/queue/test_segmented_queue.h +++ b/test/unit/queue/test_segmented_queue.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/queue/vyukov_mpmc_queue.cpp b/test/unit/queue/vyukov_mpmc_queue.cpp index a2cf7c2e..421e36f0 100644 --- a/test/unit/queue/vyukov_mpmc_queue.cpp +++ b/test/unit/queue/vyukov_mpmc_queue.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/feldman_hashset_dhp.cpp b/test/unit/set/feldman_hashset_dhp.cpp index 9c4269a8..ed26b087 100644 --- a/test/unit/set/feldman_hashset_dhp.cpp +++ b/test/unit/set/feldman_hashset_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -49,14 +49,14 @@ namespace { }; typedef cc::FeldmanHashSet< gc_type, int_item, set_traits > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/feldman_hashset_hp.cpp b/test/unit/set/feldman_hashset_hp.cpp index 43d888df..dfead35c 100644 --- a/test/unit/set/feldman_hashset_hp.cpp +++ b/test/unit/set/feldman_hashset_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/feldman_hashset_rcu_gpb.cpp b/test/unit/set/feldman_hashset_rcu_gpb.cpp index d1b569ff..a2b1a2f3 100644 --- a/test/unit/set/feldman_hashset_rcu_gpb.cpp +++ b/test/unit/set/feldman_hashset_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/feldman_hashset_rcu_gpi.cpp b/test/unit/set/feldman_hashset_rcu_gpi.cpp index 09c8f56e..4b026a04 100644 --- a/test/unit/set/feldman_hashset_rcu_gpi.cpp +++ b/test/unit/set/feldman_hashset_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/feldman_hashset_rcu_gpt.cpp b/test/unit/set/feldman_hashset_rcu_gpt.cpp index 181e0710..919f635b 100644 --- a/test/unit/set/feldman_hashset_rcu_gpt.cpp +++ b/test/unit/set/feldman_hashset_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/feldman_hashset_rcu_shb.cpp b/test/unit/set/feldman_hashset_rcu_shb.cpp index 901cf066..02bbb51e 100644 --- a/test/unit/set/feldman_hashset_rcu_shb.cpp +++ b/test/unit/set/feldman_hashset_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/feldman_hashset_rcu_sht.cpp b/test/unit/set/feldman_hashset_rcu_sht.cpp index 5612bafa..cf5056c6 100644 --- a/test/unit/set/feldman_hashset_rcu_sht.cpp +++ b/test/unit/set/feldman_hashset_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_iterable_dhp.cpp b/test/unit/set/michael_iterable_dhp.cpp index 258c5979..26f8d44a 100644 --- a/test/unit/set/michael_iterable_dhp.cpp +++ b/test/unit/set/michael_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -47,14 +47,14 @@ namespace { typedef cc::IterableList< gc_type, int_item > list_type; typedef cc::MichaelHashSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/michael_iterable_hp.cpp b/test/unit/set/michael_iterable_hp.cpp index 09a79d9a..87cb7d85 100644 --- a/test/unit/set/michael_iterable_hp.cpp +++ b/test/unit/set/michael_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_lazy_dhp.cpp b/test/unit/set/michael_lazy_dhp.cpp index 649c0bb4..c4123462 100644 --- a/test/unit/set/michael_lazy_dhp.cpp +++ b/test/unit/set/michael_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -47,14 +47,14 @@ namespace { typedef cc::LazyList< gc_type, int_item > list_type; typedef cc::MichaelHashSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/michael_lazy_hp.cpp b/test/unit/set/michael_lazy_hp.cpp index c2528d7e..f2c8e654 100644 --- a/test/unit/set/michael_lazy_hp.cpp +++ b/test/unit/set/michael_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_lazy_nogc.cpp b/test/unit/set/michael_lazy_nogc.cpp index 39c10ab2..fad04cb3 100644 --- a/test/unit/set/michael_lazy_nogc.cpp +++ b/test/unit/set/michael_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_lazy_rcu_gpb.cpp b/test/unit/set/michael_lazy_rcu_gpb.cpp index 36efaa6a..62e28348 100644 --- a/test/unit/set/michael_lazy_rcu_gpb.cpp +++ b/test/unit/set/michael_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_lazy_rcu_gpi.cpp b/test/unit/set/michael_lazy_rcu_gpi.cpp index 0cdd5c06..685c1d2a 100644 --- a/test/unit/set/michael_lazy_rcu_gpi.cpp +++ b/test/unit/set/michael_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_lazy_rcu_gpt.cpp b/test/unit/set/michael_lazy_rcu_gpt.cpp index 6056a6e6..b2003533 100644 --- a/test/unit/set/michael_lazy_rcu_gpt.cpp +++ b/test/unit/set/michael_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_lazy_rcu_shb.cpp b/test/unit/set/michael_lazy_rcu_shb.cpp index 0d27bf72..858cfae0 100644 --- a/test/unit/set/michael_lazy_rcu_shb.cpp +++ b/test/unit/set/michael_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_lazy_rcu_sht.cpp b/test/unit/set/michael_lazy_rcu_sht.cpp index 5ba79e1e..9e7c5b11 100644 --- a/test/unit/set/michael_lazy_rcu_sht.cpp +++ b/test/unit/set/michael_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_michael_dhp.cpp b/test/unit/set/michael_michael_dhp.cpp index a2630209..327082a2 100644 --- a/test/unit/set/michael_michael_dhp.cpp +++ b/test/unit/set/michael_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -47,14 +47,14 @@ namespace { typedef cc::MichaelList< gc_type, int_item > list_type; typedef cc::MichaelHashSet< gc_type, list_type > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/michael_michael_hp.cpp b/test/unit/set/michael_michael_hp.cpp index bd9b9c32..1815dfbb 100644 --- a/test/unit/set/michael_michael_hp.cpp +++ b/test/unit/set/michael_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_michael_nogc.cpp b/test/unit/set/michael_michael_nogc.cpp index 6e421c6f..71989758 100644 --- a/test/unit/set/michael_michael_nogc.cpp +++ b/test/unit/set/michael_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_michael_rcu_gpb.cpp b/test/unit/set/michael_michael_rcu_gpb.cpp index 4183a0c3..4aaf978f 100644 --- a/test/unit/set/michael_michael_rcu_gpb.cpp +++ b/test/unit/set/michael_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_michael_rcu_gpi.cpp b/test/unit/set/michael_michael_rcu_gpi.cpp index fcbf03fa..07f53ab2 100644 --- a/test/unit/set/michael_michael_rcu_gpi.cpp +++ b/test/unit/set/michael_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_michael_rcu_gpt.cpp b/test/unit/set/michael_michael_rcu_gpt.cpp index 1aa272a1..cda37603 100644 --- a/test/unit/set/michael_michael_rcu_gpt.cpp +++ b/test/unit/set/michael_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_michael_rcu_shb.cpp b/test/unit/set/michael_michael_rcu_shb.cpp index 84f28f55..eb358466 100644 --- a/test/unit/set/michael_michael_rcu_shb.cpp +++ b/test/unit/set/michael_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/michael_michael_rcu_sht.cpp b/test/unit/set/michael_michael_rcu_sht.cpp index 6a26d159..843c4f2f 100644 --- a/test/unit/set/michael_michael_rcu_sht.cpp +++ b/test/unit/set/michael_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/skiplist_dhp.cpp b/test/unit/set/skiplist_dhp.cpp index 1dfb1f10..cd34b788 100644 --- a/test/unit/set/skiplist_dhp.cpp +++ b/test/unit/set/skiplist_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -45,14 +45,14 @@ namespace { { typedef cc::SkipListSet< gc_type, int_item > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/skiplist_hp.cpp b/test/unit/set/skiplist_hp.cpp index 43ca5a17..7d5c3061 100644 --- a/test/unit/set/skiplist_hp.cpp +++ b/test/unit/set/skiplist_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/skiplist_nogc.cpp b/test/unit/set/skiplist_nogc.cpp index 455f4eeb..8a2d6477 100644 --- a/test/unit/set/skiplist_nogc.cpp +++ b/test/unit/set/skiplist_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/skiplist_rcu_gpb.cpp b/test/unit/set/skiplist_rcu_gpb.cpp index 9ef3c99c..ba07af8f 100644 --- a/test/unit/set/skiplist_rcu_gpb.cpp +++ b/test/unit/set/skiplist_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/skiplist_rcu_gpi.cpp b/test/unit/set/skiplist_rcu_gpi.cpp index 8d2d54e5..d66c9811 100644 --- a/test/unit/set/skiplist_rcu_gpi.cpp +++ b/test/unit/set/skiplist_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/skiplist_rcu_gpt.cpp b/test/unit/set/skiplist_rcu_gpt.cpp index f2e6dd36..adce396a 100644 --- a/test/unit/set/skiplist_rcu_gpt.cpp +++ b/test/unit/set/skiplist_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/skiplist_rcu_shb.cpp b/test/unit/set/skiplist_rcu_shb.cpp index cb33cd7b..60641f98 100644 --- a/test/unit/set/skiplist_rcu_shb.cpp +++ b/test/unit/set/skiplist_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/skiplist_rcu_sht.cpp b/test/unit/set/skiplist_rcu_sht.cpp index 2d2aef03..2d3d15cb 100644 --- a/test/unit/set/skiplist_rcu_sht.cpp +++ b/test/unit/set/skiplist_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_iterable_dhp.cpp b/test/unit/set/split_iterable_dhp.cpp index 516981e9..d00989be 100644 --- a/test/unit/set/split_iterable_dhp.cpp +++ b/test/unit/set/split_iterable_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { }; typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/split_iterable_hp.cpp b/test/unit/set/split_iterable_hp.cpp index e4de61f2..73b92a2c 100644 --- a/test/unit/set/split_iterable_hp.cpp +++ b/test/unit/set/split_iterable_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_lazy_dhp.cpp b/test/unit/set/split_lazy_dhp.cpp index 2ce910ae..98b825ca 100644 --- a/test/unit/set/split_lazy_dhp.cpp +++ b/test/unit/set/split_lazy_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { }; typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/split_lazy_hp.cpp b/test/unit/set/split_lazy_hp.cpp index 333a4478..4c357c68 100644 --- a/test/unit/set/split_lazy_hp.cpp +++ b/test/unit/set/split_lazy_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_lazy_nogc.cpp b/test/unit/set/split_lazy_nogc.cpp index 520f4344..86359a1c 100644 --- a/test/unit/set/split_lazy_nogc.cpp +++ b/test/unit/set/split_lazy_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_lazy_rcu_gpb.cpp b/test/unit/set/split_lazy_rcu_gpb.cpp index 8929b457..675385f9 100644 --- a/test/unit/set/split_lazy_rcu_gpb.cpp +++ b/test/unit/set/split_lazy_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_lazy_rcu_gpi.cpp b/test/unit/set/split_lazy_rcu_gpi.cpp index b00f8d5c..dc4defc1 100644 --- a/test/unit/set/split_lazy_rcu_gpi.cpp +++ b/test/unit/set/split_lazy_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_lazy_rcu_gpt.cpp b/test/unit/set/split_lazy_rcu_gpt.cpp index a5442327..8c29dea5 100644 --- a/test/unit/set/split_lazy_rcu_gpt.cpp +++ b/test/unit/set/split_lazy_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_lazy_rcu_shb.cpp b/test/unit/set/split_lazy_rcu_shb.cpp index 484ba6c0..b3097383 100644 --- a/test/unit/set/split_lazy_rcu_shb.cpp +++ b/test/unit/set/split_lazy_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_lazy_rcu_sht.cpp b/test/unit/set/split_lazy_rcu_sht.cpp index fe1a60cc..12356162 100644 --- a/test/unit/set/split_lazy_rcu_sht.cpp +++ b/test/unit/set/split_lazy_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_michael_dhp.cpp b/test/unit/set/split_michael_dhp.cpp index c5f6f0ea..ebf3df72 100644 --- a/test/unit/set/split_michael_dhp.cpp +++ b/test/unit/set/split_michael_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -55,14 +55,14 @@ namespace { }; typedef cc::SplitListSet< gc_type, int_item, set_traits > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/set/split_michael_hp.cpp b/test/unit/set/split_michael_hp.cpp index f730240c..e7a2c86b 100644 --- a/test/unit/set/split_michael_hp.cpp +++ b/test/unit/set/split_michael_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_michael_nogc.cpp b/test/unit/set/split_michael_nogc.cpp index 1ba05d60..0765f1f4 100644 --- a/test/unit/set/split_michael_nogc.cpp +++ b/test/unit/set/split_michael_nogc.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_michael_rcu_gpb.cpp b/test/unit/set/split_michael_rcu_gpb.cpp index f2a0f73d..dd7de174 100644 --- a/test/unit/set/split_michael_rcu_gpb.cpp +++ b/test/unit/set/split_michael_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_michael_rcu_gpi.cpp b/test/unit/set/split_michael_rcu_gpi.cpp index eb050767..4cd48de1 100644 --- a/test/unit/set/split_michael_rcu_gpi.cpp +++ b/test/unit/set/split_michael_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_michael_rcu_gpt.cpp b/test/unit/set/split_michael_rcu_gpt.cpp index 2435259f..6885a586 100644 --- a/test/unit/set/split_michael_rcu_gpt.cpp +++ b/test/unit/set/split_michael_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_michael_rcu_shb.cpp b/test/unit/set/split_michael_rcu_shb.cpp index 9772c375..c6d3924a 100644 --- a/test/unit/set/split_michael_rcu_shb.cpp +++ b/test/unit/set/split_michael_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/split_michael_rcu_sht.cpp b/test/unit/set/split_michael_rcu_sht.cpp index 71bc80f5..d7ef7d5c 100644 --- a/test/unit/set/split_michael_rcu_sht.cpp +++ b/test/unit/set/split_michael_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_feldman_hashset.h b/test/unit/set/test_feldman_hashset.h index b03f3838..7feea672 100644 --- a/test/unit/set/test_feldman_hashset.h +++ b/test/unit/set/test_feldman_hashset.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_feldman_hashset_hp.h b/test/unit/set/test_feldman_hashset_hp.h index 0df10297..753698cd 100644 --- a/test/unit/set/test_feldman_hashset_hp.h +++ b/test/unit/set/test_feldman_hashset_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_feldman_hashset_rcu.h b/test/unit/set/test_feldman_hashset_rcu.h index 85b6161d..f5135dde 100644 --- a/test/unit/set/test_feldman_hashset_rcu.h +++ b/test/unit/set/test_feldman_hashset_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_michael_iterable.h b/test/unit/set/test_michael_iterable.h index 196bffa6..44b5e437 100644 --- a/test/unit/set/test_michael_iterable.h +++ b/test/unit/set/test_michael_iterable.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_michael_iterable_hp.h b/test/unit/set/test_michael_iterable_hp.h index 4810ed77..1ab9a134 100644 --- a/test/unit/set/test_michael_iterable_hp.h +++ b/test/unit/set/test_michael_iterable_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_michael_lazy_rcu.h b/test/unit/set/test_michael_lazy_rcu.h index 3928bc00..b947c433 100644 --- a/test/unit/set/test_michael_lazy_rcu.h +++ b/test/unit/set/test_michael_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_michael_michael_rcu.h b/test/unit/set/test_michael_michael_rcu.h index d488e545..2d33e029 100644 --- a/test/unit/set/test_michael_michael_rcu.h +++ b/test/unit/set/test_michael_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_ordered_set_hp.h b/test/unit/set/test_ordered_set_hp.h index 6bbf7865..3399ca9a 100644 --- a/test/unit/set/test_ordered_set_hp.h +++ b/test/unit/set/test_ordered_set_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_set.h b/test/unit/set/test_set.h index a2ed5862..aa42f677 100644 --- a/test/unit/set/test_set.h +++ b/test/unit/set/test_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_set_data.h b/test/unit/set/test_set_data.h index 23676c1d..b6ee345d 100644 --- a/test/unit/set/test_set_data.h +++ b/test/unit/set/test_set_data.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_set_hp.h b/test/unit/set/test_set_hp.h index cefce056..a649edd8 100644 --- a/test/unit/set/test_set_hp.h +++ b/test/unit/set/test_set_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_set_nogc.h b/test/unit/set/test_set_nogc.h index f6aad21c..06ad5648 100644 --- a/test/unit/set/test_set_nogc.h +++ b/test/unit/set/test_set_nogc.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_set_rcu.h b/test/unit/set/test_set_rcu.h index e15edc5a..77709472 100644 --- a/test/unit/set/test_set_rcu.h +++ b/test/unit/set/test_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_skiplist_rcu.h b/test/unit/set/test_skiplist_rcu.h index 6b0479e9..805e8546 100644 --- a/test/unit/set/test_skiplist_rcu.h +++ b/test/unit/set/test_skiplist_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_split_iterable.h b/test/unit/set/test_split_iterable.h index a4a0c79f..ba206925 100644 --- a/test/unit/set/test_split_iterable.h +++ b/test/unit/set/test_split_iterable.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_split_iterable_hp.h b/test/unit/set/test_split_iterable_hp.h index 7f6174e3..122c8627 100644 --- a/test/unit/set/test_split_iterable_hp.h +++ b/test/unit/set/test_split_iterable_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_split_lazy_rcu.h b/test/unit/set/test_split_lazy_rcu.h index ac1b826e..8f8c2ff2 100644 --- a/test/unit/set/test_split_lazy_rcu.h +++ b/test/unit/set/test_split_lazy_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/set/test_split_michael_rcu.h b/test/unit/set/test_split_michael_rcu.h index 34564c2b..812220fb 100644 --- a/test/unit/set/test_split_michael_rcu.h +++ b/test/unit/set/test_split_michael_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/stack/fcstack.cpp b/test/unit/stack/fcstack.cpp index 5ef55b42..c80f8a77 100644 --- a/test/unit/stack/fcstack.cpp +++ b/test/unit/stack/fcstack.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/stack/intrusive_fcstack.cpp b/test/unit/stack/intrusive_fcstack.cpp index 7da0144b..b6f272c3 100644 --- a/test/unit/stack/intrusive_fcstack.cpp +++ b/test/unit/stack/intrusive_fcstack.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/stack/intrusive_treiber_stack_dhp.cpp b/test/unit/stack/intrusive_treiber_stack_dhp.cpp index 57518166..8c59a56d 100644 --- a/test/unit/stack/intrusive_treiber_stack_dhp.cpp +++ b/test/unit/stack/intrusive_treiber_stack_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -56,14 +56,14 @@ namespace { >::type > stack_type; - cds::gc::dhp::GarbageCollector::Construct( 16, stack_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( stack_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } template diff --git a/test/unit/stack/intrusive_treiber_stack_hp.cpp b/test/unit/stack/intrusive_treiber_stack_hp.cpp index 897f7e30..e238ea94 100644 --- a/test/unit/stack/intrusive_treiber_stack_hp.cpp +++ b/test/unit/stack/intrusive_treiber_stack_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/stack/test_intrusive_treiber_stack.h b/test/unit/stack/test_intrusive_treiber_stack.h index 3e729fe3..6721c934 100644 --- a/test/unit/stack/test_intrusive_treiber_stack.h +++ b/test/unit/stack/test_intrusive_treiber_stack.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/stack/test_treiber_stack.h b/test/unit/stack/test_treiber_stack.h index 33efedcf..e3bf3ff5 100644 --- a/test/unit/stack/test_treiber_stack.h +++ b/test/unit/stack/test_treiber_stack.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/stack/treiber_stack_dhp.cpp b/test/unit/stack/treiber_stack_dhp.cpp index 2f363325..0ef7731f 100644 --- a/test/unit/stack/treiber_stack_dhp.cpp +++ b/test/unit/stack/treiber_stack_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -47,14 +47,14 @@ namespace { { typedef cc::TreiberStack< gc_type, int > stack_type; - cds::gc::dhp::GarbageCollector::Construct( 16, stack_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( stack_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } template diff --git a/test/unit/stack/treiber_stack_hp.cpp b/test/unit/stack/treiber_stack_hp.cpp index 176caead..d480a7d9 100644 --- a/test/unit/stack/treiber_stack_hp.cpp +++ b/test/unit/stack/treiber_stack_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/cuckoo_map.cpp b/test/unit/striped-map/cuckoo_map.cpp index 64804903..bb4f60c7 100644 --- a/test/unit/striped-map/cuckoo_map.cpp +++ b/test/unit/striped-map/cuckoo_map.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_boost_flat_map.cpp b/test/unit/striped-map/map_boost_flat_map.cpp index 451c7005..ea195724 100644 --- a/test/unit/striped-map/map_boost_flat_map.cpp +++ b/test/unit/striped-map/map_boost_flat_map.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_boost_list.cpp b/test/unit/striped-map/map_boost_list.cpp index 5c9ec4e4..7bec99d2 100644 --- a/test/unit/striped-map/map_boost_list.cpp +++ b/test/unit/striped-map/map_boost_list.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_boost_map.cpp b/test/unit/striped-map/map_boost_map.cpp index 4f24a348..0b3be96a 100644 --- a/test/unit/striped-map/map_boost_map.cpp +++ b/test/unit/striped-map/map_boost_map.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_boost_slist.cpp b/test/unit/striped-map/map_boost_slist.cpp index 6c07c3e6..5417fafc 100644 --- a/test/unit/striped-map/map_boost_slist.cpp +++ b/test/unit/striped-map/map_boost_slist.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_boost_unordered_map.cpp b/test/unit/striped-map/map_boost_unordered_map.cpp index 2555efda..5ee05dd4 100644 --- a/test/unit/striped-map/map_boost_unordered_map.cpp +++ b/test/unit/striped-map/map_boost_unordered_map.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_std_list.cpp b/test/unit/striped-map/map_std_list.cpp index 1a0c5dd3..10fb2561 100644 --- a/test/unit/striped-map/map_std_list.cpp +++ b/test/unit/striped-map/map_std_list.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_std_map.cpp b/test/unit/striped-map/map_std_map.cpp index 76f6a5e6..11cbd059 100644 --- a/test/unit/striped-map/map_std_map.cpp +++ b/test/unit/striped-map/map_std_map.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/map_std_unordered_map.cpp b/test/unit/striped-map/map_std_unordered_map.cpp index 688f4855..68367181 100644 --- a/test/unit/striped-map/map_std_unordered_map.cpp +++ b/test/unit/striped-map/map_std_unordered_map.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/test_map.h b/test/unit/striped-map/test_map.h index bb49f437..5655beed 100644 --- a/test/unit/striped-map/test_map.h +++ b/test/unit/striped-map/test_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/test_map_data.h b/test/unit/striped-map/test_map_data.h index 737a013c..7fa34b4a 100644 --- a/test/unit/striped-map/test_map_data.h +++ b/test/unit/striped-map/test_map_data.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-map/test_striped_map.h b/test/unit/striped-map/test_striped_map.h index 6463476c..5fe5e2c6 100644 --- a/test/unit/striped-map/test_striped_map.h +++ b/test/unit/striped-map/test_striped_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/cuckoo_set.cpp b/test/unit/striped-set/cuckoo_set.cpp index a9658a03..cde2e7d7 100644 --- a/test/unit/striped-set/cuckoo_set.cpp +++ b/test/unit/striped-set/cuckoo_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_avl_set.cpp b/test/unit/striped-set/intrusive_boost_avl_set.cpp index 4a758683..371c0db6 100644 --- a/test/unit/striped-set/intrusive_boost_avl_set.cpp +++ b/test/unit/striped-set/intrusive_boost_avl_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_list.cpp b/test/unit/striped-set/intrusive_boost_list.cpp index b859839c..eb82dd00 100644 --- a/test/unit/striped-set/intrusive_boost_list.cpp +++ b/test/unit/striped-set/intrusive_boost_list.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_set.cpp b/test/unit/striped-set/intrusive_boost_set.cpp index 28a13e10..dbb5f5dc 100644 --- a/test/unit/striped-set/intrusive_boost_set.cpp +++ b/test/unit/striped-set/intrusive_boost_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_sg_set.cpp b/test/unit/striped-set/intrusive_boost_sg_set.cpp index 9de05412..8b3a1802 100644 --- a/test/unit/striped-set/intrusive_boost_sg_set.cpp +++ b/test/unit/striped-set/intrusive_boost_sg_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_slist.cpp b/test/unit/striped-set/intrusive_boost_slist.cpp index 0018ece7..ff2e145c 100644 --- a/test/unit/striped-set/intrusive_boost_slist.cpp +++ b/test/unit/striped-set/intrusive_boost_slist.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_splay_set.cpp b/test/unit/striped-set/intrusive_boost_splay_set.cpp index 686f8cd1..35f67e57 100644 --- a/test/unit/striped-set/intrusive_boost_splay_set.cpp +++ b/test/unit/striped-set/intrusive_boost_splay_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_treap_set.cpp b/test/unit/striped-set/intrusive_boost_treap_set.cpp index 5fbe72d8..ea3b797f 100644 --- a/test/unit/striped-set/intrusive_boost_treap_set.cpp +++ b/test/unit/striped-set/intrusive_boost_treap_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_boost_unordered_set.cpp b/test/unit/striped-set/intrusive_boost_unordered_set.cpp index 7e653073..a3759322 100644 --- a/test/unit/striped-set/intrusive_boost_unordered_set.cpp +++ b/test/unit/striped-set/intrusive_boost_unordered_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/intrusive_cuckoo_set.cpp b/test/unit/striped-set/intrusive_cuckoo_set.cpp index 4122f2e8..7bed730b 100644 --- a/test/unit/striped-set/intrusive_cuckoo_set.cpp +++ b/test/unit/striped-set/intrusive_cuckoo_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_boost_flatset.cpp b/test/unit/striped-set/set_boost_flatset.cpp index e7136167..4814d995 100644 --- a/test/unit/striped-set/set_boost_flatset.cpp +++ b/test/unit/striped-set/set_boost_flatset.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_boost_list.cpp b/test/unit/striped-set/set_boost_list.cpp index ffc6f563..54b55fd7 100644 --- a/test/unit/striped-set/set_boost_list.cpp +++ b/test/unit/striped-set/set_boost_list.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_boost_set.cpp b/test/unit/striped-set/set_boost_set.cpp index bee6c125..7cb0ec31 100644 --- a/test/unit/striped-set/set_boost_set.cpp +++ b/test/unit/striped-set/set_boost_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_boost_slist.cpp b/test/unit/striped-set/set_boost_slist.cpp index 3950d736..2d1f452b 100644 --- a/test/unit/striped-set/set_boost_slist.cpp +++ b/test/unit/striped-set/set_boost_slist.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_boost_stable_vector.cpp b/test/unit/striped-set/set_boost_stable_vector.cpp index fa8857d8..eef1ba9b 100644 --- a/test/unit/striped-set/set_boost_stable_vector.cpp +++ b/test/unit/striped-set/set_boost_stable_vector.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_boost_unordered_set.cpp b/test/unit/striped-set/set_boost_unordered_set.cpp index 93025507..54773bac 100644 --- a/test/unit/striped-set/set_boost_unordered_set.cpp +++ b/test/unit/striped-set/set_boost_unordered_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_boost_vector.cpp b/test/unit/striped-set/set_boost_vector.cpp index 876ee888..49e7b6ad 100644 --- a/test/unit/striped-set/set_boost_vector.cpp +++ b/test/unit/striped-set/set_boost_vector.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_std_list.cpp b/test/unit/striped-set/set_std_list.cpp index e55133f9..913232bc 100644 --- a/test/unit/striped-set/set_std_list.cpp +++ b/test/unit/striped-set/set_std_list.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_std_set.cpp b/test/unit/striped-set/set_std_set.cpp index 2f3b4207..19cfd6b1 100644 --- a/test/unit/striped-set/set_std_set.cpp +++ b/test/unit/striped-set/set_std_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_std_unordered_set.cpp b/test/unit/striped-set/set_std_unordered_set.cpp index b5a47c67..b6e7f3a9 100644 --- a/test/unit/striped-set/set_std_unordered_set.cpp +++ b/test/unit/striped-set/set_std_unordered_set.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/set_std_vector.cpp b/test/unit/striped-set/set_std_vector.cpp index e6996e9f..6ceb7562 100644 --- a/test/unit/striped-set/set_std_vector.cpp +++ b/test/unit/striped-set/set_std_vector.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/test_intrusive_set.h b/test/unit/striped-set/test_intrusive_set.h index 036ad710..0b44a511 100644 --- a/test/unit/striped-set/test_intrusive_set.h +++ b/test/unit/striped-set/test_intrusive_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/test_intrusive_striped_set.h b/test/unit/striped-set/test_intrusive_striped_set.h index efdb876b..3874ba89 100644 --- a/test/unit/striped-set/test_intrusive_striped_set.h +++ b/test/unit/striped-set/test_intrusive_striped_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/test_set.h b/test/unit/striped-set/test_set.h index 1deefc3f..e81a7d61 100644 --- a/test/unit/striped-set/test_set.h +++ b/test/unit/striped-set/test_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/striped-set/test_striped_set.h b/test/unit/striped-set/test_striped_set.h index a25d72fd..1e7dec47 100644 --- a/test/unit/striped-set/test_striped_set.h +++ b/test/unit/striped-set/test_striped_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpb.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpb.cpp index 7731fb95..f58bf30b 100644 --- a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpb.cpp +++ b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpi.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpi.cpp index 178abaec..69cf0cc2 100644 --- a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpi.cpp +++ b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpt.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpt.cpp index 240178e5..e2b20c4f 100644 --- a/test/unit/tree/bronson_avltree_map_ptr_rcu_gpt.cpp +++ b/test/unit/tree/bronson_avltree_map_ptr_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_shb.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_shb.cpp index da7cc3bf..b5f0eae8 100644 --- a/test/unit/tree/bronson_avltree_map_ptr_rcu_shb.cpp +++ b/test/unit/tree/bronson_avltree_map_ptr_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_ptr_rcu_sht.cpp b/test/unit/tree/bronson_avltree_map_ptr_rcu_sht.cpp index afcf43cc..bc4e0fb2 100644 --- a/test/unit/tree/bronson_avltree_map_ptr_rcu_sht.cpp +++ b/test/unit/tree/bronson_avltree_map_ptr_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_rcu_gpb.cpp b/test/unit/tree/bronson_avltree_map_rcu_gpb.cpp index 8ccb28a9..6b806176 100644 --- a/test/unit/tree/bronson_avltree_map_rcu_gpb.cpp +++ b/test/unit/tree/bronson_avltree_map_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_rcu_gpi.cpp b/test/unit/tree/bronson_avltree_map_rcu_gpi.cpp index 52c4aac6..b1166bac 100644 --- a/test/unit/tree/bronson_avltree_map_rcu_gpi.cpp +++ b/test/unit/tree/bronson_avltree_map_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_rcu_gpt.cpp b/test/unit/tree/bronson_avltree_map_rcu_gpt.cpp index b251875c..92b616f6 100644 --- a/test/unit/tree/bronson_avltree_map_rcu_gpt.cpp +++ b/test/unit/tree/bronson_avltree_map_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_rcu_shb.cpp b/test/unit/tree/bronson_avltree_map_rcu_shb.cpp index 03c7741b..9429c264 100644 --- a/test/unit/tree/bronson_avltree_map_rcu_shb.cpp +++ b/test/unit/tree/bronson_avltree_map_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/bronson_avltree_map_rcu_sht.cpp b/test/unit/tree/bronson_avltree_map_rcu_sht.cpp index ea41a2b6..3a12bf18 100644 --- a/test/unit/tree/bronson_avltree_map_rcu_sht.cpp +++ b/test/unit/tree/bronson_avltree_map_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_map_dhp.cpp b/test/unit/tree/ellen_bintree_map_dhp.cpp index cdbe7183..0d1a7155 100644 --- a/test/unit/tree/ellen_bintree_map_dhp.cpp +++ b/test/unit/tree/ellen_bintree_map_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -46,14 +46,14 @@ namespace { { typedef cc::EllenBinTreeMap< gc_type, key_type, value_type > map_type; - cds::gc::dhp::GarbageCollector::Construct( 16, map_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( map_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/tree/ellen_bintree_map_hp.cpp b/test/unit/tree/ellen_bintree_map_hp.cpp index d0610976..f4852258 100644 --- a/test/unit/tree/ellen_bintree_map_hp.cpp +++ b/test/unit/tree/ellen_bintree_map_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_map_rcu_gpb.cpp b/test/unit/tree/ellen_bintree_map_rcu_gpb.cpp index 4e1e00af..90c16c81 100644 --- a/test/unit/tree/ellen_bintree_map_rcu_gpb.cpp +++ b/test/unit/tree/ellen_bintree_map_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_map_rcu_gpi.cpp b/test/unit/tree/ellen_bintree_map_rcu_gpi.cpp index 91569cf4..d9cd7000 100644 --- a/test/unit/tree/ellen_bintree_map_rcu_gpi.cpp +++ b/test/unit/tree/ellen_bintree_map_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_map_rcu_gpt.cpp b/test/unit/tree/ellen_bintree_map_rcu_gpt.cpp index e54b9b8d..47b4dd97 100644 --- a/test/unit/tree/ellen_bintree_map_rcu_gpt.cpp +++ b/test/unit/tree/ellen_bintree_map_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_map_rcu_shb.cpp b/test/unit/tree/ellen_bintree_map_rcu_shb.cpp index f0ea3e92..faf2af01 100644 --- a/test/unit/tree/ellen_bintree_map_rcu_shb.cpp +++ b/test/unit/tree/ellen_bintree_map_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_map_rcu_sht.cpp b/test/unit/tree/ellen_bintree_map_rcu_sht.cpp index ff148ada..b8d290e4 100644 --- a/test/unit/tree/ellen_bintree_map_rcu_sht.cpp +++ b/test/unit/tree/ellen_bintree_map_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_set_dhp.cpp b/test/unit/tree/ellen_bintree_set_dhp.cpp index dedf0585..661e6183 100644 --- a/test/unit/tree/ellen_bintree_set_dhp.cpp +++ b/test/unit/tree/ellen_bintree_set_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -52,14 +52,14 @@ namespace { { typedef cc::EllenBinTreeSet< gc_type, key_type, int_item > set_type; - cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::hp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } }; diff --git a/test/unit/tree/ellen_bintree_set_hp.cpp b/test/unit/tree/ellen_bintree_set_hp.cpp index 079a544e..f8736829 100644 --- a/test/unit/tree/ellen_bintree_set_hp.cpp +++ b/test/unit/tree/ellen_bintree_set_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_set_rcu_gpb.cpp b/test/unit/tree/ellen_bintree_set_rcu_gpb.cpp index a5681d87..3202e70c 100644 --- a/test/unit/tree/ellen_bintree_set_rcu_gpb.cpp +++ b/test/unit/tree/ellen_bintree_set_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_set_rcu_gpi.cpp b/test/unit/tree/ellen_bintree_set_rcu_gpi.cpp index 4c552011..ac5e354a 100644 --- a/test/unit/tree/ellen_bintree_set_rcu_gpi.cpp +++ b/test/unit/tree/ellen_bintree_set_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_set_rcu_gpt.cpp b/test/unit/tree/ellen_bintree_set_rcu_gpt.cpp index 15a68902..d6ca5799 100644 --- a/test/unit/tree/ellen_bintree_set_rcu_gpt.cpp +++ b/test/unit/tree/ellen_bintree_set_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_set_rcu_shb.cpp b/test/unit/tree/ellen_bintree_set_rcu_shb.cpp index 9d60fa3f..3674bd73 100644 --- a/test/unit/tree/ellen_bintree_set_rcu_shb.cpp +++ b/test/unit/tree/ellen_bintree_set_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_set_rcu_sht.cpp b/test/unit/tree/ellen_bintree_set_rcu_sht.cpp index ae55ebaa..b5251786 100644 --- a/test/unit/tree/ellen_bintree_set_rcu_sht.cpp +++ b/test/unit/tree/ellen_bintree_set_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/ellen_bintree_update_desc_pool.cpp b/test/unit/tree/ellen_bintree_update_desc_pool.cpp index 6a986fff..e891d20e 100644 --- a/test/unit/tree/ellen_bintree_update_desc_pool.cpp +++ b/test/unit/tree/ellen_bintree_update_desc_pool.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/intrusive_ellenbintree_dhp.cpp b/test/unit/tree/intrusive_ellenbintree_dhp.cpp index 1087a515..808c4e52 100644 --- a/test/unit/tree/intrusive_ellenbintree_dhp.cpp +++ b/test/unit/tree/intrusive_ellenbintree_dhp.cpp @@ -1,7 +1,7 @@ /* 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/ @@ -52,14 +52,14 @@ namespace { { typedef ci::EllenBinTree< gc_type, key_type, base_item_type > tree_type; - cds::gc::dhp::GarbageCollector::Construct( 16, tree_type::c_nHazardPtrCount ); + cds::gc::dhp::smr::construct( tree_type::c_nHazardPtrCount ); cds::threading::Manager::attachThread(); } void TearDown() { cds::threading::Manager::detachThread(); - cds::gc::dhp::GarbageCollector::Destruct(); + cds::gc::dhp::smr::destruct(); } struct generic_traits: public ci::ellen_bintree::traits diff --git a/test/unit/tree/intrusive_ellenbintree_hp.cpp b/test/unit/tree/intrusive_ellenbintree_hp.cpp index 0c26a804..2398d0b4 100644 --- a/test/unit/tree/intrusive_ellenbintree_hp.cpp +++ b/test/unit/tree/intrusive_ellenbintree_hp.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_gpb.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_gpb.cpp index 7ec8c595..d8c8ee09 100644 --- a/test/unit/tree/intrusive_ellenbintree_rcu_gpb.cpp +++ b/test/unit/tree/intrusive_ellenbintree_rcu_gpb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_gpi.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_gpi.cpp index 94062ac7..dd250259 100644 --- a/test/unit/tree/intrusive_ellenbintree_rcu_gpi.cpp +++ b/test/unit/tree/intrusive_ellenbintree_rcu_gpi.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_gpt.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_gpt.cpp index 10f3aba0..6f2fe9b8 100644 --- a/test/unit/tree/intrusive_ellenbintree_rcu_gpt.cpp +++ b/test/unit/tree/intrusive_ellenbintree_rcu_gpt.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_shb.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_shb.cpp index d77441f3..07b4e2fc 100644 --- a/test/unit/tree/intrusive_ellenbintree_rcu_shb.cpp +++ b/test/unit/tree/intrusive_ellenbintree_rcu_shb.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/intrusive_ellenbintree_rcu_sht.cpp b/test/unit/tree/intrusive_ellenbintree_rcu_sht.cpp index 9670becc..1e8d8650 100644 --- a/test/unit/tree/intrusive_ellenbintree_rcu_sht.cpp +++ b/test/unit/tree/intrusive_ellenbintree_rcu_sht.cpp @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_bronson_avltree_map.h b/test/unit/tree/test_bronson_avltree_map.h index 151259c8..d82c9d11 100644 --- a/test/unit/tree/test_bronson_avltree_map.h +++ b/test/unit/tree/test_bronson_avltree_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_bronson_avltree_map_ptr.h b/test/unit/tree/test_bronson_avltree_map_ptr.h index ae7f6cef..4ec6ea32 100644 --- a/test/unit/tree/test_bronson_avltree_map_ptr.h +++ b/test/unit/tree/test_bronson_avltree_map_ptr.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_ellen_bintree_map_rcu.h b/test/unit/tree/test_ellen_bintree_map_rcu.h index fee04230..5907b09e 100644 --- a/test/unit/tree/test_ellen_bintree_map_rcu.h +++ b/test/unit/tree/test_ellen_bintree_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_ellen_bintree_set_rcu.h b/test/unit/tree/test_ellen_bintree_set_rcu.h index f777356c..efd58367 100644 --- a/test/unit/tree/test_ellen_bintree_set_rcu.h +++ b/test/unit/tree/test_ellen_bintree_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_ellen_bintree_update_desc_pool.h b/test/unit/tree/test_ellen_bintree_update_desc_pool.h index f49de41b..90661b1a 100644 --- a/test/unit/tree/test_ellen_bintree_update_desc_pool.h +++ b/test/unit/tree/test_ellen_bintree_update_desc_pool.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_intrusive_ellen_bintree_rcu.h b/test/unit/tree/test_intrusive_ellen_bintree_rcu.h index 0c08a905..e191f15e 100644 --- a/test/unit/tree/test_intrusive_ellen_bintree_rcu.h +++ b/test/unit/tree/test_intrusive_ellen_bintree_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_intrusive_tree.h b/test/unit/tree/test_intrusive_tree.h index b33e17e7..7b9d4266 100644 --- a/test/unit/tree/test_intrusive_tree.h +++ b/test/unit/tree/test_intrusive_tree.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_intrusive_tree_hp.h b/test/unit/tree/test_intrusive_tree_hp.h index 1a1325af..37521ab4 100644 --- a/test/unit/tree/test_intrusive_tree_hp.h +++ b/test/unit/tree/test_intrusive_tree_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_intrusive_tree_rcu.h b/test/unit/tree/test_intrusive_tree_rcu.h index 4cae7a7d..20c2f3da 100644 --- a/test/unit/tree/test_intrusive_tree_rcu.h +++ b/test/unit/tree/test_intrusive_tree_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_tree_map.h b/test/unit/tree/test_tree_map.h index 5e086bb2..0a0799fa 100644 --- a/test/unit/tree/test_tree_map.h +++ b/test/unit/tree/test_tree_map.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_tree_map_data.h b/test/unit/tree/test_tree_map_data.h index 533bb921..95a7444d 100644 --- a/test/unit/tree/test_tree_map_data.h +++ b/test/unit/tree/test_tree_map_data.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_tree_map_hp.h b/test/unit/tree/test_tree_map_hp.h index d4973fb8..73b7f01d 100644 --- a/test/unit/tree/test_tree_map_hp.h +++ b/test/unit/tree/test_tree_map_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_tree_map_rcu.h b/test/unit/tree/test_tree_map_rcu.h index fa614fed..4600cccc 100644 --- a/test/unit/tree/test_tree_map_rcu.h +++ b/test/unit/tree/test_tree_map_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_tree_set.h b/test/unit/tree/test_tree_set.h index e69c9b40..8e991d57 100644 --- a/test/unit/tree/test_tree_set.h +++ b/test/unit/tree/test_tree_set.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_tree_set_hp.h b/test/unit/tree/test_tree_set_hp.h index 0d7194cb..eded9e4f 100644 --- a/test/unit/tree/test_tree_set_hp.h +++ b/test/unit/tree/test_tree_set_hp.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/test/unit/tree/test_tree_set_rcu.h b/test/unit/tree/test_tree_set_rcu.h index be22a843..56d7d71e 100644 --- a/test/unit/tree/test_tree_set_rcu.h +++ b/test/unit/tree/test_tree_set_rcu.h @@ -1,7 +1,7 @@ /* 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/ diff --git a/tools/brush_cds.pl b/tools/brush_cds.pl index f4b2e876..4e67a4e8 100644 --- a/tools/brush_cds.pl +++ b/tools/brush_cds.pl @@ -46,46 +46,12 @@ sub processFile( $ ) #binmode $fh ; my $str = ''; while (<$fh>) { - if ( /^\/\/\$\$CDS-header\$\$/ ) { - $str .= -"/* - This file is a part of libcds - Concurrent Data Structures library - - (C) Copyright Maxim Khizhinsky (libcds.dev\@gmail.com) 2006-$year - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/\n" ; - } - else { - $nTabsFound += $_ =~ s/\t/ /g; - $_ =~ s/\s+$//; - $_ =~ s/\s+;$/;/; - $_ =~ s/\)\s+\)/\)\)/g; - $str .= $_ ; - $str .= "\n" ; - } + $nTabsFound += $_ =~ s/\t/ /g; + $_ =~ s/\s+$//; + $_ =~ s/\s+;$/;/; + $_ =~ s/\)\s+\)/\)\)/g; + $str .= $_ ; + $str .= "\n" ; } close $fh; diff --git a/tools/make_distrib.pl b/tools/make_distrib.pl index c2365d4a..65d6af08 100644 --- a/tools/make_distrib.pl +++ b/tools/make_distrib.pl @@ -14,7 +14,7 @@ my $DistrDir = get_distrib_dir(); print "Distrib dir: $DistrDir\n"; # Git clone -my $GitBranch = get_git_branch(); +my $GitBranch = 'master'; my $GitRepo = get_git_repo(); print "Clone git: repo=$GitRepo, branch=$GitBranch\n"; `git clone -b $GitBranch $GitRepo $DistrDir`; # or die "Error cloning branch $GitBranch to $DistrDir\n"; @@ -22,15 +22,9 @@ print "Remove $DistrDir/.git directory\n"; `rm -fr $DistrDir/.git`; `rm -f $DistrDir/.gitignore $DistrDir/tools/brush_cds.pl $DistrDir/tools/make_distrib.pl $DistrDir/tools/make_distrib.bat $DistrDir/doxygen/images.odp`; -print "make copyright...\n" ; -makeCopyright($DistrDir); - print "patch files...\n"; -patch_file("$DistrDir/build/Makefile", 'VERSION=\d+\.\d+\.\d+', "VERSION=$Version" ); patch_file("$DistrDir/CMakeList.txt", 'PROJECT_VERSION \d+\.\d+\.\d+', "PROJECT_VERSION $Version" ); patch_file("$DistrDir/doxygen/cds.doxy", 'PROJECT_NUMBER\s*=\s*\d+\.\d+\.\d+', "PROJECT_NUMBER = $Version" ) ; -patch_file("$DistrDir/projects/android/jni/Android.mk", 'CDS_LIBRARY_VERSION\s*:=\s*\d+\.\d+\.\d+', - "CDS_LIBRARY_VERSION := $Version" ); print "Make docs\n"; `cd $DistrDir/tools && make_docs.bat && rm doxygen.log && cd $curDir`; @@ -69,91 +63,7 @@ sub get_distrib_dir() sub get_git_repo() { - return 'git@github.com:khizmax/libcds.git'; -} - -sub get_git_branch() -{ - my $branchList = `git branch`; - #print "$branchList\n"; - - # Search "v$Version-rc" branch - my ($branch) = $branchList =~ /(v$Version-rc\d*)/g; - return $branch || 'master'; -} - -sub makeCopyright($) -{ - my $distrDir = shift; - processDir( "$distrDir/cds" ) ; - processDir( "$distrDir/src" ) ; - processDir( "$distrDir/tests/test-hdr" ) ; - processDir( "$distrDir/tests/unit" ) ; - processDir( "$distrDir/tests/cppunit" ) ; -} - -sub processDir( $ ) -{ - my $dirName = shift ; - - opendir(my $dh, $dirName) || die "can't opendir $dirName: $!"; - my @files = grep { /^[^\.]/ } readdir($dh); - closedir $dh; - - foreach my $file ( @files ) { - if ( -d "$dirName/$file" ) { - processDir("$dirName/$file") ; - } - elsif ( $file =~ /\.(h|cpp)$/ ) { - processFile( "$dirName/$file" ) ; - } - } -} - -sub processFile( $ ) -{ - my $file = shift ; - - - if ( open( my $fh, $file )) { - binmode $fh ; - my $str = '' ; - while (<$fh>) { - if ( /^\/\/\$\$CDS-header\$\$/ ) { - $str .= -"/* - This file is a part of libcds - Concurrent Data Structures library - Version: $Version - - (C) Copyright Maxim Khizhinsky (libcds.dev\@gmail.com) 2006-$year - Distributed under the BSD license (see accompanying file LICENSE) - - Source code repo: http://github.com/khizmax/libcds/ - Download: http://sourceforge.net/projects/libcds/files/ -*/\n" ; - } - elsif ( /^\/\/\$\$CDS-\/\*\$\$/ ) { - $str .= "/*\n" ; - } - elsif ( /^\/\/\$\$CDS-\*\/\$\$/ ) { - $str .= "*/\n" ; - } - else { - $nTabsFound += $_ =~ s/\t/ /g; - $_ =~ s/\s+$// ; - $_ =~ s/\s+;$/;/; - $str .= $_ ; - $str .= "\n" ; - } - } - close $fh ; - - if ( open( my $fh, ">$file" )) { - binmode $fh ; - print $fh $str ; - close $fh ; - } - } + return 'https://github.com/khizmax/libcds.git'; } sub patch_file(@) { diff --git a/tools/tsan-suppression b/tools/tsan-suppression index 71cc3de2..4eb79b0a 100644 --- a/tools/tsan-suppression +++ b/tools/tsan-suppression @@ -25,6 +25,3 @@ race:cds::intrusive::MSPriorityQueue #TODO: gc::DHP must be reimplemented ASAP race:cds::gc::dhp::GarbageCollector::scan - -#TODO: temporary suppressed. Must be researched later -race:cds::memory::michael::Heap \ No newline at end of file
Max number of guarded (hazard) pointers per threadlimited (specifies in GC object ctor)limited (specifies in SMR object ctor) unlimited (dynamically allocated when needed)