You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mm...@apache.org on 2021/10/05 01:39:47 UTC

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

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 <mm...@pivotal.io>
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, TValue>(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>(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<TVal> : Region
+  //  {
+  //    // private Region regionBase_;
+  //    internal GenericRegion<TVal>(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<TVal>
+  {
+    Region region_;
+    internal Region(RegionFactory regionFactory, string regionName)
+    {
+      region_ = regionFactory.CreateRegion(regionName);
+    }
+
+    public TVal Get<TKey>(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);
+      }
+    }
+  }
 }