You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jb...@apache.org on 2017/08/11 23:52:32 UTC

[16/52] [partial] geode-native git commit: GEODE-3165: Reogranized sources relative to the root for better CMake IDE integration.

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6cbd424f/clicache/src/IRegion.hpp
----------------------------------------------------------------------
diff --git a/clicache/src/IRegion.hpp b/clicache/src/IRegion.hpp
new file mode 100644
index 0000000..cbbf2eb
--- /dev/null
+++ b/clicache/src/IRegion.hpp
@@ -0,0 +1,2077 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include "geode_defs.hpp"
+#include "ISubscriptionService.hpp"
+#include "begin_native.hpp"
+#include <geode/DataOutput.hpp>
+#include "end_native.hpp"
+
+//#include "ExceptionTypes.hpp"
+
+using namespace System;
+using namespace System::Collections::Generic;
+
+/*
+using namespace Apache::Geode::Client;
+using namespace Apache::Geode::Client;
+*/
+
+namespace Apache
+{
+  namespace Geode
+  {
+    namespace Client
+    {
+
+      ref class Cache;
+      ref class CacheStatistics;
+      //interface class IGeodeSerializable;
+      interface class IRegionService;
+
+      generic<class TResult>
+      interface class ISelectResults;
+
+      generic<class TKey, class TValue>
+      ref class RegionEntry;
+
+      generic<class TKey, class TValue>
+      ref class RegionAttributes;
+
+      generic<class TKey, class TValue>
+      ref class AttributesMutator;
+
+      /// <summary>
+      /// Encapsulates a concrete region of cached data.
+      /// Implements generic IDictionary<TKey, TValue> interface class.
+      /// </summary>
+      /// <remarks>
+      /// This class manages subregions and cached data. Each region
+      /// can contain multiple subregions and entries for data.
+      /// Regions provide a hierachical name space
+      /// within the cache. Also, a region can be used to group cached
+      /// objects for management purposes.
+      ///
+      /// Entries managed by the region are key-value pairs. A set of region attributes
+      /// is associated with the region when it is created.
+      ///
+      /// The IRegion interface basically contains two set of APIs: Region management
+      /// APIs and (potentially) distributed operations on entries. Non-distributed
+      /// operations on entries  are provided by <c>RegionEntry</c>.
+      ///
+      /// Each <c>Cache</c> defines regions called the root regions.
+      /// User applications can use the root regions to create subregions
+      /// for isolated name spaces and object grouping.
+      ///
+      /// A region's name can be any string, except that it must not contain
+      /// the region name separator, a forward slash (/).
+      ///
+      /// <c>Regions</c>  can be referenced by a relative path name from any region
+      /// higher in the hierarchy in <see cref="IRegion.GetSubRegion" />. You can get the relative
+      /// path from the root region with <see cref="IRegion.FullPath" />. The name separator
+      /// is used to concatenate all the region names together from the root, starting
+      /// with the root's subregions.
+      /// </remarks>
+      /// <see cref="RegionAttributes" />
+
+      generic<class TKey, class TValue>
+      public interface class IRegion : public System::Collections::Generic::IDictionary<TKey, TValue>
+      {
+        public: 
+
+          /// <summary>
+          /// Gets or sets the element with the specified key. 
+          /// </summary>
+          /// <remarks>
+          /// This property provides the ability to access a specific element in the collection
+          /// by using the following syntax: myCollection[key].
+          /// You can also use the Item property to add new elements by setting the value of a key 
+          /// that does not exist in the dictionary; for example, myCollection["myNonexistentKey"] = myValue
+          /// However, if the specified key already exists in the dictionary, 
+          /// setting the Item property overwrites the old value. In contrast, 
+          /// the Add method does not modify existing elements.
+          /// This property is applicable to local as well as distributed region.
+          /// For local region instance - Puts/Gets a new value into an entry in this region in the local cache only.
+          /// For distributed region instance - Puts/Gets a new value into an entry in this region
+          /// and this operation is propogated to the Geode cache server to which it is connected with.
+          /// </remarks>
+          /// <param name="key">
+          /// The key of the element to get or set.
+          /// </param>
+          /// <param name ="Property Value">
+          /// The element with the specified key.
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="KeyNotFoundException">
+          /// If given key was not present in the region and if region is not in secure mode, or if Pool
+          /// attached with Region is not in multiusersecure mode.
+          /// </exception>
+          /// <exception cref="EntryNotFoundException">
+          /// if given key's value is null.
+          /// </exception>
+          /// <exception cref="CacheWriterException">
+          /// if CacheWriter aborts the operation
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if  there is not enough memory for the value
+          /// </exception>
+          /// <exception cref="CacheLoaderException">
+          /// if CacheLoader throws an exception
+          /// </exception>
+          /// <exception cref="MessageException">
+          /// If the message received from server could not be handled. This will
+          /// be the case when an unregistered typeId is received in the reply or
+          /// reply is not well formed. More information can be found in the log.
+          /// </exception>
+          virtual property TValue default[TKey]
+          {
+            TValue get(TKey key);
+            void set(TKey key, TValue value);
+          }          
+
+          /// <summary>
+          /// Returns an enumerator that iterates through the collection of the region entries.
+          /// This operation is performed entirely in local cache.
+          /// </summary>
+          /// <remarks>
+          /// The foreach statement of the C# language (for each in C++)hides the 
+          /// complexity of the enumerators. Therefore, using foreach is recommended, 
+          /// instead of directly manipulating the enumerator.
+          /// Enumerators can be used to read the data in the collection, 
+          /// but they cannot be used to modify the underlying collection.
+          /// Initially, the enumerator is positioned before the first element in the collection. 
+          /// At this position, Current is undefined. Therefore, you must call MoveNext to advance
+          /// the enumerator to the first element of the collection before reading the value of Current.
+          /// Current returns the same object until MoveNext is called. MoveNext sets Current to the next element.
+          /// If MoveNext passes the end of the collection, the enumerator is positioned after the last element
+          /// in the collection and MoveNext returns false. When the enumerator is at this position, subsequent
+          /// calls to MoveNext also return false. If the last call to MoveNext returned false, Current is 
+          /// undefined. You cannot set Current to the first element of the collection again; you must create
+          /// a new enumerator instance instead.
+          /// The enumerator does not have exclusive access to the collection; therefore, enumerating through a 
+          /// collection is intrinsically not a thread-safe procedure. To guarantee thread safety during 
+          /// enumeration, you can lock the collection during the entire enumeration. To allow the collection
+          /// to be accessed by multiple threads for reading and writing, you must implement your own 
+          /// synchronization.
+          /// Default implementations of collections in the System.Collections.Generic namespace are not 
+          /// synchronized.
+          /// For both local & distributed region instances, this operation is restricted to local cache only.          
+          /// </remarks>
+          /// <exception cref="InvalidOperationException">
+          /// if enumerator is before or after the collection and Current method is called on it.
+          /// </exception>          
+          /// <returns>
+          /// Type: System.Collections.Generic.IEnumerator<T>. A IEnumerator<T> that 
+          /// can be used to iterate through the collection.
+          /// </returns>
+          virtual System::Collections::Generic::IEnumerator<KeyValuePair<TKey,TValue>>^ GetEnumerator();
+          
+          /// <summary>
+          /// Returns an enumerator that iterates through the collection of the region entries.
+          /// This operation is performed entirely in local cache.
+          /// </summary>
+          /// <remarks>
+          /// The foreach statement of the C# language (for each in C++)hides the 
+          /// complexity of the enumerators. Therefore, using foreach is recommended, 
+          /// instead of directly manipulating the enumerator.
+          /// Enumerators can be used to read the data in the collection, 
+          /// but they cannot be used to modify the underlying collection.
+          /// Initially, the enumerator is positioned before the first element in the collection. 
+          /// At this position, Current is undefined. Therefore, you must call MoveNext to advance
+          /// the enumerator to the first element of the collection before reading the value of Current.
+          /// Current returns the same object until MoveNext is called. MoveNext sets Current to the next element.
+          /// If MoveNext passes the end of the collection, the enumerator is positioned after the last element
+          /// in the collection and MoveNext returns false. When the enumerator is at this position, subsequent
+          /// calls to MoveNext also return false. If the last call to MoveNext returned false, Current is 
+          /// undefined. You cannot set Current to the first element of the collection again; you must create
+          /// a new enumerator instance instead.
+          /// The enumerator does not have exclusive access to the collection; therefore, enumerating through a 
+          /// collection is intrinsically not a thread-safe procedure. To guarantee thread safety during 
+          /// enumeration, you can lock the collection during the entire enumeration. To allow the collection
+          /// to be accessed by multiple threads for reading and writing, you must implement your own 
+          /// synchronization.
+          /// For both local & distributed region instances, this operation is restricted to local cache only.
+          /// </remarks>
+          /// <exception cref="InvalidOperationException">
+          /// if enumerator is before or after the collection and Current method is called on it.
+          /// </exception>          
+          /// <returns>
+          /// Type: System.Collections.IEnumerator. An IEnumerator object that can be used to iterate 
+          /// through the collection.
+          /// </returns>
+          virtual System::Collections::IEnumerator^ GetEnumeratorOld() = 
+            System::Collections::IEnumerable::GetEnumerator;
+          
+          /// <summary>
+          /// Determines whether the IDictionary contains an element with the specified key. 
+          /// </summary>
+          /// <remarks>
+          /// For local region instance - This only searches in the local cache.
+          /// For distributed region instance - checks to see if the key is present on the server.
+          /// </remarks>
+          /// <param name="key">
+          /// The key to locate in the IDictionary.
+          /// </param>
+          /// <exception cref="ArgumentNullException">
+          /// key is a null reference
+          /// </exception>
+          /// <returns>
+          /// true if the IDictionary contains an element with the key; otherwise, false. 
+          /// </returns>
+          virtual bool ContainsKey(TKey key);
+          
+          /// <summary>
+          /// Adds an element with the provided key and value to the IDictionary. 
+          /// </summary>
+          /// <remark>
+          /// You can also use the Item property to add new elements by setting the value of a key 
+          /// that does not exist in the dictionary; for example, myCollection["myNonexistentKey"] = myValue
+          /// However, if the specified key already exists in the dictionary, setting the Item property 
+          /// overwrites the old value. In contrast, the Add method does not modify existing elements.
+          /// </remark>
+          /// <remarks>
+          /// <para>
+          /// If remote server put fails throwing back a <c>CacheServerException</c>
+          /// or security exception, then local put is tried to rollback. However,
+          /// if the entry has overflowed/evicted/expired then the rollback is
+          /// aborted since it may be due to a more recent notification or update
+          /// by another thread.
+          /// </para>
+          /// <para>
+          /// For local region instance - creates a new entry in this region with the specified keyvaluepair
+          /// in the local cache only.
+          /// For distributed region instance - The new entry is propogated to the java server to which it is 
+          /// connected with.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">
+          /// The object to use as the key of the element to add.
+          /// </param>
+          /// <param name="value">
+          /// The object to use as the value of the element to add.
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="EntryExistsException">
+          /// if an entry with this key already exists
+          /// </exception>
+          /// <exception cref="CacheWriterException">
+          /// if CacheWriter aborts the operation
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to a Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if there is not enough memory for the new entry
+          /// </exception>          
+          virtual void Add(TKey key, TValue value);
+          
+          /// <summary>
+          /// Adds an item to the ICollection<T>.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// If remote server put fails throwing back a <c>CacheServerException</c>
+          /// or security exception, then local put is tried to rollback. However,
+          /// if the entry has overflowed/evicted/expired then the rollback is
+          /// aborted since it may be due to a more recent notification or update
+          /// by another thread.
+          /// </para>
+          /// <para>
+          /// For local region instance - creates a new entry in this region with the specified keyvaluepair
+          /// in the local cache only.
+          /// For distributed region instance - The new entry is propogated to the java server to which it is 
+          /// connected with.
+          /// </para>
+          /// </remarks>
+          /// <param name="keyValuePair">
+          /// Type: KeyValuePair<TKey, TValue> The object to add to the ICollection<T>.
+          /// </param>          
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="EntryExistsException">
+          /// if an entry with this key already exists
+          /// </exception>
+          /// <exception cref="CacheWriterException">
+          /// if CacheWriter aborts the operation
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to a Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if there is not enough memory for the new entry
+          /// </exception>          
+          virtual void Add(KeyValuePair<TKey, TValue> keyValuePair);
+          
+          /// <summary>
+          /// Creates a new entry in this region with the specified key and value,
+          /// passing the callback argument to any cache writers and cache listeners
+          /// that are invoked in the operation.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" /> and
+          /// <see cref="CacheStatistics.LastModifiedTime" /> for this region
+          /// and the entry.
+          /// </para>
+          /// <para>
+          /// For local region instance - creates a new entry in this region with the specified key and value
+          /// in the local cache only.
+          /// For distributed region instance - The new entry is propogated to the java server to which it is 
+          /// connected with.
+          /// </para><para>
+          /// If remote server put fails throwing back a <c>CacheServerException</c>
+          /// or security exception, then local put is tried to rollback. However,
+          /// if the entry has overflowed/evicted/expired then the rollback is
+          /// aborted since it may be due to a more recent notification or update
+          /// by another thread.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">
+          /// The key for which to create the entry in this region. The object is
+          /// created before the call, and the caller should not deallocate the object.
+          /// </param>
+          /// <param name="value">
+          /// The value for the new entry, which may be null to indicate that the new
+          /// entry starts as if it had been locally invalidated.
+          /// </param>
+          /// <param name="callbackArg">
+          /// a custome parameter to pass to the cache writer or cache listener
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="EntryExistsException">
+          /// if an entry with this key already exists
+          /// </exception>
+          /// <exception cref="CacheWriterException">
+          /// if CacheWriter aborts the operation
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to a Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if there is not enough memory for the new entry
+          /// </exception>          
+          /// <seealso cref="Put" />
+          /// <seealso cref="Get" />
+          void Add(TKey key, TValue value, Object^ callbackArg);
+
+          /// <summary>
+          /// Removes the element with the specified key from the IDictionary.
+          /// </summary>
+          /// <remarks>
+          /// For local region instance - removes the entry with the specified key from the local cache only.
+          /// For distributed region instance - remove is propogated to the Geode cache server.
+          /// </remarks>
+          /// <param name="key">
+          /// The key of the element to remove.
+          /// </param> 
+          /// <exception cref="IllegalArgumentException">if key is null</exception>
+          /// <exception cref="EntryNotFoundException">
+          /// if the entry does not exist in this region locally, applicable only for local region instance.
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception> 
+          /// <returns>
+          /// true if the element is successfully removed; otherwise, false. 
+          /// This method also returns false if key was not found in the original IDictionary. 
+          /// </returns>
+          virtual bool Remove(TKey key);
+
+          /// <summary>
+          /// Removes the entry with the specified key, passing the callback
+          /// argument to any cache writers that are invoked in the operation.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Removes not only the value, but also the key and entry
+          /// from this region.
+          /// </para>
+          /// <para>
+          /// For local region instance - removes the value with the specified key in the local cache only.
+          /// For distributed region instance - destroy is propogated to the Geode cache server
+          /// to which it is connected with.          
+          /// </para>
+          /// <para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">the key of the entry to destroy</param>
+          /// <param name="callbackArg">
+          /// a user-defined parameter to pass to cache writers triggered by this method
+          /// </param>
+          /// <exception cref="IllegalArgumentException">if key is null</exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>          
+          /// <seealso cref="Invalidate" />
+          /// <seealso cref="ICacheListener.AfterDestroy" />
+          /// <seealso cref="ICacheWriter.BeforeDestroy" />
+          /// <returns>
+          /// true if the element is successfully removed; otherwise, false. 
+          /// This method also returns false if key was not found in the original IDictionary. 
+          /// </returns>
+          bool Remove( TKey key, Object^ callbackArg );
+
+          /// <summary>
+          /// Gets the value associated with the specified key.
+          /// </summary>
+          /// <remark>
+          /// This method combines the functionality of the ContainsKey method and the Item property.
+          /// If the key is not found, then the value parameter gets the appropriate default value for the value
+          /// type V; for example, zero (0) for integer types, false for Boolean types, and a null reference for
+          /// reference types.
+          /// For local region instance - returns the value with the specified key from the local cache only.
+          /// For distributed region instance - If the value is not present locally then it is requested from
+          /// the java server. If even that is unsuccessful then a local CacheLoader will be invoked
+          /// if there is one.
+          /// </remark>
+          /// <param name="key">
+          /// The key whose value to get.
+          /// </param>
+          /// <param name="value">When this method returns, the value associated with the specified key, if the key is
+          /// found; otherwise, the default value for the type of the value parameter. 
+          /// This parameter is passed uninitialized.</param>          
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="CacheLoaderException">
+          /// if CacheLoader throws an exception
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="MessageException">
+          /// If the message received from server could not be handled. This will
+          /// be the case when an unregistered typeId is received in the reply or
+          /// reply is not well formed. More information can be found in the log.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>
+          /// <returns>
+          /// true if the object that implements IDictionary contains an element with the specified key; otherwise, false.
+          /// </returns>
+          virtual bool TryGetValue(TKey key, TValue %value); 
+
+          /// <summary>
+          /// Determines whether the ICollection contains a specific value.
+          /// </summary>
+          /// <remarks>
+          /// <para>          
+          /// For local region instance - returns the value with the specified key from the local cache only.
+          /// For distributed region instance - If the value is not present locally then it is requested from
+          /// the java server. If even that is unsuccessful then a local CacheLoader will be invoked
+          /// if there is one.
+          /// </para>
+          /// <para>
+          /// The comparison of the value of the key value pair depends on the Equals function of the TValue class.
+          /// If the Equals function is not overriden in the TValue class the behavior of this function is undefined. Hence, this 
+          /// function won't work properly for the .NET types that uses the default implementation of the Equals method, for 
+          /// e.g. arrays.
+          /// </para>
+          /// </remarks>
+          /// <param name="keyValuePair">
+          /// The KeyValuePair structure to locate in the ICollection.
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="CacheLoaderException">
+          /// if CacheLoader throws an exception
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="MessageException">
+          /// If the message received from server could not be handled. This will
+          /// be the case when an unregistered typeId is received in the reply or
+          /// reply is not well formed. More information can be found in the log.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>
+          /// <returns>
+          /// true if keyValuePair is found in the ICollection; otherwise, false.
+          /// </returns>
+          virtual bool Contains(KeyValuePair<TKey,TValue> keyValuePair); 
+
+          /// <summary>
+          /// Removes all items from the ICollection<T>.
+          /// remove all entries in the region.	
+          /// </summary>
+          /// For local region instance - remove all entries in the local region.
+          /// For distributed region instance - remove all entries in the local region, 
+	      /// and propagate the operation to server.
+          virtual void Clear();
+
+          /// <summary>
+          /// Copies the elements of the ICollection to an Array, starting at a particular Array index.
+          /// This operation copies entries from local region only.
+          /// </summary>
+          /// <param name="toArray">
+          /// The one-dimensional Array that is the destination of the elements copied from ICollection. 
+          /// The Array must have zero-based indexing.
+          /// </param>
+          /// <param name="startIdx">
+          /// The zero-based index in array at which copying begins.
+          /// </param>
+          /// <exception cref="ArgumentNullException">
+          /// if toArray is a null reference
+          /// </exception>
+          /// <exception cref="ArgumentOutOfRangeException">
+          /// if startIdx is less than 0.
+          /// </exception>
+          /// <exception cref="ArgumentException">
+          /// if toArray is multidimensional or The number of elements in the source ICollection is greater than 
+          /// the available space from startIdx to the end of the destination array or startIdx is equal to 
+          /// or greater than the length of array.
+          /// </exception>
+          virtual void CopyTo(array<KeyValuePair<TKey,TValue>>^ toArray, int startIdx);
+          
+          /// <summary>
+          /// Removes a key and value from the dictionary.          
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Remove removes not only the value, but also the key and entry
+          /// from this region.
+          /// </para>
+          /// <para>
+          /// The Remove is propogated to the Geode cache server to which it is connected with.
+          /// </para>
+          /// <para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// <para>
+          /// The comparison of the value of the key value pair depends on the Equals function of the TValue class.
+          /// If the Equals function is not overriden in the TValue class the behavior of this function is undefined. Hence, this 
+          /// function won't work properly for the .NET types that uses the default implementation of the Equals method, for 
+          /// e.g. arrays.
+          /// </para>
+          /// </remarks>
+          /// <param name="keyValuePair">The KeyValuePair structure representing 
+          /// the key and value to remove from the Dictionary.</param>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>
+          /// <returns>true if the key and value represented by keyValuePair is successfully found and removed;
+          /// otherwise, false. This method returns false if keyValuePair is not found in the ICollection.</returns> 
+          /// <returns>true if entry with key and its value are removed otherwise false.</returns>
+          /// <seealso cref="Invalidate" />
+          /// <seealso cref="ICacheListener.AfterDestroy" />
+          /// <seealso cref="ICacheWriter.BeforeDestroy" />
+          virtual bool Remove(KeyValuePair<TKey,TValue> keyValuePair);
+
+          /// <summary>
+          /// Removes the entry with the specified key and value, passing the callback
+          /// argument to any cache writers that are invoked in the operation.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Remove removes not only the value, but also the key and entry
+          /// from this region.
+          /// </para>
+          /// <para>
+          /// The Remove is propogated to the Geode cache server to which it is connected with.
+          /// </para>
+          /// <para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">the key of the entry to Remove</param>
+          /// <param name="value">the value of the entry to Remove</param>
+          /// <param name="callbackArg"> the callback for user to pass in, It can also be null</param>.
+          /// <exception cref="IllegalArgumentException">if key is null</exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>
+          /// <returns>true if entry with key and its value are removed otherwise false.</returns>
+          /// <seealso cref="Invalidate" />
+          /// <seealso cref="ICacheListener.AfterDestroy" />
+          /// <seealso cref="ICacheWriter.BeforeDestroy" />
+          virtual bool Remove(TKey key, TValue value, Object^ callbackArg );
+
+          /// <summary>
+          /// Gets the number of elements contained in the ICollection<T>.
+          /// Get the size of region. For native client regions, this will give
+          /// the number of entries in the local cache and not on the servers.
+          /// </summary>
+          /// <returns>number of entries in the region</returns>
+          virtual property int Count
+          {
+            int get();
+          }
+
+          /// <summary>
+          /// This property throws NotImplementedException when called by 
+          /// both local and distributed region instances.
+          /// </summary>
+          virtual property bool IsReadOnly
+          {
+            bool get();
+          }
+                   
+          /// <summary>
+          /// Gets an ICollection containing the keys of the IDictionary
+          /// Returns all the keys for this region. This includes
+          /// keys for which the entry is invalid.
+          /// For local region instance - gets collection of keys from local cache only.
+          /// For distributed region instance - gets collection of keys from the Geode cache server.
+          /// </summary>
+          /// <returns>collection of keys</returns>
+          /// <remark>
+          /// The order of the keys in the returned ICollection is unspecified, 
+          /// but it is guaranteed to be the same order as the corresponding values in the ICollection
+          /// returned by the Values property.
+          /// </remark>
+          /// <exception cref="UnsupportedOperationException">
+          /// if the member type is not <c>Client</c>
+          /// or region is not a Native Client region.
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="MessageException">
+          /// If the message received from server could not be handled. This will
+          /// be the case when an unregistered typeId is received in the reply or
+          /// reply is not well formed. More information can be found in the log.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if there is a timeout getting the keys
+          /// </exception>
+          virtual property System::Collections::Generic::ICollection<TKey>^ Keys
+          {
+            System::Collections::Generic::ICollection<TKey>^ get() ;
+          }
+
+          /// <summary>
+          /// Gets an ICollection containing the values in the IDictionary. 
+          /// Returns all values in the local process for this region. No value is included
+          /// for entries that are invalidated.
+          /// For both local & distributed region instances, this operation is always local only.
+          /// </summary>
+          /// <returns>collection of values</returns>
+          /// <remark>
+          /// The order of the values in the returned ICollection is unspecified, 
+          /// but it is guaranteed to be the same order as the corresponding keys in the ICollection 
+          /// returned by the Keys property.
+          /// </remark>
+          virtual property System::Collections::Generic::ICollection<TValue>^ Values
+          {
+            System::Collections::Generic::ICollection<TValue>^ get() ;
+          }
+  
+          /// <summary>
+          /// Puts a new value into an entry in this region with the specified key,
+          /// passing the callback argument to any cache writers and cache listeners
+          /// that are invoked in the operation.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// If there is already an entry associated with the specified key in
+          /// this region, the entry's previous value is overwritten.
+          /// The new put value is propogated to the java server to which it is connected with.
+          /// Put is intended for very simple caching situations. In general
+          /// it is better to create a <c>ICacheLoader</c> object and allow the
+          /// cache to manage the creation and loading of objects.
+          /// For local region instance - Puts a new value into an entry in this region in the local cache only.
+          /// For distributed region instance - Puts a new value into an entry in this region
+          /// and this operation is propogated to the Geode cache server to which it is connected with.
+          /// </para><para>
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" /> and
+          /// <see cref="CacheStatistics.LastModifiedTime" /> for this region and the entry.
+          /// </para><para>
+          /// If remote server put fails throwing back a <c>CacheServerException</c>
+          /// or security exception, then local put is tried to rollback. However,
+          /// if the entry has overflowed/evicted/expired then the rollback is
+          /// aborted since it may be due to a more recent notification or update
+          /// by another thread.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">
+          /// a key object associated with the value to be put into this region.
+          /// </param>
+          /// <param name="value">the value to be put into this region</param>
+          /// <param name="callbackArg">
+          /// argument that is passed to the callback functions
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="CacheWriterException">
+          /// if CacheWriter aborts the operation
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if  there is not enough memory for the value
+          /// </exception>
+          /// <seealso cref="Get" />
+          /// <seealso cref="Add" />
+          void Put(TKey key, TValue value, Object^ callbackArg);
+
+          /// <summary>
+          /// Returns the value for the given key, passing the callback argument
+          /// to any cache loaders or that are invoked in the operation.
+          /// </summary>
+          /// <remarks>
+          /// <para>          
+          /// For local region instance - returns the value with the specified key from the local cache only.
+          /// For distributed region instance - If the value is not present locally then it is requested from
+          /// the java server. If even that is unsuccessful then a local CacheLoader will be invoked
+          /// if there is one.
+          /// </para>
+          /// <para>
+          /// The value returned by get is not copied, so multi-threaded applications
+          /// should not modify the value directly, but should use the update methods.
+          /// </para><para>
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" />
+          /// <see cref="CacheStatistics.HitCount" />, <see cref="CacheStatistics.MissCount" />,
+          /// and <see cref="CacheStatistics.LastModifiedTime" /> (if a new value is loaded)
+          /// for this region and the entry.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">
+          /// key whose associated value is to be returned -- the key
+          /// object must implement the Equals and GetHashCode methods.
+          /// </param>
+          /// <param name="callbackArg">
+          /// An argument passed into the CacheLoader if loader is used.
+          /// Has to be Serializable (i.e. implement <c>IGeodeSerializable</c>);
+          /// can be null.
+          /// </param>
+          /// <returns>
+          /// value, or null if the value is not found and can't be loaded
+          /// </returns>
+          /// <exception cref="IllegalArgumentException">
+          /// if key is null
+          /// </exception>
+          /// <exception cref="CacheLoaderException">
+          /// if CacheLoader throws an exception
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="MessageException">
+          /// If the message received from server could not be handled. This will
+          /// be the case when an unregistered typeId is received in the reply or
+          /// reply is not well formed. More information can be found in the log.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>
+          /// <seealso cref="Put" />
+          TValue Get(TKey key, Object^ callbackArg);
+
+          /// <summary>
+          /// Invalidates this region.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// The invalidation will cascade to all the subregions and cached
+          /// entries. The region
+          /// and the entries in it will still exist.
+          /// For local region instance - invalidates this region without distributing to other caches.
+          /// For distributed region instance - Invalidates this region and this 
+          /// operation is propogated to the Geode cache server to which it is connected with.
+          /// </para>          
+          /// <para>
+          /// To remove all the
+          /// entries and the region, use <see cref="DestroyRegion" />.
+          /// </para><para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception; if this occurs some
+          /// subregions may have already been successfully invalidated
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>          
+          /// <seealso cref="DestroyRegion" />
+          /// <seealso cref="ICacheListener.AfterRegionInvalidate" />
+          void InvalidateRegion();
+
+          /// <summary>
+          /// Invalidates this region.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// The invalidation will cascade to all the subregions and cached
+          /// entries. The region
+          /// and the entries in it will still exist.
+          /// For local region instance - invalidates this region without distributing to other caches.
+          /// For distributed region instance - Invalidates this region and this 
+          /// operation is propogated to the Geode cache server to which it is connected with.
+          /// </para>
+          /// <para>
+          /// To remove all the
+          /// entries and the region, use <see cref="DestroyRegion" />.
+          /// </para><para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <param name="callbackArg">
+          /// user-defined parameter to pass to callback events triggered by this method
+          /// </param>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if this region has been destroyed
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception; if this occurs some
+          /// subregions may have already been successfully invalidated
+          /// </exception>
+          /// <seealso cref="DestroyRegion" />
+          /// <seealso cref="ICacheListener.AfterRegionInvalidate" />
+          void InvalidateRegion(Object^ callbackArg);
+
+          /// <summary>
+          /// Destroys the whole distributed region and provides a user-defined parameter
+          /// object to any <c>ICacheWriter</c> invoked in the process.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Destroy cascades to all entries and subregions. After the destroy,
+          /// this region object can not be used any more. Any attempt to use
+          /// this region object will get a <c>RegionDestroyedException</c>
+          /// The region destroy not only destroys the local region but also destroys the
+          /// server region.
+          /// For local region instance - destroys the whole local region only
+          /// For distributed region instance - destroys the whole local region and this
+          /// operation is also propogated to the Geode cache server to which it is connected with.
+          /// </para><para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <exception cref="CacheWriterException">
+          /// if a CacheWriter aborts the operation; if this occurs some
+          /// subregions may have already been successfully destroyed.
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception; if this occurs some
+          /// subregions may have already been successfully invalidated
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <seealso cref="InvalidateRegion" />
+          void DestroyRegion();
+
+          /// <summary>
+          /// Destroys the whole distributed region and provides a user-defined parameter
+          /// object to any <c>ICacheWriter</c> invoked in the process.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Destroy cascades to all entries and subregions. After the destroy,
+          /// this region object can not be used any more. Any attempt to use
+          /// this region object will get a <c>RegionDestroyedException</c>
+          /// The region destroy not only destroys the local region but also destroys the
+          /// server region.
+          /// For local region instance - destroys the whole local region only
+          /// For distributed region instance - destroys the whole local region and this
+          /// operation is also propogated to the Geode cache server to which it is connected with.
+          /// </para><para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <param name="callbackArg">
+          /// a user-defined parameter to pass to callback events triggered by this call
+          /// </param>
+          /// <exception cref="CacheWriterException">
+          /// if a CacheWriter aborts the operation; if this occurs some
+          /// subregions may have already been successfully destroyed.
+          /// </exception>
+          /// <exception cref="CacheListenerException">
+          /// if CacheListener throws an exception; if this occurs some
+          /// subregions may have already been successfully invalidated
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <seealso cref="InvalidateRegion" />
+          void DestroyRegion(Object^ callbackArg);
+
+          /// <summary>
+          /// Invalidates the entry with the specified key,
+          /// passing the callback argument
+          /// to any cache
+          /// listeners that are invoked in the operation.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Invalidate only removes the value from the entry -- the key is kept intact.
+          /// To completely remove the entry, call <see cref="Destroy" />.
+          /// </para>
+          /// <para>
+          /// For both local & distributed region instaces, invalidate is not propogated to the 
+          /// Geode cache server to which it is connected with.
+          /// </para>
+          /// <para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">key of the value to be invalidated</param>
+          /// <exception cref="IllegalArgumentException">if key is null</exception>
+          /// <exception cref="EntryNotFoundException">
+          /// if this entry does not exist in this region locally
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if the region is destroyed
+          /// </exception>
+          /// <seealso cref="Destroy" />
+          /// <seealso cref="ICacheListener.AfterInvalidate" />
+          void Invalidate(TKey key);
+
+          /// <summary>
+          /// Invalidates the entry with the specified key,
+          /// passing the callback argument
+          /// to any cache
+          /// listeners that are invoked in the operation.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// Invalidate only removes the value from the entry -- the key is kept intact.
+          /// To completely remove the entry, call <see cref="Destroy" />.
+          /// </para>
+          /// <para>
+          /// For both local & distributed region instaces, invalidate is not propogated to the 
+          /// Geode cache server to which it is connected with.
+          /// </para>
+          /// <para>
+          /// Does not update any <c>CacheStatistics</c>.
+          /// </para>
+          /// </remarks>
+          /// <param name="key">key of the value to be invalidated</param>
+          /// <param name="callbackArg">
+          /// a user-defined parameter to pass to callback events triggered by this method
+          /// </param>
+          /// <exception cref="IllegalArgumentException">if key is null</exception>
+          /// <exception cref="EntryNotFoundException">
+          /// if this entry does not exist in this region locally
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if the region is destroyed
+          /// </exception>
+          /// <seealso cref="Destroy" />
+          /// <seealso cref="ICacheListener.AfterInvalidate" />
+          void Invalidate(TKey key, Object^ callbackArg);
+
+          /// <summary>
+          /// Puts a (IDictionary) generic collection of key/value pairs in this region.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// If there is already an entry associated with any key in the map in
+          /// this region, the entry's previous value is overwritten.
+          /// The new values are propogated to the java server to which it is connected with.
+          /// PutAll is intended for speed up large amount of put operation into
+          /// the same region.
+          /// For local region instance - this method is not applicable.
+          /// </para>
+          /// </remarks>
+          /// <param name="map">
+          /// A map contains entries, i.e. (key, value) pairs. It is generic collection of key/value pairs.
+          /// Value should not be null in any of the entries.
+          /// </param>
+          /// <exception cref="NullPointerException">
+          /// if any value in the map is null
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if  there is not enough memory for the value
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Put" />
+          void PutAll(IDictionary<TKey, TValue>^ map);
+
+          /// <summary>
+          /// Puts a (IDictionary) generic collection of key/value pairs in this region.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// If there is already an entry associated with any key in the map in
+          /// this region, the entry's previous value is overwritten.
+          /// The new values are propogated to the java server to which it is connected with.
+          /// PutAll is intended for speed up large amount of put operation into
+          /// the same region.
+          /// For local region instance - this method is not applicable.
+          /// </para>
+          /// </remarks>
+          /// <param name="map">
+          /// A map contains entries, i.e. (key, value) pairs. It is generic collection of key/value pairs.
+          /// Value should not be null in any of the entries.
+          /// </param>
+          /// <param name="timeout">The time (in seconds) to wait for the PutAll
+          /// response. It should be less than or equal to 2^31/1000 i.e. 2147483.
+          /// Optional.
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// If timeout is more than 2^31/1000 i.e. 2147483.
+          /// </exception>
+          /// <exception cref="NullPointerException">
+          /// if any value in the map is null
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if  there is not enough memory for the value
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Put" />
+          void PutAll(IDictionary<TKey, TValue>^ map, int timeout);
+
+          /// <summary>
+          /// Puts a (IDictionary) generic collection of key/value pairs in this region.
+          /// </summary>
+          /// <remarks>
+          /// <para>
+          /// If there is already an entry associated with any key in the map in
+          /// this region, the entry's previous value is overwritten.
+          /// The new values are propogated to the java server to which it is connected with.
+          /// PutAll is intended for speed up large amount of put operation into
+          /// the same region.
+          /// For local region instance - this method is not applicable.
+          /// </para>
+          /// </remarks>
+          /// <param name="map">
+          /// A map contains entries, i.e. (key, value) pairs. It is generic collection of key/value pairs.
+          /// Value should not be null in any of the entries.
+          /// </param>
+          /// <param name="timeout">The time (in seconds) to wait for the PutAll
+          /// response. It should be less than or equal to 2^31/1000 i.e. 2147483.
+          /// Optional.
+          /// </param>
+          /// <param name="callbackArg">
+          /// a user-defined parameter to pass to callback events triggered by this method
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// If timeout is more than 2^31/1000 i.e. 2147483.
+          /// </exception>
+          /// <exception cref="NullPointerException">
+          /// if any value in the map is null
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// if region has been destroyed
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server.
+          /// Only for Native Client regions.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if not connected to the Geode system because the client cannot
+          /// establish usable connections to any of the servers given to it.
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if the operation timed out
+          /// </exception>
+          /// <exception cref="OutOfMemoryException">
+          /// if  there is not enough memory for the value
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Put" />
+          void PutAll(IDictionary<TKey, TValue>^ map, int timeout, Object^ callbackArg);
+
+          /// <summary>
+          /// Removes all of the entries for the specified keys from this region.
+          /// The effect of this call is equivalent to that of calling {@link #destroy(Object)} on
+          /// this region once for each key in the specified collection.
+          /// If an entry does not exist that key is skipped; 
+          /// EntryNotFoundException is not thrown.
+          /// For local region instance - this method is not applicable.
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" />
+          /// and <see cref="CacheStatistics.HitCount" /> and
+          /// <see cref="CacheStatistics.MissCount" /> for this region and the entry.
+          /// </summary>
+          /// <param name="keys">the collection of keys</param>
+          /// <exception cref="IllegalArgumentException">
+          /// If the collection of keys is null or empty. 
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server while
+          /// processing the request.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if region is not connected to the cache because the client
+          /// cannot establish usable connections to any of the given servers
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// If region destroy is pending.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if operation timed out.
+          /// </exception>
+          /// <exception cref="UnknownException">
+          /// For other exceptions.
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Get"/>
+          void RemoveAll(System::Collections::Generic::ICollection<TKey>^ keys);
+
+          /// <summary>
+          /// Removes all of the entries for the specified keys from this region.
+          /// The effect of this call is equivalent to that of calling {@link #remove(Object)} on
+          /// this region once for each key in the specified collection.
+          /// If an entry does not exist that key is skipped; 
+          /// EntryNotFoundException is not thrown.
+          /// For local region instance - this method is not applicable.
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" />
+          /// and <see cref="CacheStatistics.HitCount" /> and
+          /// <see cref="CacheStatistics.MissCount" /> for this region and the entry.
+          /// </summary>
+          /// <param name="keys">the collection of keys</param>
+          /// <param name="callbackArg">an argument that is passed to the callback functions.
+          /// Optional.
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// If the collection of keys is null or empty. 
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server while
+          /// processing the request.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if region is not connected to the cache because the client
+          /// cannot establish usable connections to any of the given servers
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// If region destroy is pending.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if operation timed out.
+          /// </exception>
+          /// <exception cref="UnknownException">
+          /// For other exceptions.
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Remove"/>
+          void RemoveAll(System::Collections::Generic::ICollection<TKey>^ keys, Object^ callbackArg);
+
+          /// <summary>
+          /// Gets values for collection of keys from the local cache or server.
+          /// If value for a key is not present locally then it is requested from the
+          /// java server. The value returned is not copied, so multi-threaded
+          /// applications should not modify the value directly,
+          /// but should use the update methods.
+          /// For local region instance - this method is not applicable.
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" />
+          /// and <see cref="CacheStatistics.HitCount" /> and
+          /// <see cref="CacheStatistics.MissCount" /> for this region and the entry.
+          /// </summary>
+          /// <param name="keys">the collection of keys</param>
+          /// <param name="values">
+          /// output parameter that provides the map of keys to
+          /// respective values; when this is NULL then an
+          /// <c>IllegalArgumentException</c> is thrown.
+          /// </param>
+          /// <param name="exceptions">
+          /// output parameter that provides the map of keys
+          /// to any exceptions while obtaining the key; ignored if this is NULL
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// If the collection of keys is null or empty,
+          /// or <c>values</c> argument is null.
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server while
+          /// processing the request.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if region is not connected to the cache because the client
+          /// cannot establish usable connections to any of the given servers
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// If region destroy is pending.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if operation timed out.
+          /// </exception>
+          /// <exception cref="UnknownException">
+          /// For other exceptions.
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Get"/>
+          void GetAll(System::Collections::Generic::ICollection<TKey>^ keys, 
+            System::Collections::Generic::IDictionary<TKey, TValue>^ values, 
+            System::Collections::Generic::IDictionary<TKey, System::Exception^>^ exceptions);
+
+          /// <summary>
+          /// Gets values for collection of keys from the local cache or server.
+          /// If value for a key is not present locally then it is requested from the
+          /// java server. The value returned is not copied, so multi-threaded
+          /// applications should not modify the value directly,
+          /// but should use the update methods.
+          /// For local region instance - this method is not applicable.
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" />
+          /// and <see cref="CacheStatistics.HitCount" /> and
+          /// <see cref="CacheStatistics.MissCount" /> for this region and the entry.
+          /// </summary>
+          /// <param name="keys">the collection of keys</param>
+          /// <param name="values">
+          /// output parameter that provides the map of keys to
+          /// respective values; ignored if NULL; when this is NULL then at least
+          /// the <c>addToLocalCache</c> parameter should be true and caching
+          /// should be enabled for the region to get values into the region
+          /// otherwise an <c>IllegalArgumentException</c> is thrown.
+          /// </param>
+          /// <param name="exceptions">
+          /// output parameter that provides the map of keys
+          /// to any exceptions while obtaining the key; ignored if this is NULL
+          /// </param>
+          /// <param name="addToLocalCache">
+          /// true if the obtained values have also to be added to the local cache
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// If the collection of keys is null or empty. Other invalid case is when
+          /// the <c>values</c> parameter is NULL, and either
+          /// <c>addToLocalCache</c> is false or caching is disabled
+          /// for this region.
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server while
+          /// processing the request.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if region is not connected to the cache because the client
+          /// cannot establish usable connections to any of the given servers
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// If region destroy is pending.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if operation timed out.
+          /// </exception>
+          /// <exception cref="UnknownException">
+          /// For other exceptions.
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Get"/>
+          void GetAll(System::Collections::Generic::ICollection<TKey>^ keys, 
+            System::Collections::Generic::IDictionary<TKey, TValue>^ values, 
+            System::Collections::Generic::IDictionary<TKey, System::Exception^>^ exceptions,
+            bool addToLocalCache);
+
+          /// <summary>
+          /// Gets values for collection of keys from the local cache or server.
+          /// If value for a key is not present locally then it is requested from the
+          /// java server. The value returned is not copied, so multi-threaded
+          /// applications should not modify the value directly,
+          /// but should use the update methods.
+          /// For local region instance - this method is not applicable.
+          /// Updates the <see cref="CacheStatistics.LastAccessedTime" />
+          /// and <see cref="CacheStatistics.HitCount" /> and
+          /// <see cref="CacheStatistics.MissCount" /> for this region and the entry.
+          /// </summary>
+          /// <param name="keys">the collection of keys</param>
+          /// <param name="values">
+          /// output parameter that provides the map of keys to
+          /// respective values; ignored if NULL; when this is NULL then at least
+          /// the <c>addToLocalCache</c> parameter should be true and caching
+          /// should be enabled for the region to get values into the region
+          /// otherwise an <c>IllegalArgumentException</c> is thrown.
+          /// </param>
+          /// <param name="exceptions">
+          /// output parameter that provides the map of keys
+          /// to any exceptions while obtaining the key; ignored if this is NULL
+          /// </param>
+          /// <param name="addToLocalCache">
+          /// true if the obtained values have also to be added to the local cache
+          /// </param>
+          /// <param name="callbackArg">
+          /// a user-defined parameter to pass to callback events triggered by this method
+          /// </param>
+          /// <exception cref="IllegalArgumentException">
+          /// If the collection of keys is null or empty. Other invalid case is when
+          /// the <c>values</c> parameter is NULL, and either
+          /// <c>addToLocalCache</c> is false or caching is disabled
+          /// for this region.
+          /// </exception>
+          /// <exception cref="CacheServerException">
+          /// If an exception is received from the Java cache server while
+          /// processing the request.
+          /// </exception>
+          /// <exception cref="NotConnectedException">
+          /// if region is not connected to the cache because the client
+          /// cannot establish usable connections to any of the given servers
+          /// For pools configured with locators, if no locators are available, innerException
+          /// of NotConnectedException is set to NoAvailableLocatorsException.
+          /// </exception>
+          /// <exception cref="RegionDestroyedException">
+          /// If region destroy is pending.
+          /// </exception>
+          /// <exception cref="TimeoutException">
+          /// if operation timed out.
+          /// </exception>
+          /// <exception cref="UnknownException">
+          /// For other exceptions.
+          /// </exception>
+          /// <exception cref="NotSupportedException">
+          /// if it is called by local region instance <see cref="Region.GetLocalView" />
+          /// </exception>
+          /// <seealso cref="Get"/>
+          void GetAll(System::Collections::Generic::ICollection<TKey>^ keys, 
+            System::Collections::Generic::IDictionary<TKey, TValue>^ values, 
+            System::Collections::Generic::IDictionary<TKey, System::Exception^>^ exceptions,
+            bool addToLocalCache, Object^ callbackArg);
+
+          /// <summary>
+          /// Gets the region name.
+          /// </summary>
+          /// <returns>
+          /// region's name
+          /// </returns>
+          property String^ Name
+          { 
+            String^ get();
+          } 
+
+          /// <summary>
+          /// Gets the region's full path, which can be used to get this region object
+          /// with <see cref="Cache.GetRegion" />.
+          /// </summary>
+          /// <returns>
+          /// region's pathname
+          /// </returns>
+          property String^ FullPath
+          {
+            String^ get();
+          }
+
+          /// <summary>
+          /// Gets the parent region.
+          /// </summary>
+          /// <returns>
+          /// region's parent, if any, or null if this is a root region
+          /// </returns>
+          /// <exception cref="RegionDestroyedException">
+          /// if the region has been destroyed
+          /// </exception>
+          property IRegion<TKey, TValue>^ ParentRegion
+          {
+            IRegion<TKey, TValue>^ get();
+          }
+
+          /// <summary>
+          /// Returns the attributes for this region, which can be used to create a new
+          /// region with <see cref="Cache.CreateRegion" />.
+          /// </summary>
+          /// <returns>
+          /// region's attributes
+          /// </returns>
+          property RegionAttributes<TKey, TValue>^ Attributes 
+          {
+            RegionAttributes<TKey, TValue>^ get();
+          }
+          
+          /// <summary>
+          /// Return a mutator object for changing a subset of the
+          /// region attributes.
+          /// </summary>
+          /// <returns>
+          /// attribute mutator
+          /// </returns>
+          /// <exception cref="RegionDestroyedException">
+          /// if the region has been destroyed
+          /// </exception>
+          property AttributesMutator<TKey, TValue>^ AttributesMutator
+          {
+            Apache::Geode::Client::AttributesMutator<TKey, TValue>^ get();
+          }
+
+          /// <summary>
+          /// Returns the statistics for this region.
+          /// </summary>
+          /// <returns>the <c>CacheStatistics</c> for this region</returns>
+          /// <exception cref="StatisticsDisabledException">
+          /// if statistics have been disabled for this region
+          /// </exception>
+          property CacheStatistics^ Statistics 
+          {
+            CacheStatistics^ get();
+          }
+
+          /// <summary>
+          /// Returns the subregion identified by the path, null if no such subregion.
+          /// </summary>
+          /// <param name="path">path</param>
+          /// <returns>subregion, or null if none</returns>
+          /// <seealso cref="FullPath" />
+          /// <seealso cref="SubRegions" />
+          /// <seealso cref="ParentRegion" />
+          IRegion<TKey, TValue>^ GetSubRegion( String^ path );
+          
+          /// <summary>
+          /// Creates a subregion with the given name and attributes.
+          /// </summary>
+          /// <param name="subRegionName">new subregion name</param>
+          /// <param name="attributes">subregion attributes</param>
+          /// <returns>new subregion</returns>
+          /// <seealso cref="CreateServerSubRegion" />
+          IRegion<TKey, TValue>^ CreateSubRegion( String^ subRegionName, RegionAttributes<TKey, TValue>^ attributes );
+          
+          /// <summary>
+          /// Returns the subregions of this region.
+          /// </summary>
+          /// <param name="recursive">if true, also return all nested subregions</param>
+          /// <returns>collection of regions</returns>
+          /// <exception cref="RegionDestroyedException">
+          /// this region has already been destroyed
+          /// </exception>
+          System::Collections::Generic::ICollection<IRegion<TKey, TValue>^>^ SubRegions( bool recursive );
+
+          /// <summary>
+          /// Return the meta-object RegionEntry for the given key.
+          /// For both local & distributed region instances, this operation happens in local cache only

<TRUNCATED>