There are different specializations of this template for each garbage collecting schema used.
You should include appropriate .h-file depending on GC you are using:
- for gc::HP: \code #include <cds/container/michael_list_hp.h> \endcode
- - for gc::PTB: \code #include <cds/container/michael_list_ptb.h> \endcode
+ - for gc::DHP: \code #include <cds/container/michael_list_dhp.h> \endcode
- for \ref cds_urcu_desc "RCU": \code #include <cds/container/michael_list_rcu.h> \endcode
- for gc::nogc: \code #include <cds/container/michael_list_nogc.h> \endcode
*/
#define __CDS_CONTAINER_MICHAEL_KVLIST_PTB_H
#include <cds/container/details/michael_list_base.h>
-#include <cds/intrusive/michael_list_ptb.h>
+#include <cds/intrusive/michael_list_dhp.h>
#include <cds/container/details/make_michael_kvlist.h>
#include <cds/container/impl/michael_kvlist.h>
--- /dev/null
+//$$CDS-header$$
+
+#ifndef __CDS_CONTAINER_MICHAEL_LIST_DHP_H
+#define __CDS_CONTAINER_MICHAEL_LIST_DHP_H
+
+#include <cds/container/details/michael_list_base.h>
+#include <cds/intrusive/michael_list_dhp.h>
+#include <cds/container/details/make_michael_list.h>
+#include <cds/container/impl/michael_list.h>
+
+#endif // #ifndef __CDS_CONTAINER_MICHAEL_LIST_DHP_H
+++ /dev/null
-//$$CDS-header$$
-
-#ifndef __CDS_CONTAINER_MICHAEL_LIST_PTB_H
-#define __CDS_CONTAINER_MICHAEL_LIST_PTB_H
-
-#include <cds/container/details/michael_list_base.h>
-#include <cds/intrusive/michael_list_ptb.h>
-#include <cds/container/details/make_michael_list.h>
-#include <cds/container/impl/michael_list.h>
-
-#endif // #ifndef __CDS_CONTAINER_MICHAEL_LIST_PTB_H
MichaelList as a bucket type. Also, for ordered list we should develop a comparator for our \p Foo
struct.
\code
- #include <cds/container/michael_list_ptb.h>
+ #include <cds/container/michael_list_dhp.h>
#include <cds/container/michael_set.h>
namespace cc = cds::container;
There are different specializations of this template for each garbage collecting schema used.
You should select GC needed and include appropriate .h-file:
- for gc::HP: \code #include <cds/intrusive/michael_list_hp.h> \endcode
- - for gc::PTB: \code #include <cds/intrusive/michael_list_ptb.h> \endcode
+ - for gc::DHP: \code #include <cds/intrusive/michael_list_dhp.h> \endcode
- for gc::HRC: \code #include <cds/intrusive/michael_list_hrc.h> \endcode
- for \ref cds_urcu_gc "RCU type" - see \ref cds_intrusive_MichaelList_rcu "RCU-based MichaelList"
- for gc::nogc: \code #include <cds/intrusive/michael_list_nogc.h> \endcode
Example for gc::PTB and base hook:
\code
// Include GC-related Michael's list specialization
- #include <cds/intrusive/michael_list_ptb.h>
+ #include <cds/intrusive/michael_list_dhp.h>
// Data stored in Michael's list
struct my_data: public cds::intrusive::michael_list::node< cds::gc::PTB >
Equivalent option-based code:
\code
// GC-related specialization
- #include <cds/intrusive/michael_list_ptb.h>
+ #include <cds/intrusive/michael_list_dhp.h>
struct my_data {
// see above
--- /dev/null
+//$$CDS-header$$
+
+#ifndef __CDS_INTRUSIVE_MICHAEL_LIST_DHP_H
+#define __CDS_INTRUSIVE_MICHAEL_LIST_DHP_H
+
+#include <cds/intrusive/impl/michael_list.h>
+#include <cds/gc/dhp.h>
+
+#endif // #ifndef __CDS_INTRUSIVE_MICHAEL_LIST_DHP_H
+++ /dev/null
-//$$CDS-header$$
-
-#ifndef __CDS_INTRUSIVE_MICHAEL_LIST_PTB_H
-#define __CDS_INTRUSIVE_MICHAEL_LIST_PTB_H
-
-#include <cds/intrusive/impl/michael_list.h>
-#include <cds/gc/ptb.h>
-
-#endif // #ifndef __CDS_INTRUSIVE_MICHAEL_LIST_PTB_H
Like other intrusive containers, you may build several containers on single item structure:
\code
#include <cds/intrusive/michael_list_hp.h>
- #include <cds/intrusive/michael_list_ptb.h>
+ #include <cds/intrusive/michael_list_dhp.h>
#include <cds/intrusive/michael_set.h>
struct tag_key1_idx;
<ClInclude Include="..\..\..\cds\container\lazy_kvlist_rcu.h" />\r
<ClInclude Include="..\..\..\cds\container\lazy_list_rcu.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_kvlist_rcu.h" />\r
+ <ClInclude Include="..\..\..\cds\container\michael_list_dhp.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_list_rcu.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_map_rcu.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_set_rcu.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\impl\michael_list.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\impl\skip_list.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\lazy_list_rcu.h" />\r
+ <ClInclude Include="..\..\..\cds\intrusive\michael_list_dhp.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_list_rcu.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_set_rcu.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\mspriority_queue.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_list_hp.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_list_hrc.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_list_nogc.h" />\r
- <ClInclude Include="..\..\..\cds\intrusive\michael_list_ptb.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_set.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_set_nogc.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\moir_queue.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_list_hp.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_list_hrc.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_list_nogc.h" />\r
- <ClInclude Include="..\..\..\cds\container\michael_list_ptb.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_map.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_map_nogc.h" />\r
<ClInclude Include="..\..\..\cds\container\michael_set.h" />\r
<ClInclude Include="..\..\..\cds\intrusive\michael_list_nogc.h">\r
<Filter>Header Files\cds\intrusive</Filter>\r
</ClInclude>\r
- <ClInclude Include="..\..\..\cds\intrusive\michael_list_ptb.h">\r
- <Filter>Header Files\cds\intrusive</Filter>\r
- </ClInclude>\r
<ClInclude Include="..\..\..\cds\intrusive\michael_set.h">\r
<Filter>Header Files\cds\intrusive</Filter>\r
</ClInclude>\r
<ClInclude Include="..\..\..\cds\container\michael_list_nogc.h">\r
<Filter>Header Files\cds\container</Filter>\r
</ClInclude>\r
- <ClInclude Include="..\..\..\cds\container\michael_list_ptb.h">\r
- <Filter>Header Files\cds\container</Filter>\r
- </ClInclude>\r
<ClInclude Include="..\..\..\cds\container\michael_map.h">\r
<Filter>Header Files\cds\container</Filter>\r
</ClInclude>\r
<ClInclude Include="..\..\..\cds\gc\dhp.h">\r
<Filter>Header Files\cds\gc</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\cds\container\michael_list_dhp.h">\r
+ <Filter>Header Files\cds\container</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="..\..\..\cds\intrusive\michael_list_dhp.h">\r
+ <Filter>Header Files\cds\intrusive</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
</Project>
\ No newline at end of file
//$$CDS-header$$
#include "map/hdr_map.h"
-#include <cds/container/michael_list_ptb.h>
+#include <cds/container/michael_list_dhp.h>
#include <cds/container/split_list_map.h>
namespace map {
//$$CDS-header$$
#include "ordered_list/hdr_intrusive_michael.h"
-#include <cds/intrusive/michael_list_ptb.h>
+#include <cds/intrusive/michael_list_dhp.h>
namespace ordlist {
void IntrusiveMichaelListHeaderTest::PTB_base_cmp()
//$$CDS-header$$
#include "ordered_list/hdr_michael.h"
-#include <cds/container/michael_list_ptb.h>
+#include <cds/container/michael_list_dhp.h>
namespace ordlist {
namespace {
//$$CDS-header$$
#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_ptb.h>
+#include <cds/intrusive/michael_list_dhp.h>
#include <cds/intrusive/michael_set.h>
namespace set {
//$$CDS-header$$
#include "set/hdr_intrusive_set.h"
-#include <cds/intrusive/michael_list_ptb.h>
+#include <cds/intrusive/michael_list_dhp.h>
#include <cds/intrusive/split_list.h>
namespace set {
//$$CDS-header$$
#include "set/hdr_set.h"
-#include <cds/container/michael_list_ptb.h>
+#include <cds/container/michael_list_dhp.h>
#include <cds/container/michael_set.h>
namespace set {
//$$CDS-header$$
#include "set/hdr_set.h"
-#include <cds/container/michael_list_ptb.h>
+#include <cds/container/michael_list_dhp.h>
#include <cds/container/split_list_set.h>
namespace set {
#include <cds/container/michael_list_hp.h>
#include <cds/container/michael_list_hrc.h>
-#include <cds/container/michael_list_ptb.h>
+#include <cds/container/michael_list_dhp.h>
#include <cds/container/michael_list_rcu.h>
#include <cds/container/lazy_list_hp.h>
#include <cds/container/lazy_list_hrc.h>