haxe/src/haxe/lang/Null.cs
// Generated by Haxe 4.3.7
#pragma warning disable 109, 114, 219, 429, 168, 162
namespace haxe.lang {
public struct Null<T> {
//This function is here to be used with Reflection, when the haxe.lang.Null type is known
public static haxe.lang.Null<T> _ofDynamic(object obj) {
if (obj == null) {
return new haxe.lang.Null<T>(default(T), false);
} else if (typeof(T).Equals(typeof(double))) {
return new haxe.lang.Null<T>((T) (object) haxe.lang.Runtime.toDouble(obj), true);
} else if (typeof(T).Equals(typeof(int))) {
return new haxe.lang.Null<T>((T) (object) haxe.lang.Runtime.toInt(obj), true);
} else {
return new haxe.lang.Null<T>((T) obj, true);
}
}
public static implicit operator haxe.lang.Null<T>(T val) {
return new haxe.lang.Null<T>(val, true);
}
public static implicit operator Null<T>(__NoValue__ noValue) {
return new haxe.lang.Null<T>(default(T), false);
}
public sealed class __NoValue__ {
private __NoValue__() {}
}
override public string ToString() {
if (!hasValue) return "null";
else return value.ToString();
}
public Null(T v, bool hasValue) {
if (( hasValue && global::System.Object.ReferenceEquals(((object) (v) ), default(object)) )) {
hasValue = false;
}
this.@value = v;
this.hasValue = hasValue;
}
public static global::haxe.lang.Null<D> ofDynamic<D>(object obj) {
if (obj == null) {
return new haxe.lang.Null<D>(default(D), false);
} else if (typeof(D).Equals(typeof(double))) {
return new haxe.lang.Null<D>((D) (object) haxe.lang.Runtime.toDouble(obj), true);
} else if (typeof(D).Equals(typeof(int))) {
return new haxe.lang.Null<D>((D) (object) haxe.lang.Runtime.toInt(obj), true);
} else {
return new haxe.lang.Null<D>((D) obj, true);
}
}
public readonly T @value;
public readonly bool hasValue;
public object toDynamic() {
if (this.hasValue) {
return this.@value;
}
return null;
}
}
}