csharp: Move string marshalers into own files

Preparing for future refactor
This commit is contained in:
Lauro Moura 2019-12-06 17:24:36 -03:00
parent 3359e03500
commit 52da69510f
3 changed files with 93 additions and 82 deletions

View File

@ -0,0 +1,90 @@
using System;
using System.Runtime.InteropServices;
namespace Efl
{
namespace Eo
{
class StringPassOwnershipMarshaler : ICustomMarshaler
{
public object MarshalNativeToManaged(IntPtr pNativeData)
{
var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
Eina.MemoryNative.Free(pNativeData);
return ret;
}
public IntPtr MarshalManagedToNative(object managedObj)
{
return Eina.MemoryNative.StrDup((string)managedObj);
}
public void CleanUpNativeData(IntPtr pNativeData)
{
// No need to cleanup. C will take care of it.
}
public void CleanUpManagedData(object managedObj)
{
}
public int GetNativeDataSize()
{
return -1;
}
internal static ICustomMarshaler GetInstance(string cookie)
{
if (marshaler == null)
{
marshaler = new StringPassOwnershipMarshaler();
}
return marshaler;
}
static private StringPassOwnershipMarshaler marshaler;
}
class StringKeepOwnershipMarshaler: ICustomMarshaler
{
public object MarshalNativeToManaged(IntPtr pNativeData)
{
return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
}
public IntPtr MarshalManagedToNative(object managedObj)
{
return Eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj);
}
public void CleanUpNativeData(IntPtr pNativeData)
{
// No need to free. The Native side will keep the ownership.
}
public void CleanUpManagedData(object managedObj)
{
}
public int GetNativeDataSize()
{
return -1;
}
internal static ICustomMarshaler GetInstance(string cookie)
{
if (marshaler == null)
{
marshaler = new StringKeepOwnershipMarshaler();
}
return marshaler;
}
static private StringKeepOwnershipMarshaler marshaler;
}
}
}

View File

@ -1242,86 +1242,6 @@ class MarshalEflClass : ICustomMarshaler
}
}
class StringPassOwnershipMarshaler : ICustomMarshaler
{
public object MarshalNativeToManaged(IntPtr pNativeData)
{
var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
Eina.MemoryNative.Free(pNativeData);
return ret;
}
public IntPtr MarshalManagedToNative(object managedObj)
{
return Eina.MemoryNative.StrDup((string)managedObj);
}
public void CleanUpNativeData(IntPtr pNativeData)
{
// No need to cleanup. C will take care of it.
}
public void CleanUpManagedData(object managedObj)
{
}
public int GetNativeDataSize()
{
return -1;
}
internal static ICustomMarshaler GetInstance(string cookie)
{
if (marshaler == null)
{
marshaler = new StringPassOwnershipMarshaler();
}
return marshaler;
}
static private StringPassOwnershipMarshaler marshaler;
}
class StringKeepOwnershipMarshaler: ICustomMarshaler
{
public object MarshalNativeToManaged(IntPtr pNativeData)
{
return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
}
public IntPtr MarshalManagedToNative(object managedObj)
{
return Eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj);
}
public void CleanUpNativeData(IntPtr pNativeData)
{
// No need to free. The Native side will keep the ownership.
}
public void CleanUpManagedData(object managedObj)
{
}
public int GetNativeDataSize()
{
return -1;
}
internal static ICustomMarshaler GetInstance(string cookie)
{
if (marshaler == null)
{
marshaler = new StringKeepOwnershipMarshaler();
}
return marshaler;
}
static private StringKeepOwnershipMarshaler marshaler;
}
class StringsharePassOwnershipMarshaler : ICustomMarshaler
{
public object MarshalNativeToManaged(IntPtr pNativeData)

View File

@ -1,10 +1,11 @@
mono_files += files(
'iwrapper.cs',
'workaround.cs',
'EoWrapper.cs',
'FunctionWrapper.cs',
'NativeModule.cs',
'EoWrapper.cs',
'WrapperSupervisor.cs'
'StringMarshalers.cs',
'WrapperSupervisor.cs',
)
if host_machine.system() == 'windows'