efl_mono: Fix eina_value_set.
authorLauro Moura <lauromoura@expertisesolutions.com.br>
Thu, 30 Nov 2017 20:49:35 +0000 (17:49 -0300)
committerLauro Moura <lauromoura@expertisesolutions.com.br>
Mon, 4 Dec 2017 18:47:52 +0000 (15:47 -0300)
Instead of messing around with varargs, create individual wrappers for
each type supported.

The va_list approach was getting problems with float/double on Windows.

src/bindings/mono/eina_mono/eina_value.cs
src/lib/efl_mono/efl_custom_exports_mono.c

index 4ded15b..1c9a78c 100644 (file)
@@ -46,51 +46,51 @@ static internal class UnsafeNativeMethods {
 
     [DllImport(efl.Libs.CustomExports, CharSet=CharSet.Ansi)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, string value);
+    internal static extern bool eina_value_set_wrapper_string(IntPtr handle, string value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, byte value);
+    internal static extern bool eina_value_set_wrapper_uchar(IntPtr handle, byte value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, sbyte value);
+    internal static extern bool eina_value_set_wrapper_char(IntPtr handle, sbyte value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, short value);
+    internal static extern bool eina_value_set_wrapper_short(IntPtr handle, short value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, ushort value);
+    internal static extern bool eina_value_set_wrapper_ushort(IntPtr handle, ushort value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, int value);
+    internal static extern bool eina_value_set_wrapper_int(IntPtr handle, int value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, uint value);
+    internal static extern bool eina_value_set_wrapper_uint(IntPtr handle, uint value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, long value);
+    internal static extern bool eina_value_set_wrapper_long(IntPtr handle, long value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, ulong value);
+    internal static extern bool eina_value_set_wrapper_ulong(IntPtr handle, ulong value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, float value);
+    internal static extern bool eina_value_set_wrapper_float(IntPtr handle, float value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, double value);
+    internal static extern bool eina_value_set_wrapper_double(IntPtr handle, double value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
-    internal static extern bool eina_value_set_wrapper(IntPtr handle, IntPtr value);
+    internal static extern bool eina_value_set_wrapper_ptr(IntPtr handle, IntPtr value);
 
     [DllImport(efl.Libs.CustomExports)]
     [return: MarshalAsAttribute(UnmanagedType.U1)]
@@ -908,7 +908,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_uchar(this.Handle, value);
     }
 
     public bool Set(sbyte value)
@@ -923,7 +923,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_char(this.Handle, value);
     }
 
     public bool Set(short value)
@@ -938,7 +938,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_short(this.Handle, value);
     }
 
     public bool Set(ushort value)
@@ -953,7 +953,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_ushort(this.Handle, value);
     }
 
     /// <summary>Stores the given uint value.</summary>
@@ -969,7 +969,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_uint(this.Handle, value);
     }
 
     /// <summary>Stores the given int value.</summary>
@@ -985,7 +985,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_int(this.Handle, value);
     }
 
     /// <summary>Stores the given ulong value.</summary>
@@ -1001,7 +1001,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_ulong(this.Handle, value);
     }
 
     /// <summary>Stores the given int value.</summary>
@@ -1017,7 +1017,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_long(this.Handle, value);
     }
 
     /// <summary>Stores the given int value.</summary>
@@ -1034,8 +1034,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
 
-        Console.WriteLine("Wrapper Set({0})", value);
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_float(this.Handle, value);
     }
 
     /// <summary>Stores the given int value.</summary>
@@ -1051,7 +1050,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
         if (!GetValueType().IsNumeric())
             throw (new ArgumentException(
                         "Trying to set numeric value on a non-numeric eina.Value"));
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_double(this.Handle, value);
     }
 
     /// <summary>Stores the given string value.</summary>
@@ -1068,7 +1067,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
             throw (new ArgumentException(
                         "Trying to set non-string value on a string eina.Value"));
         // No need to worry about ownership as eina_value_set will copy the passed string.
-        return eina_value_set_wrapper(this.Handle, value);
+        return eina_value_set_wrapper_string(this.Handle, value);
     }
 
     /// <summary>Stores the given value into this value. The target value must be an optional.</summary>
index 16b2977..ac38ac7 100644 (file)
@@ -323,14 +323,23 @@ EAPI size_t eina_value_sizeof()
    return sizeof(Eina_Value);
 }
 
-EAPI Eina_Bool eina_value_set_wrapper(Eina_Value *value, ...)
-{
-   va_list argp;
-   va_start(argp, value);
-   Eina_Bool ret = eina_value_vset(value, argp);
-   va_end(argp);
-   return ret;
-}
+#define EINA_SET_WRAPPER(N, T) EAPI Eina_Bool eina_value_set_wrapper_##N(Eina_Value *value, T new_value) \
+{ \
+    return eina_value_set(value, new_value); \
+}
+
+EINA_SET_WRAPPER(char, char)
+EINA_SET_WRAPPER(uchar, unsigned char)
+EINA_SET_WRAPPER(short, short)
+EINA_SET_WRAPPER(ushort, unsigned short)
+EINA_SET_WRAPPER(int, int)
+EINA_SET_WRAPPER(uint, unsigned int)
+EINA_SET_WRAPPER(long, long)
+EINA_SET_WRAPPER(ulong, unsigned long)
+EINA_SET_WRAPPER(float, float)
+EINA_SET_WRAPPER(double, double)
+EINA_SET_WRAPPER(string, const char *)
+EINA_SET_WRAPPER(ptr, void *)
 
 EAPI Eina_Bool eina_value_setup_wrapper(Eina_Value *value,
                                    const Eina_Value_Type *type)