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