Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        private bool IsFalse(ref TValue v)
        {
            if (v.TtIsNil())
            {
                return(true);
            }

            if ((v.TtIsBoolean() && v.BValue() == false))
            {
                return(true);
            }

            return(false);
        }
Beispiel #4
0
        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));
            }
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        private bool IsFalse(ref TValue v)
        {
            if( v.TtIsNil() )
                return true;

            if((v.TtIsBoolean() && v.BValue() == false))
                return true;

            return false;
        }
Beispiel #7
0
		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);
		}