diff --git a/src/bindings/mono/eina_mono/eina_value.cs b/src/bindings/mono/eina_mono/eina_value.cs index be84e4adff..6fae14b022 100644 --- a/src/bindings/mono/eina_mono/eina_value.cs +++ b/src/bindings/mono/eina_mono/eina_value.cs @@ -792,6 +792,83 @@ public class Value : IDisposable, IComparable, IEquatable this.Ownership = Ownership.Managed; } + /// Type-specific constructor, for convenience. + public Value(byte x) : this(ValueType.Byte) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(sbyte x) : this(ValueType.SByte) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(short x) : this(ValueType.Short) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(ushort x) : this(ValueType.UShort) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(int x) : this(ValueType.Int32) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(uint x) : this(ValueType.UInt32) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(long x) : this(ValueType.Long) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(ulong x) : this(ValueType.ULong) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(float x) : this(ValueType.Float) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(double x) : this(ValueType.Double) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + + /// Type-specific constructor, for convenience. + public Value(string x) : this(ValueType.String) + { + if (!Set(x)) + throw new InvalidOperationException("Couldn't set value."); + } + /// Implicit conversion from managed value to native struct representation. public static implicit operator ValueNative(Value v) { diff --git a/src/tests/efl_mono/ValueEolian.cs b/src/tests/efl_mono/ValueEolian.cs index 4d33dfacde..ea178d4ac9 100644 --- a/src/tests/efl_mono/ValueEolian.cs +++ b/src/tests/efl_mono/ValueEolian.cs @@ -151,7 +151,14 @@ public static class TestEinaValueEolian { Test.AssertEquals(expected, received); Test.AssertEquals(Eina.ValueType.Double, received.GetValueType()); - + // Check for 0 + // This is a special value, since C# can silently convert it to an enum + // leading to collisions with Eina.ValueType + expected = new Eina.Value(0); + obj.SetValue(0); + obj.OutValue(out received); + Test.AssertEquals(expected, received); + Test.AssertEquals(Eina.ValueType.Int32, received.GetValueType()); } } #pragma warning restore 1591