<!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 .NET 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 .NET 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_p.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_p"></a>- p -</h3><ul>
<li>ParentRegion
: <a class="el" href="a01014.html#a5ccaf8c583596816cd62e23678360f23">Apache::Geode::Client::IRegion&lt; TKey, TValue &gt;</a>
</li>
<li>PartitionResolver
: <a class="el" href="a01010.html#a3593c122dfe46921a119a12081b6ad81">Apache::Geode::Client::RegionAttributes&lt; TKey, TValue &gt;</a>
</li>
<li>PartitionResolverFactory
: <a class="el" href="a01010.html#aac2c2cb582604b5762ff4efce1b5010c">Apache::Geode::Client::RegionAttributes&lt; TKey, TValue &gt;</a>
</li>
<li>PartitionResolverLibrary
: <a class="el" href="a01010.html#ae0232b429af3ccc1efb3da1c583eeab3">Apache::Geode::Client::RegionAttributes&lt; TKey, TValue &gt;</a>
</li>
<li>PdxTypeMapper
: <a class="el" href="a01138.html#af39a19b0a644a454457ff5e6f8484b66">Apache::Geode::Client::TypeRegistry</a>
</li>
<li>PendingEventCount
: <a class="el" href="a01070.html#a561e56db86d988a0ad887499c3f9d686">Apache::Geode::Client::Pool</a>
</li>
<li>PersistenceFactory
: <a class="el" href="a01010.html#a20a39fe75884e4c4a1ba8c7cbd9f3a01">Apache::Geode::Client::RegionAttributes&lt; TKey, TValue &gt;</a>
</li>
<li>PersistenceLibrary
: <a class="el" href="a01010.html#abd05cb2b932697983f93f34597159ab5">Apache::Geode::Client::RegionAttributes&lt; TKey, TValue &gt;</a>
</li>
<li>PersistenceProperties
: <a class="el" href="a01010.html#a9a3ad9853f26bc2361fd045f164bf16c">Apache::Geode::Client::RegionAttributes&lt; TKey, TValue &gt;</a>
</li>
<li>PingInterval
: <a class="el" href="a01070.html#a7877e0e3b0a0f21aa867b875fedc3b68">Apache::Geode::Client::Pool</a>
, <a class="el" href="a01126.html#a7e22cb2b08bae08012d4c4d4c7c4e081">Apache::Geode::Client::SystemProperties</a>
</li>
<li>PoolName
: <a class="el" href="a01010.html#ae8c38b1dc57f08671e18e2a8b5c1ddf2">Apache::Geode::Client::RegionAttributes&lt; TKey, TValue &gt;</a>
</li>
<li>Prepare()
: <a class="el" href="a00550.html#a0291325839d6cd074ae8391968412771">Apache::Geode::Client::CacheTransactionManager</a>
</li>
<li>ProductDescription
: <a class="el" href="a00538.html#a06b9d04793e9fcf7e27adf5aa429429f">Apache::Geode::Client::CacheFactory</a>
</li>
<li>Properties
: <a class="el" href="a00894.html#ac663eeadd2ee1742d883f4a44072a815">Apache::Geode::Client::GeodeClassIds</a>
, <a class="el" href="a00406.html#a38ce79cdc06816650dd0c2b7f65aed7d">Apache::Geode::Client::Properties&lt; TPropKey, TPropValue &gt;</a>
</li>
<li>PRSingleHopEnabled
: <a class="el" href="a01070.html#a86ed830f0035feb941daa95ebabbe342">Apache::Geode::Client::Pool</a>
</li>
<li>Put()
: <a class="el" href="a01014.html#ac800168130fe2a83d4ea2a9b1a38c2a5">Apache::Geode::Client::IRegion&lt; TKey, TValue &gt;</a>
</li>
<li>PutAll()
: <a class="el" href="a01014.html#afbac1059e1631716e1a43736a3941847">Apache::Geode::Client::IRegion&lt; TKey, TValue &gt;</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 .NET API Documentation</small></address>
