public bool Equals(TValue o) { if (Tt != o.Tt || NValue != o.NValue || UInt64Value != o.UInt64Value) { return(false); } switch (Tt) { case (int)LuaType.LUA_TNIL: return(true); case (int)LuaType.LUA_TBOOLEAN: return(BValue() == o.BValue()); case (int)LuaType.LUA_TNUMBER: return(NValue == o.NValue); case (int)LuaType.LUA_TUINT64: return(UInt64Value == o.UInt64Value); case (int)LuaType.LUA_TSTRING: return(SValue() == o.SValue()); //!ADD BY hyf042 case (int)LuaType.LUA_TLIGHTUSERDATA: return(System.Object.ReferenceEquals(OValue, o.OValue)); default: return(System.Object.ReferenceEquals(OValue, o.OValue)); } }
public bool Equals(TValue o) { if(Tt != o.Tt || NValue != o.NValue || UInt64Value != o.UInt64Value) { return false; } switch(Tt) { case (int)LuaType.LUA_TNIL: return true; case (int)LuaType.LUA_TBOOLEAN: return BValue() == o.BValue(); case (int)LuaType.LUA_TNUMBER: return NValue == o.NValue; case (int)LuaType.LUA_TUINT64: return UInt64Value == o.UInt64Value; case (int)LuaType.LUA_TSTRING: return SValue() == o.SValue(); default: return System.Object.ReferenceEquals(OValue, o.OValue); } }
private bool IsFalse(ref TValue v) { if (v.TtIsNil()) { return(true); } if ((v.TtIsBoolean() && v.BValue() == false)) { return(true); } return(false); }
public T GetValue <T>(TValue v) { var t = typeof(T); if (t.IsEnum) { t = Enum.GetUnderlyingType(t); } switch ((LuaType)v.Tt) { case LuaType.LUA_TNIL: return(default(T)); case LuaType.LUA_TBOOLEAN: bool b = !v.TtIsNil() && (!v.TtIsBoolean() || v.BValue()); return((T)(object)b); case LuaType.LUA_TLIGHTUSERDATA: return((T)v.OValue); case LuaType.LUA_TNUMBER: if (t == typeof(object) && v.NValue >= int.MinValue && v.NValue <= int.MaxValue && v.NValue == (int)v.NValue) { t = typeof(int); } return((T)Convert.ChangeType(v.NValue, t)); case LuaType.LUA_TSTRING: return((T)v.OValue); case LuaType.LUA_TTABLE: case LuaType.LUA_TFUNCTION: case LuaType.LUA_TTHREAD: return((T)v.OValue); case LuaType.LUA_TUINT64: return((T)Convert.ChangeType(v.UInt64Value, t)); default: return(default(T)); } }
private bool V_EqualObject(ref TValue t1, ref TValue t2, bool rawEq) { Utl.Assert(t1.Tt == t2.Tt); StkId tm = null; switch (t1.Tt) { case (int)LuaType.LUA_TNIL: return(true); case (int)LuaType.LUA_TNUMBER: return(t1.NValue == t2.NValue); case (int)LuaType.LUA_TUINT64: return(t1.UInt64Value == t2.UInt64Value); case (int)LuaType.LUA_TBOOLEAN: return(t1.BValue() == t2.BValue()); case (int)LuaType.LUA_TSTRING: return(t1.SValue() == t2.SValue()); case (int)LuaType.LUA_TUSERDATA: { var ud1 = t1.RawUValue(); var ud2 = t2.RawUValue(); if (ud1.Value == ud2.Value) { return(true); } if (rawEq) { return(false); } tm = GetEqualTM(ud1.MetaTable, ud2.MetaTable, TMS.TM_EQ); break; } case (int)LuaType.LUA_TTABLE: { var tbl1 = t1.HValue(); var tbl2 = t2.HValue(); if (System.Object.ReferenceEquals(tbl1, tbl2)) { return(true); } if (rawEq) { return(false); } tm = GetEqualTM(tbl1.MetaTable, tbl2.MetaTable, TMS.TM_EQ); break; } default: return(t1.OValue == t2.OValue); } if (tm == null) // no TM? { return(false); } CallTM(ref tm.V, ref t1, ref t2, Top, true); // call TM return(!IsFalse(ref Top.V)); }
private bool IsFalse(ref TValue v) { if( v.TtIsNil() ) return true; if((v.TtIsBoolean() && v.BValue() == false)) return true; return false; }
private bool V_EqualObject( ref TValue t1, ref TValue t2, bool rawEq ) { Utl.Assert( t1.Tt == t2.Tt ); StkId tm = null; switch( t1.Tt ) { case (int)LuaType.LUA_TNIL: return true; case (int)LuaType.LUA_TNUMBER: return t1.NValue == t2.NValue; case (int)LuaType.LUA_TUINT64: return t1.UInt64Value == t2.UInt64Value; case (int)LuaType.LUA_TBOOLEAN: return t1.BValue() == t2.BValue(); case (int)LuaType.LUA_TSTRING: return t1.SValue() == t2.SValue(); case (int)LuaType.LUA_TUSERDATA: { var ud1 = t1.RawUValue(); var ud2 = t2.RawUValue(); if(ud1.Value == ud2.Value) return true; if(rawEq) return false; tm = GetEqualTM( ud1.MetaTable, ud2.MetaTable, TMS.TM_EQ ); break; } case (int)LuaType.LUA_TTABLE: { var tbl1 = t1.HValue(); var tbl2 = t2.HValue(); if( System.Object.ReferenceEquals( tbl1, tbl2 ) ) return true; if( rawEq ) return false; tm = GetEqualTM( tbl1.MetaTable, tbl2.MetaTable, TMS.TM_EQ ); break; } default: return t1.OValue == t2.OValue; } if( tm == null ) // no TM? return false; CallTM(ref tm.V, ref t1, ref t2, Top, true ); // call TM return !IsFalse(ref Top.V); }