forked from enlightenment/efl
csharp: Move string marshalers into own files
Preparing for future refactor
This commit is contained in:
parent
3359e03500
commit
52da69510f
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue