<!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">
<head>
<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.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Apache Geode Native C++ Reference: Data Fields</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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(initResizable);
/* @license-end */</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 style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Apache Geode Native C++ Reference
   &#160;<span id="projectnumber">1.13.1</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @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:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('functions.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- 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 struct and union fields with links to the struct/union documentation for each field:</div>

<h3><a id="index_a"></a>- a -</h3><ul>
<li>addAll()
: <a class="el" href="a00799.html#a16381f8466a3934e3ff933a6a953fb97">apache::geode::client::Properties</a>
</li>
<li>addCqListener()
: <a class="el" href="a00399.html#a562ab918c5d3db98b7cda4c87a9489ad">apache::geode::client::CqAttributesFactory</a>
, <a class="el" href="a00403.html#ad37d6c71bbcb958a555d020ae8b54ef5">apache::geode::client::CqAttributesMutator</a>
</li>
<li>addLocator()
: <a class="el" href="a00791.html#aa3f05ec7294f3024438a0a540020b4ac">apache::geode::client::PoolFactory</a>
</li>
<li>addResult()
: <a class="el" href="a00843.html#adfb3fb793a4dd7fcec334a083b4f6967">apache::geode::client::ResultCollector</a>
</li>
<li>addServer()
: <a class="el" href="a00791.html#a5dd34be982576cbf4d71259266ebe11a">apache::geode::client::PoolFactory</a>
</li>
<li>advanceCursor()
: <a class="el" href="a00435.html#a7383e1983b2128d8edb85ef6a8330759">apache::geode::client::DataInput</a>
, <a class="el" href="a00439.html#ae9419d1d5e9e1d208619e63676e87f48">apache::geode::client::DataOutput</a>
</li>
<li>afterCreate()
: <a class="el" href="a00375.html#a08132e78c6431f81bd4ddc7f1a87cc44">apache::geode::client::CacheListener</a>
</li>
<li>afterDestroy()
: <a class="el" href="a00375.html#ae25df9bc72e208023068fd4f193d4224">apache::geode::client::CacheListener</a>
</li>
<li>afterInvalidate()
: <a class="el" href="a00375.html#a42a3838742960796df2fb6668bf8d108">apache::geode::client::CacheListener</a>
</li>
<li>afterRegionClear()
: <a class="el" href="a00375.html#ae81f5fe95bd0a2ad570a273a4e3ccd2f">apache::geode::client::CacheListener</a>
</li>
<li>afterRegionDestroy()
: <a class="el" href="a00375.html#ae95e119b2f9d75b82df75afedb5a140c">apache::geode::client::CacheListener</a>
</li>
<li>afterRegionDisconnected()
: <a class="el" href="a00375.html#ae61aef93325875948385c2b8c46fa2f7">apache::geode::client::CacheListener</a>
</li>
<li>afterRegionInvalidate()
: <a class="el" href="a00375.html#ad6e1fd0a48407e6bfb4242784fc2ca4a">apache::geode::client::CacheListener</a>
</li>
<li>afterRegionLive()
: <a class="el" href="a00375.html#a43be918c591a12b2e856929093864e87">apache::geode::client::CacheListener</a>
</li>
<li>afterUpdate()
: <a class="el" href="a00375.html#a90b9e1372e3586b1fcd4161912df3983">apache::geode::client::CacheListener</a>
</li>
<li>AttributesMutator()
: <a class="el" href="a00275.html#a757368afb9b227286dcffab5722db145">apache::geode::client::AttributesMutator</a>
</li>
<li>AuthenticatedView()
: <a class="el" href="a00279.html#a26b1a82f8772ff63f81967a1616da618">apache::geode::client::AuthenticatedView</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at
     http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<HR><address style="align: right;"><small>Apache Geode C++ Cache API Documentation</small></address>
