/*
This file is a part of libcds - Concurrent Data Structures library
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+ (C) 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:
/// Back-off strategy
typedef intrusive::iterable_list::traits::back_off back_off;
- /// Item counting feature; by default, disabled. Use \p cds::atomicity::item_counter to enable item counting
+ /// Item counting feature; by default, disabled. Use \p cds::atomicity::item_counter or \p atomicity::cache_friendly_item_counter to enable item counting
typedef intrusive::iterable_list::traits::item_counter item_counter;
/// Internal statistics
- \p opt::node_allocator - node allocator, default is \p std::allocator.
- \p opt::back_off - back-off strategy used. If the option is not specified, the \p cds::backoff::Default is used.
- \p opt::item_counter - the type of item counting feature. Default is disabled (\p atomicity::empty_item_counter).
- To enable item counting use \p atomicity::item_counter.
+ To enable item counting use \p atomicity::item_counter or \p atomicity::cache_friendly_item_counter.
- \p opt::stat - internal statistics. By default, it is disabled (\p iterable_list::empty_stat).
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 <typename... Options>
struct make_traits {
template <typename GC, typename Key, typename Value, typename Traits=iterable_list::traits>
class IterableKVList;
- // Tag for selecting iterable list implementation
- /**
- This struct is empty and it is used only as a tag for selecting \p IterableList
- as ordered list implementation in declaration of some classes.
-
- See split_list::traits::ordered_list as an example.
- */
- struct iterable_list_tag
- {};
-
- //@cond
- template <typename List>
- struct is_iterable_list {
- enum {
- value = false
- };
- };
-
- template <typename GC, typename T, typename Traits>
- struct is_iterable_list< IterableList<GC, T, Traits >>
- {
- enum {
- value = true
- };
- };
-
- template <typename GC, typename K, typename V, typename Traits>
- struct is_iterable_list< IterableKVList<GC, K, V, Traits >>
- {
- enum {
- value = true
- };
- };
- //@endcond
-
}} // namespace cds::container