Files
rippled/structripple_1_1IntrusiveRefCounts.html
2025-11-04 00:36:48 -08:00

878 lines
58 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::IntrusiveRefCounts Struct 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="structripple_1_1IntrusiveRefCounts.html">IntrusiveRefCounts</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-types">Private Types</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#pri-static-attribs">Static Private Attributes</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="structripple_1_1IntrusiveRefCounts-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">ripple::IntrusiveRefCounts Struct Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Implement the strong count, weak count, and bit flags for an intrusive pointer.
<a href="structripple_1_1IntrusiveRefCounts.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ripple::IntrusiveRefCounts:</div>
<div class="dyncontent">
<div class="center"><img src="structripple_1_1IntrusiveRefCounts__inherit__graph.png" border="0" usemap="#aripple_1_1IntrusiveRefCounts_inherit__map" alt="Inheritance graph"/></div>
<map name="aripple_1_1IntrusiveRefCounts_inherit__map" id="aripple_1_1IntrusiveRefCounts_inherit__map">
<area shape="rect" title="Implement the strong count, weak count, and bit flags for an intrusive pointer." alt="" coords="5,46,196,71"/>
<area shape="rect" href="classripple_1_1SHAMapTreeNode.html" title=" " alt="" coords="244,46,427,71"/>
<area shape="poly" title=" " alt="" coords="209,56,244,56,244,61,209,61"/>
<area shape="rect" href="classripple_1_1SHAMapInnerNode.html" title=" " alt="" coords="475,21,664,46"/>
<area shape="poly" title=" " alt="" coords="440,45,474,41,475,46,440,50"/>
<area shape="rect" href="classripple_1_1SHAMapLeafNode.html" title=" " alt="" coords="477,70,661,95"/>
<area shape="poly" title=" " alt="" coords="440,67,477,71,477,76,440,72"/>
<area shape="rect" href="classripple_1_1SHAMapAccountStateLeafNode.html" title="A leaf node for a state object." alt="" coords="712,5,920,45"/>
<area shape="poly" title=" " alt="" coords="637,64,729,43,730,48,638,69"/>
<area shape="rect" href="classripple_1_1SHAMapTxLeafNode.html" title="A leaf node for a transaction." alt="" coords="716,70,916,95"/>
<area shape="poly" title=" " alt="" coords="675,80,716,80,716,85,675,85"/>
<area shape="rect" href="classripple_1_1SHAMapTxPlusMetaLeafNode.html" title="A leaf node for a transaction and its associated metadata." alt="" coords="717,120,915,160"/>
<area shape="poly" title=" " alt="" coords="638,96,730,117,729,123,637,101"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for ripple::IntrusiveRefCounts:</div>
<div class="dyncontent">
<div class="center"><img src="structripple_1_1IntrusiveRefCounts__coll__graph.png" border="0" usemap="#aripple_1_1IntrusiveRefCounts_coll__map" alt="Collaboration graph"/></div>
<map name="aripple_1_1IntrusiveRefCounts_coll__map" id="aripple_1_1IntrusiveRefCounts_coll__map">
<area shape="rect" title="Implement the strong count, weak count, and bit flags for an intrusive pointer." alt="" coords="5,317,196,343"/>
<area shape="rect" target="_parent" href="http://en.cppreference.com/w/cpp/types/integer.html" title=" " alt="" coords="49,5,152,31"/>
<area shape="poly" title=" " alt="" coords="100,44,95,94,92,174,95,254,102,317,96,317,90,255,87,174,90,93,95,44"/>
<area shape="rect" target="_parent" href="http://en.cppreference.com/w/cpp/atomic/atomic.html" title=" " alt="" coords="252,161,459,187"/>
<area shape="poly" title=" " alt="" coords="135,35,234,91,340,159,337,164,231,96,132,39"/>
<area shape="poly" title=" " alt="" coords="329,197,234,257,123,320,121,315,231,252,326,192"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts_1_1RefCountPair.html">RefCountPair</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unpack the count and tag fields from the packed atomic integer form. <a href="structripple_1_1IntrusiveRefCounts_1_1RefCountPair.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:a8e64ef7680c91638a0a6d2f0d5444cfb" id="r_a8e64ef7680c91638a0a6d2f0d5444cfb"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a8e64ef7680c91638a0a6d2f0d5444cfb">~IntrusiveRefCounts</a> () noexcept</td></tr>
<tr class="separator:a8e64ef7680c91638a0a6d2f0d5444cfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44d240cf1051d782c88bd1bcdb072cac" id="r_a44d240cf1051d782c88bd1bcdb072cac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a44d240cf1051d782c88bd1bcdb072cac">addStrongRef</a> () const noexcept</td></tr>
<tr class="separator:a44d240cf1051d782c88bd1bcdb072cac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa502b1f1e152bd4f4c710c6943967bad" id="r_aa502b1f1e152bd4f4c710c6943967bad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#aa502b1f1e152bd4f4c710c6943967bad">addWeakRef</a> () const noexcept</td></tr>
<tr class="separator:aa502b1f1e152bd4f4c710c6943967bad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7f5db65e79d614558bc9a03c45c7b8c" id="r_af7f5db65e79d614558bc9a03c45c7b8c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceripple.html#ac34a69f56216ea1e430c09ba049bf0ae">ReleaseStrongRefAction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#af7f5db65e79d614558bc9a03c45c7b8c">releaseStrongRef</a> () const</td></tr>
<tr class="separator:af7f5db65e79d614558bc9a03c45c7b8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13d869dff65da3996d022a971b2fe3aa" id="r_a13d869dff65da3996d022a971b2fe3aa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceripple.html#ac34a69f56216ea1e430c09ba049bf0ae">ReleaseStrongRefAction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a13d869dff65da3996d022a971b2fe3aa">addWeakReleaseStrongRef</a> () const</td></tr>
<tr class="separator:a13d869dff65da3996d022a971b2fe3aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a000f6dd42dc9af453b395b964df539be" id="r_a000f6dd42dc9af453b395b964df539be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceripple.html#a3b64e12be521bde0f95af971c64faf71">ReleaseWeakRefAction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a000f6dd42dc9af453b395b964df539be">releaseWeakRef</a> () const</td></tr>
<tr class="separator:a000f6dd42dc9af453b395b964df539be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a690ab4bafcfa7dee5eb2c47232db2950" id="r_a690ab4bafcfa7dee5eb2c47232db2950"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a690ab4bafcfa7dee5eb2c47232db2950">checkoutStrongRefFromWeak</a> () const noexcept</td></tr>
<tr class="separator:a690ab4bafcfa7dee5eb2c47232db2950"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a286601ec69a019633505ebbcbf2e176e" id="r_a286601ec69a019633505ebbcbf2e176e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a286601ec69a019633505ebbcbf2e176e">expired</a> () const noexcept</td></tr>
<tr class="separator:a286601ec69a019633505ebbcbf2e176e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a219f751b40b2bf0fcea4233970849680" id="r_a219f751b40b2bf0fcea4233970849680"><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="structripple_1_1IntrusiveRefCounts.html#a219f751b40b2bf0fcea4233970849680">use_count</a> () const noexcept</td></tr>
<tr class="separator:a219f751b40b2bf0fcea4233970849680"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-types" name="pri-types"></a>
Private Types</h2></td></tr>
<tr class="memitem:ab7a556a3c550ec65bd4a13ad1e1c5d38" id="r_ab7a556a3c550ec65bd4a13ad1e1c5d38"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#ab7a556a3c550ec65bd4a13ad1e1c5d38">CountType</a> = <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a></td></tr>
<tr class="separator:ab7a556a3c550ec65bd4a13ad1e1c5d38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aced67e7449ec3de51624c32fa2600fb4" id="r_aced67e7449ec3de51624c32fa2600fb4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> = <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a></td></tr>
<tr class="separator:aced67e7449ec3de51624c32fa2600fb4"><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:aca9660ae7c2e3bfcefc49a3bc319b7c1" id="r_aca9660ae7c2e3bfcefc49a3bc319b7c1"><td class="memItemLeft" align="right" valign="top"><a class="elRef" href="http://en.cppreference.com/w/cpp/atomic/atomic.html">std::atomic</a>&lt; <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#aca9660ae7c2e3bfcefc49a3bc319b7c1">refCounts</a> {<a class="el" href="structripple_1_1IntrusiveRefCounts.html#a6de3bfde61b102118d4d85dbb2a9a7a3">strongDelta</a>}</td></tr>
<tr class="memdesc:aca9660ae7c2e3bfcefc49a3bc319b7c1"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>refCounts</code> consists of four fields that are treated atomically: <br /></td></tr>
<tr class="separator:aca9660ae7c2e3bfcefc49a3bc319b7c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-static-attribs" name="pri-static-attribs"></a>
Static Private Attributes</h2></td></tr>
<tr class="memitem:a0265ace836a9db14f452882719075ad3" id="r_a0265ace836a9db14f452882719075ad3"><td class="memItemLeft" align="right" valign="top">static constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">StrongCountNumBits</a> = sizeof(<a class="el" href="structripple_1_1IntrusiveRefCounts.html#ab7a556a3c550ec65bd4a13ad1e1c5d38">CountType</a>) * 8</td></tr>
<tr class="separator:a0265ace836a9db14f452882719075ad3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa310ba583a58aff1ce8c3a5072509fe3" id="r_aa310ba583a58aff1ce8c3a5072509fe3"><td class="memItemLeft" align="right" valign="top">static constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#aa310ba583a58aff1ce8c3a5072509fe3">WeakCountNumBits</a> = <a class="el" href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">StrongCountNumBits</a> - 2</td></tr>
<tr class="separator:aa310ba583a58aff1ce8c3a5072509fe3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a219c707766656d5a3df4746157fd39e2" id="r_a219c707766656d5a3df4746157fd39e2"><td class="memItemLeft" align="right" valign="top">static constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a219c707766656d5a3df4746157fd39e2">FieldTypeBits</a> = sizeof(<a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>) * 8</td></tr>
<tr class="separator:a219c707766656d5a3df4746157fd39e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6cad1aff7f346dcebd12c0d60ea3284" id="r_ab6cad1aff7f346dcebd12c0d60ea3284"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">one</a> = 1</td></tr>
<tr class="separator:ab6cad1aff7f346dcebd12c0d60ea3284"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6de3bfde61b102118d4d85dbb2a9a7a3" id="r_a6de3bfde61b102118d4d85dbb2a9a7a3"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a6de3bfde61b102118d4d85dbb2a9a7a3">strongDelta</a> = 1</td></tr>
<tr class="memdesc:a6de3bfde61b102118d4d85dbb2a9a7a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Amount to change the strong count when adding or releasing a reference. <br /></td></tr>
<tr class="separator:a6de3bfde61b102118d4d85dbb2a9a7a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f1df1e02f8c059a10598595669c5f4d" id="r_a9f1df1e02f8c059a10598595669c5f4d"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a9f1df1e02f8c059a10598595669c5f4d">weakDelta</a> = (<a class="el" href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">one</a> &lt;&lt; <a class="el" href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">StrongCountNumBits</a>)</td></tr>
<tr class="memdesc:a9f1df1e02f8c059a10598595669c5f4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Amount to change the weak count when adding or releasing a reference. <br /></td></tr>
<tr class="separator:a9f1df1e02f8c059a10598595669c5f4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52d23e303089ab5665473e7d963e4a27" id="r_a52d23e303089ab5665473e7d963e4a27"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a52d23e303089ab5665473e7d963e4a27">partialDestroyStartedMask</a></td></tr>
<tr class="memdesc:a52d23e303089ab5665473e7d963e4a27"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flag that is set when the partialDestroy function has started running (or is about to start running). <br /></td></tr>
<tr class="separator:a52d23e303089ab5665473e7d963e4a27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08a017aeb3e7f6b9c0a09cb63ab16340" id="r_a08a017aeb3e7f6b9c0a09cb63ab16340"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a08a017aeb3e7f6b9c0a09cb63ab16340">partialDestroyFinishedMask</a></td></tr>
<tr class="memdesc:a08a017aeb3e7f6b9c0a09cb63ab16340"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flag that is set when the partialDestroy function has finished running. <br /></td></tr>
<tr class="separator:a08a017aeb3e7f6b9c0a09cb63ab16340"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14f38487f6a28d53c2dd18f359f100b7" id="r_a14f38487f6a28d53c2dd18f359f100b7"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a14f38487f6a28d53c2dd18f359f100b7">tagMask</a></td></tr>
<tr class="memdesc:a14f38487f6a28d53c2dd18f359f100b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mask that will zero out all the <code>count</code> bits and leave the tag bits unchanged. <br /></td></tr>
<tr class="separator:a14f38487f6a28d53c2dd18f359f100b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7d6626e9f8c505aee5e4e4a6a9a2841" id="r_aa7d6626e9f8c505aee5e4e4a6a9a2841"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#aa7d6626e9f8c505aee5e4e4a6a9a2841">valueMask</a> = ~<a class="el" href="structripple_1_1IntrusiveRefCounts.html#a14f38487f6a28d53c2dd18f359f100b7">tagMask</a></td></tr>
<tr class="memdesc:aa7d6626e9f8c505aee5e4e4a6a9a2841"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mask that will zero out the <code>tag</code> bits and leave the count bits unchanged. <br /></td></tr>
<tr class="separator:aa7d6626e9f8c505aee5e4e4a6a9a2841"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a39d6806246ab6814b4976e8564eaa4a9" id="r_a39d6806246ab6814b4976e8564eaa4a9"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a39d6806246ab6814b4976e8564eaa4a9">strongMask</a></td></tr>
<tr class="memdesc:a39d6806246ab6814b4976e8564eaa4a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mask that will zero out everything except the strong count. <br /></td></tr>
<tr class="separator:a39d6806246ab6814b4976e8564eaa4a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36e1b0cc04f4e9647f5bdc4cc15c2a58" id="r_a36e1b0cc04f4e9647f5bdc4cc15c2a58"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a36e1b0cc04f4e9647f5bdc4cc15c2a58">weakMask</a></td></tr>
<tr class="memdesc:a36e1b0cc04f4e9647f5bdc4cc15c2a58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mask that will zero out everything except the weak count. <br /></td></tr>
<tr class="separator:a36e1b0cc04f4e9647f5bdc4cc15c2a58"><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:a846e8e80d205b0e2406f92fcab8a0f1d" id="r_a846e8e80d205b0e2406f92fcab8a0f1d"><td class="memTemplParams" colspan="2">template&lt;class T &gt; </td></tr>
<tr class="memitem:a846e8e80d205b0e2406f92fcab8a0f1d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structripple_1_1IntrusiveRefCounts.html#a846e8e80d205b0e2406f92fcab8a0f1d">partialDestructorFinished</a> (T **o)</td></tr>
<tr class="separator:a846e8e80d205b0e2406f92fcab8a0f1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Implement the strong count, weak count, and bit flags for an intrusive pointer. </p>
<p>A class can satisfy the requirements of a ripple::IntrusivePointer by inheriting from this class. </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00040">40</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="ab7a556a3c550ec65bd4a13ad1e1c5d38" name="ab7a556a3c550ec65bd4a13ad1e1c5d38"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab7a556a3c550ec65bd4a13ad1e1c5d38">&#9670;&#160;</a></span>CountType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="structripple_1_1IntrusiveRefCounts.html#ab7a556a3c550ec65bd4a13ad1e1c5d38">ripple::IntrusiveRefCounts::CountType</a> = <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a></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 class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00101">101</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="aced67e7449ec3de51624c32fa2600fb4" name="aced67e7449ec3de51624c32fa2600fb4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aced67e7449ec3de51624c32fa2600fb4">&#9670;&#160;</a></span>FieldType</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">ripple::IntrusiveRefCounts::FieldType</a> = <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a></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 class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00104">104</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a8e64ef7680c91638a0a6d2f0d5444cfb" name="a8e64ef7680c91638a0a6d2f0d5444cfb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e64ef7680c91638a0a6d2f0d5444cfb">&#9670;&#160;</a></span>~IntrusiveRefCounts()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">ripple::IntrusiveRefCounts::~IntrusiveRefCounts </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00405">405</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a44d240cf1051d782c88bd1bcdb072cac" name="a44d240cf1051d782c88bd1bcdb072cac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44d240cf1051d782c88bd1bcdb072cac">&#9670;&#160;</a></span>addStrongRef()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void ripple::IntrusiveRefCounts::addStrongRef </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">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00232">232</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="aa502b1f1e152bd4f4c710c6943967bad" name="aa502b1f1e152bd4f4c710c6943967bad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa502b1f1e152bd4f4c710c6943967bad">&#9670;&#160;</a></span>addWeakRef()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void ripple::IntrusiveRefCounts::addWeakRef </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">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00238">238</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="af7f5db65e79d614558bc9a03c45c7b8c" name="af7f5db65e79d614558bc9a03c45c7b8c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7f5db65e79d614558bc9a03c45c7b8c">&#9670;&#160;</a></span>releaseStrongRef()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceripple.html#ac34a69f56216ea1e430c09ba049bf0ae">ReleaseStrongRefAction</a> ripple::IntrusiveRefCounts::releaseStrongRef </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00244">244</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a13d869dff65da3996d022a971b2fe3aa" name="a13d869dff65da3996d022a971b2fe3aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13d869dff65da3996d022a971b2fe3aa">&#9670;&#160;</a></span>addWeakReleaseStrongRef()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceripple.html#ac34a69f56216ea1e430c09ba049bf0ae">ReleaseStrongRefAction</a> ripple::IntrusiveRefCounts::addWeakReleaseStrongRef </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00293">293</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a000f6dd42dc9af453b395b964df539be" name="a000f6dd42dc9af453b395b964df539be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a000f6dd42dc9af453b395b964df539be">&#9670;&#160;</a></span>releaseWeakRef()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceripple.html#a3b64e12be521bde0f95af971c64faf71">ReleaseWeakRefAction</a> ripple::IntrusiveRefCounts::releaseWeakRef </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00347">347</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a690ab4bafcfa7dee5eb2c47232db2950" name="a690ab4bafcfa7dee5eb2c47232db2950"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a690ab4bafcfa7dee5eb2c47232db2950">&#9670;&#160;</a></span>checkoutStrongRefFromWeak()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool ripple::IntrusiveRefCounts::checkoutStrongRefFromWeak </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">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00374">374</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a286601ec69a019633505ebbcbf2e176e" name="a286601ec69a019633505ebbcbf2e176e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a286601ec69a019633505ebbcbf2e176e">&#9670;&#160;</a></span>expired()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool ripple::IntrusiveRefCounts::expired </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">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00392">392</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a219f751b40b2bf0fcea4233970849680" name="a219f751b40b2bf0fcea4233970849680"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a219f751b40b2bf0fcea4233970849680">&#9670;&#160;</a></span>use_count()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<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> ripple::IntrusiveRefCounts::use_count </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">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00399">399</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Friends And Related Symbol Documentation</h2>
<a id="a846e8e80d205b0e2406f92fcab8a0f1d" name="a846e8e80d205b0e2406f92fcab8a0f1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a846e8e80d205b0e2406f92fcab8a0f1d">&#9670;&#160;</a></span>partialDestructorFinished</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 partialDestructorFinished </td>
<td>(</td>
<td class="paramtype">T **&#160;</td>
<td class="paramname"><em>o</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 class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00460">460</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a0265ace836a9db14f452882719075ad3" name="a0265ace836a9db14f452882719075ad3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0265ace836a9db14f452882719075ad3">&#9670;&#160;</a></span>StrongCountNumBits</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t ripple::IntrusiveRefCounts::StrongCountNumBits = sizeof(<a class="el" href="structripple_1_1IntrusiveRefCounts.html#ab7a556a3c550ec65bd4a13ad1e1c5d38">CountType</a>) * 8</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00102">102</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="aa310ba583a58aff1ce8c3a5072509fe3" name="aa310ba583a58aff1ce8c3a5072509fe3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa310ba583a58aff1ce8c3a5072509fe3">&#9670;&#160;</a></span>WeakCountNumBits</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t ripple::IntrusiveRefCounts::WeakCountNumBits = <a class="el" href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">StrongCountNumBits</a> - 2</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00103">103</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a219c707766656d5a3df4746157fd39e2" name="a219c707766656d5a3df4746157fd39e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a219c707766656d5a3df4746157fd39e2">&#9670;&#160;</a></span>FieldTypeBits</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t ripple::IntrusiveRefCounts::FieldTypeBits = sizeof(<a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>) * 8</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00105">105</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="ab6cad1aff7f346dcebd12c0d60ea3284" name="ab6cad1aff7f346dcebd12c0d60ea3284"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6cad1aff7f346dcebd12c0d60ea3284">&#9670;&#160;</a></span>one</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::one = 1</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00106">106</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="aca9660ae7c2e3bfcefc49a3bc319b7c1" name="aca9660ae7c2e3bfcefc49a3bc319b7c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca9660ae7c2e3bfcefc49a3bc319b7c1">&#9670;&#160;</a></span>refCounts</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="elRef" href="http://en.cppreference.com/w/cpp/atomic/atomic.html">std::atomic</a>&lt;<a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a>&gt; ripple::IntrusiveRefCounts::refCounts {<a class="el" href="structripple_1_1IntrusiveRefCounts.html#a6de3bfde61b102118d4d85dbb2a9a7a3">strongDelta</a>}</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">mutable</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p><code>refCounts</code> consists of four fields that are treated atomically: </p>
<ol type="1">
<li>Strong count. This is a count of the number of shared pointers that hold a reference to this object. When the strong counts goes to zero, if the weak count is zero, the destructor is run. If the weak count is non-zero when the strong count goes to zero then the partialDestructor is run.</li>
<li>Weak count. This is a count of the number of weak pointer that hold a reference to this object. When the weak count goes to zero and the strong count is also zero, then the destructor is run.</li>
<li>Partial destroy started bit. This bit is set if the <code>partialDestructor</code> function has been started (or is about to be started). This is used to prevent the destructor from running concurrently with the partial destructor. This can easily happen when the last strong pointer release its reference in one thread and starts the partialDestructor, while in another thread the last weak pointer goes out of scope and starts the destructor while the partialDestructor is still running. Both a start and finished bit is needed to handle a corner-case where the last strong pointer goes out of scope, then then last <code>weakPointer</code> goes out of scope, but this happens before the <code>partialDestructor</code> bit is set. It would be possible to use a single bit if it could also be set atomically when the strong count goes to zero and the weak count is non-zero, but that would add complexity (and likely slow down common cases as well).</li>
<li>Partial destroy finished bit. This bit is set when the <code>partialDestructor</code> has finished running. See (3) above for more information. </li>
</ol>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00141">141</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a6de3bfde61b102118d4d85dbb2a9a7a3" name="a6de3bfde61b102118d4d85dbb2a9a7a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6de3bfde61b102118d4d85dbb2a9a7a3">&#9670;&#160;</a></span>strongDelta</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::strongDelta = 1</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Amount to change the strong count when adding or releasing a reference. </p>
<p>Note: The strong count is stored in the low <code>StrongCountNumBits</code> bits of refCounts </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00148">148</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a9f1df1e02f8c059a10598595669c5f4d" name="a9f1df1e02f8c059a10598595669c5f4d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f1df1e02f8c059a10598595669c5f4d">&#9670;&#160;</a></span>weakDelta</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::weakDelta = (<a class="el" href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">one</a> &lt;&lt; <a class="el" href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">StrongCountNumBits</a>)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Amount to change the weak count when adding or releasing a reference. </p>
<p>Note: The weak count is stored in the high <code>WeakCountNumBits</code> bits of refCounts </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00155">155</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a52d23e303089ab5665473e7d963e4a27" name="a52d23e303089ab5665473e7d963e4a27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52d23e303089ab5665473e7d963e4a27">&#9670;&#160;</a></span>partialDestroyStartedMask</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::partialDestroyStartedMask</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> (<a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">one</a> &lt;&lt; (<a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#a219c707766656d5a3df4746157fd39e2">FieldTypeBits</a> - 1))</div>
<div class="ttc" id="astructripple_1_1IntrusiveRefCounts_html_a219c707766656d5a3df4746157fd39e2"><div class="ttname"><a href="structripple_1_1IntrusiveRefCounts.html#a219c707766656d5a3df4746157fd39e2">ripple::IntrusiveRefCounts::FieldTypeBits</a></div><div class="ttdeci">static constexpr size_t FieldTypeBits</div><div class="ttdef"><b>Definition</b> <a href="IntrusiveRefCounts_8h_source.html#l00105">IntrusiveRefCounts.h:105</a></div></div>
<div class="ttc" id="astructripple_1_1IntrusiveRefCounts_html_ab6cad1aff7f346dcebd12c0d60ea3284"><div class="ttname"><a href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">ripple::IntrusiveRefCounts::one</a></div><div class="ttdeci">static constexpr FieldType one</div><div class="ttdef"><b>Definition</b> <a href="IntrusiveRefCounts_8h_source.html#l00106">IntrusiveRefCounts.h:106</a></div></div>
</div><!-- fragment -->
<p>Flag that is set when the partialDestroy function has started running (or is about to start running). </p>
<p>See description of the <code>refCounts</code> field for a fuller description of this field. </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00163">163</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a08a017aeb3e7f6b9c0a09cb63ab16340" name="a08a017aeb3e7f6b9c0a09cb63ab16340"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08a017aeb3e7f6b9c0a09cb63ab16340">&#9670;&#160;</a></span>partialDestroyFinishedMask</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::partialDestroyFinishedMask</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> (<a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">one</a> &lt;&lt; (<a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#a219c707766656d5a3df4746157fd39e2">FieldTypeBits</a> - 2))</div>
</div><!-- fragment -->
<p>Flag that is set when the partialDestroy function has finished running. </p>
<p>See description of the <code>refCounts</code> field for a fuller description of this field. </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00171">171</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a14f38487f6a28d53c2dd18f359f100b7" name="a14f38487f6a28d53c2dd18f359f100b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14f38487f6a28d53c2dd18f359f100b7">&#9670;&#160;</a></span>tagMask</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::tagMask</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> <a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#a52d23e303089ab5665473e7d963e4a27">partialDestroyStartedMask</a> | <a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#a08a017aeb3e7f6b9c0a09cb63ab16340">partialDestroyFinishedMask</a></div>
<div class="ttc" id="astructripple_1_1IntrusiveRefCounts_html_a08a017aeb3e7f6b9c0a09cb63ab16340"><div class="ttname"><a href="structripple_1_1IntrusiveRefCounts.html#a08a017aeb3e7f6b9c0a09cb63ab16340">ripple::IntrusiveRefCounts::partialDestroyFinishedMask</a></div><div class="ttdeci">static constexpr FieldType partialDestroyFinishedMask</div><div class="ttdoc">Flag that is set when the partialDestroy function has finished running.</div><div class="ttdef"><b>Definition</b> <a href="IntrusiveRefCounts_8h_source.html#l00171">IntrusiveRefCounts.h:171</a></div></div>
<div class="ttc" id="astructripple_1_1IntrusiveRefCounts_html_a52d23e303089ab5665473e7d963e4a27"><div class="ttname"><a href="structripple_1_1IntrusiveRefCounts.html#a52d23e303089ab5665473e7d963e4a27">ripple::IntrusiveRefCounts::partialDestroyStartedMask</a></div><div class="ttdeci">static constexpr FieldType partialDestroyStartedMask</div><div class="ttdoc">Flag that is set when the partialDestroy function has started running (or is about to start running).</div><div class="ttdef"><b>Definition</b> <a href="IntrusiveRefCounts_8h_source.html#l00163">IntrusiveRefCounts.h:163</a></div></div>
</div><!-- fragment -->
<p>Mask that will zero out all the <code>count</code> bits and leave the tag bits unchanged. </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00177">177</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="aa7d6626e9f8c505aee5e4e4a6a9a2841" name="aa7d6626e9f8c505aee5e4e4a6a9a2841"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7d6626e9f8c505aee5e4e4a6a9a2841">&#9670;&#160;</a></span>valueMask</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::valueMask = ~<a class="el" href="structripple_1_1IntrusiveRefCounts.html#a14f38487f6a28d53c2dd18f359f100b7">tagMask</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Mask that will zero out the <code>tag</code> bits and leave the count bits unchanged. </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00183">183</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a39d6806246ab6814b4976e8564eaa4a9" name="a39d6806246ab6814b4976e8564eaa4a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a39d6806246ab6814b4976e8564eaa4a9">&#9670;&#160;</a></span>strongMask</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::strongMask</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> ((<a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">one</a> &lt;&lt; <a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">StrongCountNumBits</a>) - 1) &amp; <a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#aa7d6626e9f8c505aee5e4e4a6a9a2841">valueMask</a></div>
<div class="ttc" id="astructripple_1_1IntrusiveRefCounts_html_a0265ace836a9db14f452882719075ad3"><div class="ttname"><a href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">ripple::IntrusiveRefCounts::StrongCountNumBits</a></div><div class="ttdeci">static constexpr size_t StrongCountNumBits</div><div class="ttdef"><b>Definition</b> <a href="IntrusiveRefCounts_8h_source.html#l00102">IntrusiveRefCounts.h:102</a></div></div>
<div class="ttc" id="astructripple_1_1IntrusiveRefCounts_html_aa7d6626e9f8c505aee5e4e4a6a9a2841"><div class="ttname"><a href="structripple_1_1IntrusiveRefCounts.html#aa7d6626e9f8c505aee5e4e4a6a9a2841">ripple::IntrusiveRefCounts::valueMask</a></div><div class="ttdeci">static constexpr FieldType valueMask</div><div class="ttdoc">Mask that will zero out the tag bits and leave the count bits unchanged.</div><div class="ttdef"><b>Definition</b> <a href="IntrusiveRefCounts_8h_source.html#l00183">IntrusiveRefCounts.h:183</a></div></div>
</div><!-- fragment -->
<p>Mask that will zero out everything except the strong count. </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00187">187</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.h</a>.</p>
</div>
</div>
<a id="a36e1b0cc04f4e9647f5bdc4cc15c2a58" name="a36e1b0cc04f4e9647f5bdc4cc15c2a58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36e1b0cc04f4e9647f5bdc4cc15c2a58">&#9670;&#160;</a></span>weakMask</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr <a class="el" href="structripple_1_1IntrusiveRefCounts.html#aced67e7449ec3de51624c32fa2600fb4">FieldType</a> ripple::IntrusiveRefCounts::weakMask</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> (((<a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#ab6cad1aff7f346dcebd12c0d60ea3284">one</a> &lt;&lt; <a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#aa310ba583a58aff1ce8c3a5072509fe3">WeakCountNumBits</a>) - 1) &lt;&lt; <a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#a0265ace836a9db14f452882719075ad3">StrongCountNumBits</a>) &amp; <a class="code hl_variable" href="structripple_1_1IntrusiveRefCounts.html#aa7d6626e9f8c505aee5e4e4a6a9a2841">valueMask</a></div>
<div class="ttc" id="astructripple_1_1IntrusiveRefCounts_html_aa310ba583a58aff1ce8c3a5072509fe3"><div class="ttname"><a href="structripple_1_1IntrusiveRefCounts.html#aa310ba583a58aff1ce8c3a5072509fe3">ripple::IntrusiveRefCounts::WeakCountNumBits</a></div><div class="ttdeci">static constexpr size_t WeakCountNumBits</div><div class="ttdef"><b>Definition</b> <a href="IntrusiveRefCounts_8h_source.html#l00103">IntrusiveRefCounts.h:103</a></div></div>
</div><!-- fragment -->
<p>Mask that will zero out everything except the weak count. </p>
<p class="definition">Definition at line <a class="el" href="IntrusiveRefCounts_8h_source.html#l00192">192</a> of file <a class="el" href="IntrusiveRefCounts_8h_source.html">IntrusiveRefCounts.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>