<!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 - Functions</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_func_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">
&#160;

<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>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#a618ea2e7439a0fc8a49085fc6246cfed">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#a795a7a96f8d6bf78efe9cfe88dc359e0">apache::geode::client::Region</a>
</li>
<li>localRemove()
: <a class="el" href="a00815.html#ab4f4f753f6d82d5ff1d16335ca0f6ad6">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>
