summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLauro Moura <lauromoura@expertisesolutions.com.br>2019-11-26 00:02:48 -0300
committerLauro Moura <lauromoura@expertisesolutions.com.br>2019-11-26 00:02:48 -0300
commit9b3a725e60f8213ad7df39762646a53397fd8870 (patch)
tree9b5dc39afe1446e1b483a6ac065d28885f3b7d6f
parentae76c7059dc9fc76565f6b6c8cb23b606792e3a1 (diff)
downloadefl-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.hh11
-rw-r--r--src/bindings/mono/eo_mono/iwrapper.cs22
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>