<!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_l.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_l"></a>- l -</h3><ul>
<li>length()
: <a class="el" href="a00359.html#aabe4083211f84d41463b46a1749efeb7">apache::geode::client::CacheableString</a>
</li>
<li>listener_container_type
: <a class="el" href="a00395.html#a80c8c74990045cfdf18d438601e2800b">apache::geode::client::CqAttributes</a>
</li>
<li>load()
: <a class="el" href="a00379.html#aa79596f50779a0532a13638c2a85c90e">apache::geode::client::CacheLoader</a>
, <a class="el" href="a00799.html#a7ecc905e38151a951b29d046b3ddf672">apache::geode::client::Properties</a>
</li>
<li>localClear()
: <a class="el" href="a00815.html#a3ad98b833f6a7fa2f523e4f9c48e156c">apache::geode::client::Region</a>
</li>
<li>localCreate()
: <a class="el" href="a00815.html#a803c712c4b8fb815312ba65c35f8f638">apache::geode::client::Region</a>
</li>
<li>localDestroy()
: <a class="el" href="a00815.html#ae15edb6a306b2034de0c0fed001fe77f">apache::geode::client::Region</a>
</li>
<li>localDestroyRegion()
: <a class="el" href="a00815.html#a7572b61d45c19a28667779c68e44869b">apache::geode::client::Region</a>
</li>
<li>localInvalidate()
: <a class="el" href="a00815.html#aec2bad01768d7c54470dc6364fd1d9c1">apache::geode::client::Region</a>
</li>
<li>localInvalidateRegion()
: <a class="el" href="a00815.html#a8a2aa318cee5209815bec5dcad3db3c3">apache::geode::client::Region</a>
</li>
<li>localPut()
: <a class="el" href="a00815.html#a56b987344899b83ff9e3a786adc2f8ec">apache::geode::client::Region</a>
</li>
<li>localRemove()
: <a class="el" href="a00815.html#a5d81acc0a327cae9fc19501d8cc83e44">apache::geode::client::Region</a>
</li>
<li>localRemoveEx()
: <a class="el" href="a00815.html#a5ab0f1aaee2012f4078ddef9cbcd0f77">apache::geode::client::Region</a>
</li>
<li>logDiskSpaceLimit()
: <a class="el" href="a00867.html#a6fb8db3d7c74b46db9238d5b0cdd972c">apache::geode::client::SystemProperties</a>
</li>
<li>logFilename()
: <a class="el" href="a00867.html#a12a9d43fbb32053c7ee30d6109214d73">apache::geode::client::SystemProperties</a>
</li>
<li>logFileSizeLimit()
: <a class="el" href="a00867.html#a1ebef80e99631088101e68eeea5f12a9">apache::geode::client::SystemProperties</a>
</li>
<li>logLevel()
: <a class="el" href="a00867.html#ae5d1a8938fb1aed15f3739e02141764b">apache::geode::client::SystemProperties</a>
</li>
<li>logSettings()
: <a class="el" href="a00867.html#afa4f371b3e85455c84bdcfa650597170">apache::geode::client::SystemProperties</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>
