Browse Source

Merge pull request #324 from ddobrev/master

Replaced the usage of memcpy with a simple dereference assignment
pull/325/head
João Matos 12 years ago
parent
commit
db58c248de
  1. 3
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  2. 11
      tests/Basic/Basic.Tests.cs
  3. 6
      tests/Basic/Basic.cpp

3
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -1981,8 +1981,7 @@ namespace CppSharp.Generators.CSharp @@ -1981,8 +1981,7 @@ namespace CppSharp.Generators.CSharp
else
{
WriteLine("global::System.IntPtr ret = Marshal.AllocHGlobal({0});", @class.Layout.Size);
WriteLine("CppSharp.Runtime.Helpers.memcpy(ret, new IntPtr(&native), new UIntPtr({0}));",
@class.Layout.Size);
WriteLine("*({0}.Internal*) ret = native;", className);
WriteLine("return ret;");
}
WriteCloseBraceIndent();

11
tests/Basic/Basic.Tests.cs

@ -407,5 +407,16 @@ public class BasicTests : GeneratorTestFixture @@ -407,5 +407,16 @@ public class BasicTests : GeneratorTestFixture
var ret = basic.TestNullPtrTypeRet();
Assert.AreEqual(IntPtr.Zero, new IntPtr(ret));
}
[Test]
public void TestCtorByValue()
{
var bar = new Bar { A = 4, B = 5.5f };
var foo2 = new Foo2 { C = 4, valueTypeField = bar };
var result = foo2 << 2;
Assert.AreEqual(foo2.C << 2, result.C);
Assert.AreEqual(bar.A << 2, result.valueTypeField.A);
Assert.AreEqual(bar.B, result.valueTypeField.B);
}
}

6
tests/Basic/Basic.cpp

@ -25,14 +25,14 @@ Foo2 Foo2::operator<<(signed int i) @@ -25,14 +25,14 @@ Foo2 Foo2::operator<<(signed int i)
{
Foo2 foo;
foo.C = C << i;
foo.valueTypeField = valueTypeField;
foo.valueTypeField.A <<= i;
return foo;
}
Foo2 Foo2::operator<<(signed long l)
{
Foo2 foo;
foo.C = C << l;
return foo;
return *this << (signed int) l;
}
char Foo2::testCharMarshalling(char c)

Loading…
Cancel
Save