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 <[email protected]> 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); + } + } + } }
