Files
rippled/classripple_1_1SharedIntrusive.html
2025-08-19 09:49:50 -07:00

1090 lines
62 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>rippled: ripple::SharedIntrusive&lt; T &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">rippled
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceripple.html">ripple</a></li><li class="navelem"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classripple_1_1SharedIntrusive-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">ripple::SharedIntrusive&lt; T &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">
<p>A shared intrusive pointer class that supports weak pointers.
<a href="classripple_1_1SharedIntrusive.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="IntrusivePointer_8h_source.html">IntrusivePointer.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ae074f4eb5bfaeb45d32b7a0c9ffdde89" id="r_ae074f4eb5bfaeb45d32b7a0c9ffdde89"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#ae074f4eb5bfaeb45d32b7a0c9ffdde89">SharedIntrusive</a> ()=default</td></tr>
<tr class="separator:ae074f4eb5bfaeb45d32b7a0c9ffdde89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4be9b98b2a038c7b13010ecf883c8fc7" id="r_a4be9b98b2a038c7b13010ecf883c8fc7"><td class="memTemplParams" colspan="2">template&lt;CAdoptTag TAdoptTag&gt; </td></tr>
<tr class="memitem:a4be9b98b2a038c7b13010ecf883c8fc7"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a4be9b98b2a038c7b13010ecf883c8fc7">SharedIntrusive</a> (T *p, TAdoptTag) noexcept</td></tr>
<tr class="separator:a4be9b98b2a038c7b13010ecf883c8fc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abdb2f5fa49d527a9efc6f4984017616d" id="r_abdb2f5fa49d527a9efc6f4984017616d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#abdb2f5fa49d527a9efc6f4984017616d">SharedIntrusive</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> const &amp;rhs)</td></tr>
<tr class="separator:abdb2f5fa49d527a9efc6f4984017616d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:addc58db8e339ebe4612f1e20c1fbeb40" id="r_addc58db8e339ebe4612f1e20c1fbeb40"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</td></tr>
<tr class="memitem:addc58db8e339ebe4612f1e20c1fbeb40"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#addc58db8e339ebe4612f1e20c1fbeb40">SharedIntrusive</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;rhs)</td></tr>
<tr class="separator:addc58db8e339ebe4612f1e20c1fbeb40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8088a1d2cedec905991445435bc5c4d8" id="r_a8088a1d2cedec905991445435bc5c4d8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a8088a1d2cedec905991445435bc5c4d8">SharedIntrusive</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp;&amp;rhs)</td></tr>
<tr class="separator:a8088a1d2cedec905991445435bc5c4d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a68a3955270e8ebc14ad84de850d5ad04" id="r_a68a3955270e8ebc14ad84de850d5ad04"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</td></tr>
<tr class="memitem:a68a3955270e8ebc14ad84de850d5ad04"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a68a3955270e8ebc14ad84de850d5ad04">SharedIntrusive</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;rhs)</td></tr>
<tr class="separator:a68a3955270e8ebc14ad84de850d5ad04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a302cb5f6cb90ebfc9acf0e3f8a05625e" id="r_a302cb5f6cb90ebfc9acf0e3f8a05625e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a302cb5f6cb90ebfc9acf0e3f8a05625e">operator=</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> const &amp;rhs)</td></tr>
<tr class="separator:a302cb5f6cb90ebfc9acf0e3f8a05625e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a095fcc474eaf7b4db540b764a070ab05" id="r_a095fcc474eaf7b4db540b764a070ab05"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a095fcc474eaf7b4db540b764a070ab05">operator!=</a> (<a class="elRef" href="http://en.cppreference.com/w/cpp/types/nullptr_t.html">std::nullptr_t</a>) const</td></tr>
<tr class="separator:a095fcc474eaf7b4db540b764a070ab05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1d3caf1b4028a4ae99d9a27d1f92afd" id="r_af1d3caf1b4028a4ae99d9a27d1f92afd"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#af1d3caf1b4028a4ae99d9a27d1f92afd">operator==</a> (<a class="elRef" href="http://en.cppreference.com/w/cpp/types/nullptr_t.html">std::nullptr_t</a>) const</td></tr>
<tr class="separator:af1d3caf1b4028a4ae99d9a27d1f92afd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a909566554f483e04f8df9ba1ce1c96c2" id="r_a909566554f483e04f8df9ba1ce1c96c2"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</td></tr>
<tr class="memitem:a909566554f483e04f8df9ba1ce1c96c2"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a909566554f483e04f8df9ba1ce1c96c2">operator=</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;rhs)</td></tr>
<tr class="separator:a909566554f483e04f8df9ba1ce1c96c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b5d88ff5fb51d9f0be79fb95bf30be5" id="r_a7b5d88ff5fb51d9f0be79fb95bf30be5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a7b5d88ff5fb51d9f0be79fb95bf30be5">operator=</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp;&amp;rhs)</td></tr>
<tr class="separator:a7b5d88ff5fb51d9f0be79fb95bf30be5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ecddcf46991a625664d08655be45b31" id="r_a6ecddcf46991a625664d08655be45b31"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</td></tr>
<tr class="memitem:a6ecddcf46991a625664d08655be45b31"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a6ecddcf46991a625664d08655be45b31">operator=</a> (<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;rhs)</td></tr>
<tr class="separator:a6ecddcf46991a625664d08655be45b31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46accaa4b3db47a4f47380b74bee1567" id="r_a46accaa4b3db47a4f47380b74bee1567"><td class="memTemplParams" colspan="2">template&lt;CAdoptTag TAdoptTag = SharedIntrusiveAdoptIncrementStrongTag&gt; </td></tr>
<tr class="memitem:a46accaa4b3db47a4f47380b74bee1567"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a46accaa4b3db47a4f47380b74bee1567">adopt</a> (T *p)</td></tr>
<tr class="memdesc:a46accaa4b3db47a4f47380b74bee1567"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adopt the raw pointer. <br /></td></tr>
<tr class="separator:a46accaa4b3db47a4f47380b74bee1567"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c2e89c9a0179a13f14f5ece7e35c841" id="r_a6c2e89c9a0179a13f14f5ece7e35c841"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a6c2e89c9a0179a13f14f5ece7e35c841">~SharedIntrusive</a> ()</td></tr>
<tr class="separator:a6c2e89c9a0179a13f14f5ece7e35c841"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8e8f47f067076de57adf1dfbac04a5f" id="r_ae8e8f47f067076de57adf1dfbac04a5f"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; </td></tr>
<tr class="memitem:ae8e8f47f067076de57adf1dfbac04a5f"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#ae8e8f47f067076de57adf1dfbac04a5f">SharedIntrusive</a> (<a class="el" href="structripple_1_1StaticCastTagSharedIntrusive.html">StaticCastTagSharedIntrusive</a>, <a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;rhs)</td></tr>
<tr class="memdesc:ae8e8f47f067076de57adf1dfbac04a5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by statically casting the pointer controlled by the rhs param. <br /></td></tr>
<tr class="separator:ae8e8f47f067076de57adf1dfbac04a5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2a8c58ed76691568bc65408cd079464" id="r_ab2a8c58ed76691568bc65408cd079464"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; </td></tr>
<tr class="memitem:ab2a8c58ed76691568bc65408cd079464"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#ab2a8c58ed76691568bc65408cd079464">SharedIntrusive</a> (<a class="el" href="structripple_1_1StaticCastTagSharedIntrusive.html">StaticCastTagSharedIntrusive</a>, <a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;rhs)</td></tr>
<tr class="memdesc:ab2a8c58ed76691568bc65408cd079464"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by statically casting the pointer controlled by the rhs param. <br /></td></tr>
<tr class="separator:ab2a8c58ed76691568bc65408cd079464"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8c63944f47e59c8372819d76651df71" id="r_ae8c63944f47e59c8372819d76651df71"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; </td></tr>
<tr class="memitem:ae8c63944f47e59c8372819d76651df71"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#ae8c63944f47e59c8372819d76651df71">SharedIntrusive</a> (<a class="el" href="structripple_1_1DynamicCastTagSharedIntrusive.html">DynamicCastTagSharedIntrusive</a>, <a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;rhs)</td></tr>
<tr class="memdesc:ae8c63944f47e59c8372819d76651df71"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by dynamically casting the pointer controlled by the rhs param. <br /></td></tr>
<tr class="separator:ae8c63944f47e59c8372819d76651df71"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c9d2745d1b5db8f9cee930a8e4fc086" id="r_a8c9d2745d1b5db8f9cee930a8e4fc086"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; </td></tr>
<tr class="memitem:a8c9d2745d1b5db8f9cee930a8e4fc086"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a8c9d2745d1b5db8f9cee930a8e4fc086">SharedIntrusive</a> (<a class="el" href="structripple_1_1DynamicCastTagSharedIntrusive.html">DynamicCastTagSharedIntrusive</a>, <a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;rhs)</td></tr>
<tr class="memdesc:a8c9d2745d1b5db8f9cee930a8e4fc086"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by dynamically casting the pointer controlled by the rhs param. <br /></td></tr>
<tr class="separator:a8c9d2745d1b5db8f9cee930a8e4fc086"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2de7208c84361428d860b3d533999bcf" id="r_a2de7208c84361428d860b3d533999bcf"><td class="memItemLeft" align="right" valign="top">T &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a2de7208c84361428d860b3d533999bcf">operator*</a> () const noexcept</td></tr>
<tr class="separator:a2de7208c84361428d860b3d533999bcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6d60e4bb4f5ac089fefcbbad4e2cdaa" id="r_af6d60e4bb4f5ac089fefcbbad4e2cdaa"><td class="memItemLeft" align="right" valign="top">T *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#af6d60e4bb4f5ac089fefcbbad4e2cdaa">operator-&gt;</a> () const noexcept</td></tr>
<tr class="separator:af6d60e4bb4f5ac089fefcbbad4e2cdaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75725506f99e50560fb7a0170e070d27" id="r_a75725506f99e50560fb7a0170e070d27"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a75725506f99e50560fb7a0170e070d27">operator bool</a> () const noexcept</td></tr>
<tr class="separator:a75725506f99e50560fb7a0170e070d27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac781ff91d10aea1d67760b1990958579" id="r_ac781ff91d10aea1d67760b1990958579"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#ac781ff91d10aea1d67760b1990958579">reset</a> ()</td></tr>
<tr class="memdesc:ac781ff91d10aea1d67760b1990958579"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the pointer to null, decrement the strong count, and run the appropriate release action. <br /></td></tr>
<tr class="separator:ac781ff91d10aea1d67760b1990958579"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f66cb8b0ace416c23e23fb28f5d162b" id="r_a9f66cb8b0ace416c23e23fb28f5d162b"><td class="memItemLeft" align="right" valign="top">T *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a9f66cb8b0ace416c23e23fb28f5d162b">get</a> () const</td></tr>
<tr class="memdesc:a9f66cb8b0ace416c23e23fb28f5d162b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the raw pointer. <br /></td></tr>
<tr class="separator:a9f66cb8b0ace416c23e23fb28f5d162b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a69ba48dff7ecfd558ca0d66c96cdd7b7" id="r_a69ba48dff7ecfd558ca0d66c96cdd7b7"><td class="memItemLeft" align="right" valign="top"><a class="elRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a69ba48dff7ecfd558ca0d66c96cdd7b7">use_count</a> () const</td></tr>
<tr class="memdesc:a69ba48dff7ecfd558ca0d66c96cdd7b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the strong count. <br /></td></tr>
<tr class="separator:a69ba48dff7ecfd558ca0d66c96cdd7b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:a771142f551126a40dc0aaf8f40c9df13" id="r_a771142f551126a40dc0aaf8f40c9df13"><td class="memItemLeft" align="right" valign="top">T *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a771142f551126a40dc0aaf8f40c9df13">unsafeGetRawPtr</a> () const</td></tr>
<tr class="memdesc:a771142f551126a40dc0aaf8f40c9df13"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the raw pointer held by this object. <br /></td></tr>
<tr class="separator:a771142f551126a40dc0aaf8f40c9df13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee29997db78786ef1e56b6a77eaa131a" id="r_aee29997db78786ef1e56b6a77eaa131a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#aee29997db78786ef1e56b6a77eaa131a">unsafeReleaseAndStore</a> (T *next)</td></tr>
<tr class="memdesc:aee29997db78786ef1e56b6a77eaa131a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exchange the current raw pointer held by this object with the given pointer. <br /></td></tr>
<tr class="separator:aee29997db78786ef1e56b6a77eaa131a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf3084f32346377e987362456b70fcd2" id="r_adf3084f32346377e987362456b70fcd2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#adf3084f32346377e987362456b70fcd2">unsafeSetRawPtr</a> (T *p)</td></tr>
<tr class="memdesc:adf3084f32346377e987362456b70fcd2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the raw pointer directly. <br /></td></tr>
<tr class="separator:adf3084f32346377e987362456b70fcd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0ee6dd46a53e7beefc9427da52188ac" id="r_af0ee6dd46a53e7beefc9427da52188ac"><td class="memItemLeft" align="right" valign="top">T *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#af0ee6dd46a53e7beefc9427da52188ac">unsafeExchange</a> (T *p)</td></tr>
<tr class="memdesc:af0ee6dd46a53e7beefc9427da52188ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Exchange the raw pointer directly. <br /></td></tr>
<tr class="separator:af0ee6dd46a53e7beefc9427da52188ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a19617b90d54b48853f1381e8fce57c8d" id="r_a19617b90d54b48853f1381e8fce57c8d"><td class="memItemLeft" align="right" valign="top">T *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a19617b90d54b48853f1381e8fce57c8d">ptr_</a> {nullptr}</td></tr>
<tr class="memdesc:a19617b90d54b48853f1381e8fce57c8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">pointer to the type with an intrusive count <br /></td></tr>
<tr class="separator:a19617b90d54b48853f1381e8fce57c8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:aa3fc9dd814eaf74959441f77b2b29bbc" id="r_aa3fc9dd814eaf74959441f77b2b29bbc"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; </td></tr>
<tr class="memitem:aa3fc9dd814eaf74959441f77b2b29bbc"><td class="memTemplItemLeft" align="right" valign="top">class&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#aa3fc9dd814eaf74959441f77b2b29bbc">SharedIntrusive</a></td></tr>
<tr class="separator:aa3fc9dd814eaf74959441f77b2b29bbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a743aea23ad9ebdfc32203d50113f311c" id="r_a743aea23ad9ebdfc32203d50113f311c"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; </td></tr>
<tr class="memitem:a743aea23ad9ebdfc32203d50113f311c"><td class="memTemplItemLeft" align="right" valign="top">class&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a743aea23ad9ebdfc32203d50113f311c">SharedWeakUnion</a></td></tr>
<tr class="separator:a743aea23ad9ebdfc32203d50113f311c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0abe344319ce5731519e5e11df38655" id="r_ab0abe344319ce5731519e5e11df38655"><td class="memTemplParams" colspan="2">template&lt;class TT &gt; </td></tr>
<tr class="memitem:ab0abe344319ce5731519e5e11df38655"><td class="memTemplItemLeft" align="right" valign="top">class&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#ab0abe344319ce5731519e5e11df38655">WeakIntrusive</a></td></tr>
<tr class="separator:ab0abe344319ce5731519e5e11df38655"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79e0545330420dac1f03699aec226488" id="r_a79e0545330420dac1f03699aec226488"><td class="memTemplParams" colspan="2">template&lt;class TT , class... Args&gt; </td></tr>
<tr class="memitem:a79e0545330420dac1f03699aec226488"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classripple_1_1SharedIntrusive.html#a79e0545330420dac1f03699aec226488">make_SharedIntrusive</a> (Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a79e0545330420dac1f03699aec226488"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a shared intrusive pointer. <br /></td></tr>
<tr class="separator:a79e0545330420dac1f03699aec226488"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;class T&gt;<br />
class ripple::SharedIntrusive&lt; T &gt;</div><p>A shared intrusive pointer class that supports weak pointers. </p>
<p>This is meant to be used for SHAMapInnerNodes, but may be useful for other cases. Since the reference counts are stored on the pointee, the pointee is not destroyed until both the strong <em>and</em> weak pointer counts go to zero. When the strong pointer count goes to zero, the "partialDestructor" is called. This can be used to destroy as much of the object as possible while still retaining the reference counts. For example, for SHAMapInnerNodes the children may be reset in that function. Note that <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::shared_poiner</a> WILL run the destructor when the strong count reaches zero, but may not free the memory used by the object until the weak count reaches zero. In rippled, we typically allocate shared pointers with the <code>make_shared</code> function. When that is used, the memory is not reclaimed until the weak count reaches zero. </p>
<p class="definition">Definition at line <a class="el" href="IntrusivePointer_8h_source.html#l00087">87</a> of file <a class="el" href="IntrusivePointer_8h_source.html">IntrusivePointer.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ae074f4eb5bfaeb45d32b7a0c9ffdde89" name="ae074f4eb5bfaeb45d32b7a0c9ffdde89"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae074f4eb5bfaeb45d32b7a0c9ffdde89">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[1/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a4be9b98b2a038c7b13010ecf883c8fc7" name="a4be9b98b2a038c7b13010ecf883c8fc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4be9b98b2a038c7b13010ecf883c8fc7">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[2/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;CAdoptTag TAdoptTag&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype">T *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">TAdoptTag&#160;</td>
<td class="paramname">&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="abdb2f5fa49d527a9efc6f4984017616d" name="abdb2f5fa49d527a9efc6f4984017616d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abdb2f5fa49d527a9efc6f4984017616d">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[3/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; T &gt; const &amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="addc58db8e339ebe4612f1e20c1fbeb40" name="addc58db8e339ebe4612f1e20c1fbeb40"></a>
<h2 class="memtitle"><span class="permalink"><a href="#addc58db8e339ebe4612f1e20c1fbeb40">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[4/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a8088a1d2cedec905991445435bc5c4d8" name="a8088a1d2cedec905991445435bc5c4d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8088a1d2cedec905991445435bc5c4d8">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[5/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; T &gt; &amp;&amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a68a3955270e8ebc14ad84de850d5ad04" name="a68a3955270e8ebc14ad84de850d5ad04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a68a3955270e8ebc14ad84de850d5ad04">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[6/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a6c2e89c9a0179a13f14f5ece7e35c841" name="a6c2e89c9a0179a13f14f5ece7e35c841"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c2e89c9a0179a13f14f5ece7e35c841">&#9670;&#160;</a></span>~SharedIntrusive()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::~<a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ae8e8f47f067076de57adf1dfbac04a5f" name="ae8e8f47f067076de57adf1dfbac04a5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8e8f47f067076de57adf1dfbac04a5f">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[7/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structripple_1_1StaticCastTagSharedIntrusive.html">StaticCastTagSharedIntrusive</a>&lt; T &gt;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;&#160;</td>
<td class="paramname"><em>rhs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by statically casting the pointer controlled by the rhs param. </p>
</div>
</div>
<a id="ab2a8c58ed76691568bc65408cd079464" name="ab2a8c58ed76691568bc65408cd079464"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2a8c58ed76691568bc65408cd079464">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[8/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structripple_1_1StaticCastTagSharedIntrusive.html">StaticCastTagSharedIntrusive</a>&lt; T &gt;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;&#160;</td>
<td class="paramname"><em>rhs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by statically casting the pointer controlled by the rhs param. </p>
</div>
</div>
<a id="ae8c63944f47e59c8372819d76651df71" name="ae8c63944f47e59c8372819d76651df71"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8c63944f47e59c8372819d76651df71">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[9/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structripple_1_1DynamicCastTagSharedIntrusive.html">DynamicCastTagSharedIntrusive</a>&lt; T &gt;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;&#160;</td>
<td class="paramname"><em>rhs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by dynamically casting the pointer controlled by the rhs param. </p>
</div>
</div>
<a id="a8c9d2745d1b5db8f9cee930a8e4fc086" name="a8c9d2745d1b5db8f9cee930a8e4fc086"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c9d2745d1b5db8f9cee930a8e4fc086">&#9670;&#160;</a></span>SharedIntrusive() <span class="overload">[10/10]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::SharedIntrusive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structripple_1_1DynamicCastTagSharedIntrusive.html">DynamicCastTagSharedIntrusive</a>&lt; T &gt;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;&#160;</td>
<td class="paramname"><em>rhs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new <a class="el" href="classripple_1_1SharedIntrusive.html" title="A shared intrusive pointer class that supports weak pointers.">SharedIntrusive</a> by dynamically casting the pointer controlled by the rhs param. </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a302cb5f6cb90ebfc9acf0e3f8a05625e" name="a302cb5f6cb90ebfc9acf0e3f8a05625e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a302cb5f6cb90ebfc9acf0e3f8a05625e">&#9670;&#160;</a></span>operator=() <span class="overload">[1/4]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp; <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator= </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; T &gt; const &amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a095fcc474eaf7b4db540b764a070ab05" name="a095fcc474eaf7b4db540b764a070ab05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a095fcc474eaf7b4db540b764a070ab05">&#9670;&#160;</a></span>operator!=()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator!= </td>
<td>(</td>
<td class="paramtype"><a class="elRef" href="http://en.cppreference.com/w/cpp/types/nullptr_t.html">std::nullptr_t</a>&#160;</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af1d3caf1b4028a4ae99d9a27d1f92afd" name="af1d3caf1b4028a4ae99d9a27d1f92afd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af1d3caf1b4028a4ae99d9a27d1f92afd">&#9670;&#160;</a></span>operator==()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator== </td>
<td>(</td>
<td class="paramtype"><a class="elRef" href="http://en.cppreference.com/w/cpp/types/nullptr_t.html">std::nullptr_t</a>&#160;</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a909566554f483e04f8df9ba1ce1c96c2" name="a909566554f483e04f8df9ba1ce1c96c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a909566554f483e04f8df9ba1ce1c96c2">&#9670;&#160;</a></span>operator=() <span class="overload">[2/4]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp; <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator= </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; const &amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7b5d88ff5fb51d9f0be79fb95bf30be5" name="a7b5d88ff5fb51d9f0be79fb95bf30be5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7b5d88ff5fb51d9f0be79fb95bf30be5">&#9670;&#160;</a></span>operator=() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp; <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator= </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; T &gt; &amp;&amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a6ecddcf46991a625664d08655be45b31" name="a6ecddcf46991a625664d08655be45b31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ecddcf46991a625664d08655be45b31">&#9670;&#160;</a></span>operator=() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; <br />
requires <a class="elRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::convertible_to</a>&lt;TT*, T*&gt;</div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a> &amp; <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator= </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; &amp;&amp;&#160;</td>
<td class="paramname"><em>rhs</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a46accaa4b3db47a4f47380b74bee1567" name="a46accaa4b3db47a4f47380b74bee1567"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46accaa4b3db47a4f47380b74bee1567">&#9670;&#160;</a></span>adopt()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;CAdoptTag TAdoptTag = SharedIntrusiveAdoptIncrementStrongTag&gt; </div>
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::adopt </td>
<td>(</td>
<td class="paramtype">T *&#160;</td>
<td class="paramname"><em>p</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Adopt the raw pointer. </p>
<p>The strong reference may or may not be incremented, depending on the TAdoptTag </p>
</div>
</div>
<a id="a2de7208c84361428d860b3d533999bcf" name="a2de7208c84361428d860b3d533999bcf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2de7208c84361428d860b3d533999bcf">&#9670;&#160;</a></span>operator*()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">T &amp; <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator* </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="af6d60e4bb4f5ac089fefcbbad4e2cdaa" name="af6d60e4bb4f5ac089fefcbbad4e2cdaa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6d60e4bb4f5ac089fefcbbad4e2cdaa">&#9670;&#160;</a></span>operator-&gt;()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">T * <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator-&gt; </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a75725506f99e50560fb7a0170e070d27" name="a75725506f99e50560fb7a0170e070d27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75725506f99e50560fb7a0170e070d27">&#9670;&#160;</a></span>operator bool()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::operator bool </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ac781ff91d10aea1d67760b1990958579" name="ac781ff91d10aea1d67760b1990958579"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac781ff91d10aea1d67760b1990958579">&#9670;&#160;</a></span>reset()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::reset </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the pointer to null, decrement the strong count, and run the appropriate release action. </p>
</div>
</div>
<a id="a9f66cb8b0ace416c23e23fb28f5d162b" name="a9f66cb8b0ace416c23e23fb28f5d162b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f66cb8b0ace416c23e23fb28f5d162b">&#9670;&#160;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname">T * <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::get </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the raw pointer. </p>
</div>
</div>
<a id="a69ba48dff7ecfd558ca0d66c96cdd7b7" name="a69ba48dff7ecfd558ca0d66c96cdd7b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a69ba48dff7ecfd558ca0d66c96cdd7b7">&#9670;&#160;</a></span>use_count()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="elRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::use_count </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Return the strong count. </p>
</div>
</div>
<a id="a771142f551126a40dc0aaf8f40c9df13" name="a771142f551126a40dc0aaf8f40c9df13"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a771142f551126a40dc0aaf8f40c9df13">&#9670;&#160;</a></span>unsafeGetRawPtr()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">T * <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::unsafeGetRawPtr </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Return the raw pointer held by this object. </p>
</div>
</div>
<a id="aee29997db78786ef1e56b6a77eaa131a" name="aee29997db78786ef1e56b6a77eaa131a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee29997db78786ef1e56b6a77eaa131a">&#9670;&#160;</a></span>unsafeReleaseAndStore()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::unsafeReleaseAndStore </td>
<td>(</td>
<td class="paramtype">T *&#160;</td>
<td class="paramname"><em>next</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Exchange the current raw pointer held by this object with the given pointer. </p>
<p>Decrement the strong count of the raw pointer previously held by this object and run the appropriate release action. </p>
</div>
</div>
<a id="adf3084f32346377e987362456b70fcd2" name="adf3084f32346377e987362456b70fcd2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf3084f32346377e987362456b70fcd2">&#9670;&#160;</a></span>unsafeSetRawPtr()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::unsafeSetRawPtr </td>
<td>(</td>
<td class="paramtype">T *&#160;</td>
<td class="paramname"><em>p</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the raw pointer directly. </p>
<p>This is wrapped in a function so the class can support both atomic and non-atomic pointers in a future patch. </p>
</div>
</div>
<a id="af0ee6dd46a53e7beefc9427da52188ac" name="af0ee6dd46a53e7beefc9427da52188ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0ee6dd46a53e7beefc9427da52188ac">&#9670;&#160;</a></span>unsafeExchange()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">T * <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::unsafeExchange </td>
<td>(</td>
<td class="paramtype">T *&#160;</td>
<td class="paramname"><em>p</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Exchange the raw pointer directly. </p>
<p>This sets the raw pointer to the given value and returns the previous value. This is wrapped in a function so the class can support both atomic and non-atomic pointers in a future patch. </p>
</div>
</div>
<h2 class="groupheader">Friends And Related Symbol Documentation</h2>
<a id="aa3fc9dd814eaf74959441f77b2b29bbc" name="aa3fc9dd814eaf74959441f77b2b29bbc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3fc9dd814eaf74959441f77b2b29bbc">&#9670;&#160;</a></span>SharedIntrusive</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">friend class <a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusivePointer_8h_source.html#l00196">196</a> of file <a class="el" href="IntrusivePointer_8h_source.html">IntrusivePointer.h</a>.</p>
</div>
</div>
<a id="a743aea23ad9ebdfc32203d50113f311c" name="a743aea23ad9ebdfc32203d50113f311c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a743aea23ad9ebdfc32203d50113f311c">&#9670;&#160;</a></span>SharedWeakUnion</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">friend class <a class="el" href="classripple_1_1SharedWeakUnion.html">SharedWeakUnion</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusivePointer_8h_source.html#l00199">199</a> of file <a class="el" href="IntrusivePointer_8h_source.html">IntrusivePointer.h</a>.</p>
</div>
</div>
<a id="ab0abe344319ce5731519e5e11df38655" name="ab0abe344319ce5731519e5e11df38655"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0abe344319ce5731519e5e11df38655">&#9670;&#160;</a></span>WeakIntrusive</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">friend class <a class="el" href="classripple_1_1WeakIntrusive.html">WeakIntrusive</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusivePointer_8h_source.html#l00202">202</a> of file <a class="el" href="IntrusivePointer_8h_source.html">IntrusivePointer.h</a>.</p>
</div>
</div>
<a id="a79e0545330420dac1f03699aec226488" name="a79e0545330420dac1f03699aec226488"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79e0545330420dac1f03699aec226488">&#9670;&#160;</a></span>make_SharedIntrusive</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<div class="memtemplate">
template&lt;class TT , class... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classripple_1_1SharedIntrusive.html">SharedIntrusive</a>&lt; TT &gt; make_SharedIntrusive </td>
<td>(</td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a shared intrusive pointer. </p>
<p>Note: unlike <a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>, where there is an advantage of allocating the pointer and control block together, there is no benefit for intrusive pointers. </p>
<p class="definition">Definition at line <a class="el" href="IntrusivePointer_8h_source.html#l00467">467</a> of file <a class="el" href="IntrusivePointer_8h_source.html">IntrusivePointer.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a19617b90d54b48853f1381e8fce57c8d" name="a19617b90d54b48853f1381e8fce57c8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a19617b90d54b48853f1381e8fce57c8d">&#9670;&#160;</a></span>ptr_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">T* <a class="el" href="classripple_1_1SharedIntrusive.html">ripple::SharedIntrusive</a>&lt; T &gt;::ptr_ {nullptr}</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>pointer to the type with an intrusive count </p>
<p class="definition">Definition at line <a class="el" href="IntrusivePointer_8h_source.html#l00231">231</a> of file <a class="el" href="IntrusivePointer_8h_source.html">IntrusivePointer.h</a>.</p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>