<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="canonical" href="https://ignite.apache.org/releases/2.9.1/cppdoc/namespacemembers.html" />
<META NAME="ROBOTS" CONTENT="NOINDEX">
<!-- Yandex.Metrika counter -->
    <script type="text/javascript" >
      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
    
      ym(72949126, "init", {
           clickmap:true,
           trackLinks:true,
           accurateTrackBounce:true,
           webvisor:true
      });
    </script>
    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
    <!-- /Yandex.Metrika counter -->
<script type='text/javascript'>
    window.__lo_site_id = 284467;
    
      (function() {
        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
        })();
      </script>


<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>&nbsp; Apache Ignite C++: Namespace Members</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" />

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-61232409-1', 'auto');
  ga('send', 'pageview');

</script></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 style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="ignite_logo.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">&nbsp; Apache Ignite C++
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- 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">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="contents">
<div class="textblock">Here is a list of all documented namespace members with links to the namespaces they belong to:</div>

<h3><a id="index_d"></a>- d -</h3><ul>
<li>DFLT_CFG
: <a class="el" href="namespaceignite.html#ac3187647ce756893682aedb63993a4fc">ignite</a>
</li>
</ul>


<h3><a id="index_f"></a>- f -</h3><ul>
<li>factoryLock
: <a class="el" href="namespaceignite.html#a5140415d3b8b40ecd43aa83597d84627">ignite</a>
</li>
</ul>


<h3><a id="index_g"></a>- g -</h3><ul>
<li>GetBinaryStringHashCode()
: <a class="el" href="namespaceignite_1_1binary.html#ac93fb79680cc0baff9d1d6bd6e44139a">ignite::binary</a>
</li>
</ul>


<h3><a id="index_j"></a>- j -</h3><ul>
<li>JVM_LIB_LOADED
: <a class="el" href="namespaceignite.html#ac18638cf1e1e9d64caf401ac105b5122">ignite</a>
</li>
<li>JvmMemoryString()
: <a class="el" href="namespaceignite.html#ae3921cbc337d32fd43b1fce5b1d663a6">ignite</a>
</li>
</ul>


<h3><a id="index_m"></a>- m -</h3><ul>
<li>MakeConstReference()
: <a class="el" href="namespaceignite.html#ae78424fdffadc92e84b815d5df9c6fee">ignite</a>
</li>
<li>MakeConstReferenceFromCopy()
: <a class="el" href="namespaceignite.html#a713b8934e0021d44b99f15acae86efe2">ignite</a>
</li>
<li>MakeConstReferenceFromOwningPointer()
: <a class="el" href="namespaceignite.html#a6b46914ac275250143be90e5bc2411e2">ignite</a>
</li>
<li>MakeConstReferenceFromSmartPointer()
: <a class="el" href="namespaceignite.html#a4d056cf27c881af6b06bda130d0f64ed">ignite</a>
</li>
<li>MakeReference()
: <a class="el" href="namespaceignite.html#ac1523106a14156cf653b3366d92562cd">ignite</a>
</li>
<li>MakeReferenceFromCopy()
: <a class="el" href="namespaceignite.html#a1876725dc2d3119c5a0b15cf417aa1d0">ignite</a>
</li>
<li>MakeReferenceFromOwningPointer()
: <a class="el" href="namespaceignite.html#a700a57aef7b1a3ebd13feed33dcf4170">ignite</a>
</li>
<li>MakeReferenceFromSmartPointer()
: <a class="el" href="namespaceignite.html#a01845a228a65220aed4fa281e408c610">ignite</a>
</li>
</ul>


<h3><a id="index_o"></a>- o -</h3><ul>
<li>operator!=()
: <a class="el" href="namespaceignite.html#a0fc5f4a76b8b2baa65893fc9c46c4935">ignite</a>
</li>
<li>operator&lt;()
: <a class="el" href="namespaceignite.html#a106dd88a9964860fa6a6c13cf7ffc2cd">ignite</a>
</li>
<li>operator&lt;&lt;()
: <a class="el" href="namespaceignite.html#ac26d447ad00c0ca3a8bfa309732e82cb">ignite</a>
</li>
<li>operator&lt;=()
: <a class="el" href="namespaceignite.html#a071c9365622edf5052bd94f0f48ef238">ignite</a>
</li>
<li>operator==()
: <a class="el" href="namespaceignite.html#afb70f4da4a9f6334f47b5c71721963ed">ignite</a>
</li>
<li>operator&gt;()
: <a class="el" href="namespaceignite.html#a6845717dc6c3a7d3b3247e3fc8169844">ignite</a>
</li>
<li>operator&gt;=()
: <a class="el" href="namespaceignite.html#ade0fafd6b7a6c274725529474ce04723">ignite</a>
</li>
<li>operator&gt;&gt;()
: <a class="el" href="namespaceignite.html#a28f6f15d40523f15436326d3376bd307">ignite</a>
</li>
</ul>


<h3><a id="index_s"></a>- s -</h3><ul>
<li>started
: <a class="el" href="namespaceignite.html#a340fa66fbb410168be7d201fd48d9515">ignite</a>
</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Dec 9 2020 14:26:55 for &nbsp; Apache Ignite C++ by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
