<!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_i.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_i"></a>- i -</h3><ul>
<li>init()
: <a class="el" href="a00783.html#a7c823ff84c48c598581bc1903bc9c6af">apache::geode::client::PersistenceManager</a>
</li>
<li>initCqListeners()
: <a class="el" href="a00399.html#ab7df33509286049c113ad9230de90b14">apache::geode::client::CqAttributesFactory</a>
</li>
<li>initializeDeclarativeCache()
: <a class="el" href="a00287.html#af15c890de627c7aebb7800c4ad235cbe">apache::geode::client::Cache</a>
, <a class="el" href="a00743.html#ad1dd178d54fe47897d3ea2f0694b4fbd">apache::geode::client::GeodeCache</a>
</li>
<li>insert()
: <a class="el" href="a00799.html#a236cd79bd5ac2c51a3ef4107f1d8d668">apache::geode::client::Properties</a>
</li>
<li>invalidate()
: <a class="el" href="a00815.html#aaf5d2224d28bb3ec4647138c93d17bf3">apache::geode::client::Region</a>
</li>
<li>invalidateRegion()
: <a class="el" href="a00815.html#a7b8c7859dda52ac8d4c8400181a9b255">apache::geode::client::Region</a>
</li>
<li>isClosed()
: <a class="el" href="a00279.html#ae11f988865fe1074f84b9932f0e7c78d">apache::geode::client::AuthenticatedView</a>
, <a class="el" href="a00287.html#a989d7fce829d1d12e7da49052445898d">apache::geode::client::Cache</a>
, <a class="el" href="a00415.html#a03df6fa98290cfa8bf80937d187b90d6">apache::geode::client::CqQuery</a>
, <a class="el" href="a00839.html#a0a9bb57c509648270a50abc5afea1dae">apache::geode::client::RegionService</a>
</li>
<li>isCompiled()
: <a class="el" href="a00807.html#ae398308c9952ac883cc05e31efd60451">apache::geode::client::Query</a>
</li>
<li>isDestroyed()
: <a class="el" href="a00787.html#afcbdec8d008434d7579ed36c8b9c23ae">apache::geode::client::Pool</a>
, <a class="el" href="a00827.html#ab3c5cdcb2849d943527534b56a4fc7d9">apache::geode::client::RegionEntry</a>
</li>
<li>isDurable()
: <a class="el" href="a00415.html#a1275d81de8cb0c0bb21094d088ccc8a5">apache::geode::client::CqQuery</a>
</li>
<li>isIdentityField()
: <a class="el" href="a00751.html#ae7a9cdd92ccdd12ec2f2f984c64d1791">apache::geode::client::PdxInstance</a>
, <a class="el" href="a00759.html#ab5b5d8bb5f7488b7984c14106245ae3f">apache::geode::client::PdxReader</a>
</li>
<li>isRunning()
: <a class="el" href="a00415.html#a62d53f5b8b9baa4f334e7d246c7613e6">apache::geode::client::CqQuery</a>
</li>
<li>isStopped()
: <a class="el" href="a00415.html#a2de7b1d1912509cae1b48e4f4ecb60ab">apache::geode::client::CqQuery</a>
</li>
<li>isSuspended()
: <a class="el" href="a00387.html#a77a2e4d0bd8a240700f087ed4156cff0">apache::geode::client::CacheTransactionManager</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>
