[geode-native] 01/03: WIP: Generic Put/Get

2021-10-04 Thread mmartell
This is an automated email from the ASF dual-hosted git repository.

mmartell pushed a commit to branch wip-bytearray-for-values
in repository https://gitbox.apache.org/repos/asf/geode-native.git

commit c9bb9106b42ab39b510b26be937c099f7b5d7949
Author: Mike Martell 
AuthorDate: Wed Sep 22 08:34:52 2021 -0700

WIP: Generic Put/Get
---
 netcore/NetCore/Region.cs | 70 +++
 1 file changed, 70 insertions(+)

diff --git a/netcore/NetCore/Region.cs b/netcore/NetCore/Region.cs
index 68d49a5..7b6e400 100644
--- a/netcore/NetCore/Region.cs
+++ b/netcore/NetCore/Region.cs
@@ -71,6 +71,43 @@ namespace Apache.Geode.Client {
   Marshal.FreeCoTaskMem(valuePtr);
 }
 
+public void Put(TKey key, TValue value)
+{
+  // This is a generic, so can't do any marshaling directly.
+  if (key.GetType() == typeof(string))
+  {
+var type = value.GetType();
+if (!type.IsSerializable)
+  throw new Exception("Error: Object is not Serializable.");
+//using (var _fs = new System.IO.MemoryStream())
+//{
+//  var _formatter = new BinaryFormatter();
+//  _formatter.Serialize(_fs, value);
+//  PutByteArray(key.ToString(), _fs.ToArray());
+//}
+if (value.GetType() == typeof(int)) {
+  //PutByteArray(key.ToString(), 
BitConverter.GetBytes(Convert.ToInt32(value)));
+  var byteArray = new byte[4];
+  Array.Copy(BitConverter.GetBytes(Convert.ToInt32(value)), byteArray, 
4);
+  PutByteArray(key.ToString(), byteArray);
+}
+
+  }
+  else {
+throw new NotImplementedException();
+  }
+}
+
+public int Get(TKey key)
+{
+  // This is a generic, so can't do any marshaling directly.
+  //if (key.GetType() == typeof(string))
+  {
+var value = GetByteArray(key.ToString());
+return BitConverter.ToInt32(value);
+  }
+}
+
 public string GetString(string key) {
   var keyPtr = Marshal.StringToCoTaskMemUTF8(key);
   var result =
@@ -111,4 +148,37 @@ namespace Apache.Geode.Client {
   _containedObject = IntPtr.Zero;
 }
   }
+
+  //  public class GenericRegion : Region
+  //  {
+  //// private Region regionBase_;
+  //internal GenericRegion(IntPtr regionFactory, string regionName) 
{}
+  //  //{
+  //  //  //regionBase_ = new Region(regionFactory, regionName);
+  //  //  var regionNamePtr = Marshal.StringToCoTaskMemUTF8(regionName);
+  //  //_containedObject = 
apache_geode_RegionFactory_CreateRegion(regionFactory, regionNamePtr);
+  //  //Marshal.FreeCoTaskMem(regionNamePtr);
+  //  //}
+
+  //}
+
+  public class Region
+  {
+Region region_;
+internal Region(RegionFactory regionFactory, string regionName)
+{
+  region_ = regionFactory.CreateRegion(regionName);
+}
+
+public TVal Get(TKey key)
+{
+  // This is a generic, so can't do any marshaling directly.
+  //if (key.GetType() == typeof(string))
+  {
+var value = region_.GetByteArray(key.ToString());
+return (TVal)Convert.ChangeType(value, typeof(TVal));
+//return BitConverter.ToInt32(value);
+  }
+}
+  }
 }


[geode-native] 01/03: WIP: Generic Put/Get

2021-09-22 Thread mmartell
This is an automated email from the ASF dual-hosted git repository.

mmartell pushed a commit to branch wip-bytearray-for-values
in repository https://gitbox.apache.org/repos/asf/geode-native.git

commit c9bb9106b42ab39b510b26be937c099f7b5d7949
Author: Mike Martell 
AuthorDate: Wed Sep 22 08:34:52 2021 -0700

WIP: Generic Put/Get
---
 netcore/NetCore/Region.cs | 70 +++
 1 file changed, 70 insertions(+)

diff --git a/netcore/NetCore/Region.cs b/netcore/NetCore/Region.cs
index 68d49a5..7b6e400 100644
--- a/netcore/NetCore/Region.cs
+++ b/netcore/NetCore/Region.cs
@@ -71,6 +71,43 @@ namespace Apache.Geode.Client {
   Marshal.FreeCoTaskMem(valuePtr);
 }
 
+public void Put(TKey key, TValue value)
+{
+  // This is a generic, so can't do any marshaling directly.
+  if (key.GetType() == typeof(string))
+  {
+var type = value.GetType();
+if (!type.IsSerializable)
+  throw new Exception("Error: Object is not Serializable.");
+//using (var _fs = new System.IO.MemoryStream())
+//{
+//  var _formatter = new BinaryFormatter();
+//  _formatter.Serialize(_fs, value);
+//  PutByteArray(key.ToString(), _fs.ToArray());
+//}
+if (value.GetType() == typeof(int)) {
+  //PutByteArray(key.ToString(), 
BitConverter.GetBytes(Convert.ToInt32(value)));
+  var byteArray = new byte[4];
+  Array.Copy(BitConverter.GetBytes(Convert.ToInt32(value)), byteArray, 
4);
+  PutByteArray(key.ToString(), byteArray);
+}
+
+  }
+  else {
+throw new NotImplementedException();
+  }
+}
+
+public int Get(TKey key)
+{
+  // This is a generic, so can't do any marshaling directly.
+  //if (key.GetType() == typeof(string))
+  {
+var value = GetByteArray(key.ToString());
+return BitConverter.ToInt32(value);
+  }
+}
+
 public string GetString(string key) {
   var keyPtr = Marshal.StringToCoTaskMemUTF8(key);
   var result =
@@ -111,4 +148,37 @@ namespace Apache.Geode.Client {
   _containedObject = IntPtr.Zero;
 }
   }
+
+  //  public class GenericRegion : Region
+  //  {
+  //// private Region regionBase_;
+  //internal GenericRegion(IntPtr regionFactory, string regionName) 
{}
+  //  //{
+  //  //  //regionBase_ = new Region(regionFactory, regionName);
+  //  //  var regionNamePtr = Marshal.StringToCoTaskMemUTF8(regionName);
+  //  //_containedObject = 
apache_geode_RegionFactory_CreateRegion(regionFactory, regionNamePtr);
+  //  //Marshal.FreeCoTaskMem(regionNamePtr);
+  //  //}
+
+  //}
+
+  public class Region
+  {
+Region region_;
+internal Region(RegionFactory regionFactory, string regionName)
+{
+  region_ = regionFactory.CreateRegion(regionName);
+}
+
+public TVal Get(TKey key)
+{
+  // This is a generic, so can't do any marshaling directly.
+  //if (key.GetType() == typeof(string))
+  {
+var value = region_.GetByteArray(key.ToString());
+return (TVal)Convert.ChangeType(value, typeof(TVal));
+//return BitConverter.ToInt32(value);
+  }
+}
+  }
 }