diff options
author | Lauro Moura <lauromoura@expertisesolutions.com.br> | 2019-11-26 00:02:48 -0300 |
---|---|---|
committer | Lauro Moura <lauromoura@expertisesolutions.com.br> | 2019-11-26 00:02:48 -0300 |
commit | 9b3a725e60f8213ad7df39762646a53397fd8870 (patch) | |
tree | 9b5dc39afe1446e1b483a6ac065d28885f3b7d6f | |
parent | ae76c7059dc9fc76565f6b6c8cb23b606792e3a1 (diff) | |
download | efl-devs/lauromoura/remove_eina_mono.tar.gz |
csharp: Add code to update IList passed as @in variabledevs/lauromoura/remove_eina_mono
If the array was modified, we update the passed @in variable.
-rw-r--r-- | src/bin/eolian_mono/eolian/mono/parameter.hh | 11 | ||||
-rw-r--r-- | src/bindings/mono/eo_mono/iwrapper.cs | 22 |
2 files changed, 28 insertions, 5 deletions
diff --git a/src/bin/eolian_mono/eolian/mono/parameter.hh b/src/bin/eolian_mono/eolian/mono/parameter.hh index a36c55775c..d284c63147 100644 --- a/src/bin/eolian_mono/eolian/mono/parameter.hh +++ b/src/bin/eolian_mono/eolian/mono/parameter.hh @@ -1095,6 +1095,17 @@ struct convert_in_ptr_assign_generator string << " = " << in_variable_name(param.param_name) << ";\n" ).generate(sink, escape_keyword(param.param_name), context); } + else if (param_is_acceptable(param, "Eina_Array *", WANT_OWN, !WANT_OUT) + || param_is_acceptable(param, "Eina_Array *", !WANT_OWN, !WANT_OUT) + || param_is_acceptable(param, "const Eina_Array *", WANT_OWN, !WANT_OUT) + || param_is_acceptable(param, "const Eina_Array *", !WANT_OWN, !WANT_OUT) + ) + { + return as_generator( + lit("Efl.Eo.Globals.UpdateListFromNativeArray(") << escape_keyword(param.param_name) << ", " << in_variable_name(param.param_name) << ");\n" + ).generate(sink, attributes::unused, context); + } + return true; } diff --git a/src/bindings/mono/eo_mono/iwrapper.cs b/src/bindings/mono/eo_mono/iwrapper.cs index 8305ba5e99..a6864cbb63 100644 --- a/src/bindings/mono/eo_mono/iwrapper.cs +++ b/src/bindings/mono/eo_mono/iwrapper.cs @@ -853,12 +853,9 @@ public static class Globals if (nativeArray == IntPtr.Zero) throw new ArgumentException("nativeArray is null", nameof(nativeArray)); - uint count = Eina.ArrayNativeFunctions.eina_array_count_custom_export_mono(nativeArray); List<T> list = new List<T>(); - for (uint i = 0; i < count; i++) - { - list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ArrayNativeFunctions.eina_array_data_get_custom_export_mono(nativeArray, i))); - } + UpdateListFromNativeArray(list, nativeArray); + return list; } @@ -875,6 +872,21 @@ public static class Globals return nativeArray; } + internal static void UpdateListFromNativeArray<T>(IList<T> list, IntPtr nativeArray) + { + list.Clear(); + if (nativeArray == IntPtr.Zero) + { + return; + } + + uint count = Eina.ArrayNativeFunctions.eina_array_count_custom_export_mono(nativeArray); + for (uint i = 0; i < count; i++) + { + list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ArrayNativeFunctions.eina_array_data_get_custom_export_mono(nativeArray, i))); + } + } + } // Globals /// <summary> |