projects
/
libcds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
movable exempt_ptr: MichaelList
[libcds.git]
/
cds
/
container
/
michael_kvlist_rcu.h
diff --git
a/cds/container/michael_kvlist_rcu.h
b/cds/container/michael_kvlist_rcu.h
index 0b0e495807345f0973a7a67c47fa1efc0e7de539..5be3c92c605aee6ea7fcf4a43980cd347779d14f 100644
(file)
--- a/
cds/container/michael_kvlist_rcu.h
+++ b/
cds/container/michael_kvlist_rcu.h
@@
-127,9
+127,9
@@
namespace cds { namespace container {
public:
/// pointer to extracted node
public:
/// pointer to extracted node
-
typedef
cds::urcu::exempt_ptr< gc, node_type, value_type, typename maker::intrusive_traits::disposer,
+
using exempt_ptr =
cds::urcu::exempt_ptr< gc, node_type, value_type, typename maker::intrusive_traits::disposer,
cds::urcu::details::conventional_exempt_pair_cast<node_type, value_type>
cds::urcu::details::conventional_exempt_pair_cast<node_type, value_type>
- >
exempt_ptr
;
+ >;
protected:
//@cond
protected:
//@cond
@@
-510,8
+510,8
@@
namespace cds { namespace container {
/**
@anchor cds_nonintrusive_MichaelKVList_rcu_extract
The function searches an item with key equal to \p key in the list,
/**
@anchor cds_nonintrusive_MichaelKVList_rcu_extract
The function searches an item with key equal to \p key in the list,
- unlinks it from the list, and returns
pointer to an item found in \p dest argument
.
- If \p key is not found the function returns
\p false
.
+ unlinks it from the list, and returns
\ref cds::urcu::exempt_ptr "exempt_ptr" pointer to the item found
.
+ If \p key is not found the function returns
an empty \p exempt_ptr
.
@note The function does NOT call RCU read-side lock or synchronization,
and does NOT dispose the item found. It just excludes the item from the list
@note The function does NOT call RCU read-side lock or synchronization,
and does NOT dispose the item found. It just excludes the item from the list
@@
-535,7
+535,8
@@
namespace cds { namespace container {
// Now, you can apply extract function
// Note that you must not delete the item found inside the RCU lock
// Now, you can apply extract function
// Note that you must not delete the item found inside the RCU lock
- if ( theList.extract( p, 10 )) {
+ p = theList.extract( 10 );
+ if ( p ) {
// do something with p
...
}
// do something with p
...
}
@@
-546,10
+547,9
@@
namespace cds { namespace container {
\endcode
*/
template <typename K>
\endcode
*/
template <typename K>
-
bool extract( exempt_ptr& dest,
K const& key )
+
exempt_ptr extract(
K const& key )
{
{
- dest = extract_at( head(), key, intrusive_key_comparator() );
- return !dest.empty();
+ return exempt_ptr( extract_at( head(), key, intrusive_key_comparator() ));
}
/// Extracts an item from the list using \p pred predicate for searching
}
/// Extracts an item from the list using \p pred predicate for searching
@@
-560,10
+560,9
@@
namespace cds { namespace container {
\p pred must imply the same element order as \ref key_comparator.
*/
template <typename K, typename Less>
\p pred must imply the same element order as \ref key_comparator.
*/
template <typename K, typename Less>
-
bool extract_with( exempt_ptr& dest,
K const& key, Less pred )
+
exempt_ptr extract_with(
K const& key, Less pred )
{
{
- dest = extract_at( head(), key, typename maker::template less_wrapper<Less>::type() );
- return !dest.empty();
+ return exempt_ptr( extract_at( head(), key, typename maker::template less_wrapper<Less>::type() ));
}
/// Finds the key \p key
}
/// Finds the key \p key