public override ISCType Subtract(ISCType obj) { if (obj.IsOfType <SC_Int, SC_Long>()) { return(new SC_Long(value - obj.GetValueAs <long>())); } throw new ArgumentException($"you cant subtract {obj.GetType()} to a long"); }
public override ISCType Multiply(ISCType obj) { if (obj.IsOfType <SC_Int, SC_Long>()) { return(new SC_Long(value * obj.GetValueAs <long>())); } throw new ArgumentException($"you cant multiply {obj.GetType()} to a long"); }
public static void AddToRegister(this Dictionary <string, ISCType> register, string name, ISCType obj) { if (register.ContainsKey(name)) { register[name] = obj; } else { register.Add(name, obj); } }
public override ISCType Add(ISCType obj) { if (obj.IsOfType <SC_Int>()) { return(new SC_Int(value + obj.GetValueAs <int>())); } if (obj.IsOfType <SC_Long>()) { return(new SC_Long(value + obj.GetValueAs <long>())); } return(new SC_String(value.ToString() + obj.GetValueAs <string>())); }
public override ISCType Multiply(ISCType obj) { if (obj.IsOfType <SC_Int>()) { return(new SC_Long(value * obj.GetValueAs <int>())); } if (obj.IsOfType <SC_Long>()) { return(new SC_Long(value * obj.GetValueAs <long>())); } throw new ArgumentException("Sorry you cant multiply a string with an int"); }
public override ISCType Add(ISCType obj) { if (obj.IsOfType <SC_Int, SC_Long>()) { return(new SC_Long(value + obj.GetValueAs <long>())); } if (obj.IsOfType <SC_String>()) { return(new SC_String(value + obj.GetValueAs <string>())); } throw new ArgumentException($"you cant add {obj.GetType()} to a long"); }
public override ISCType Multiply(ISCType obj) { if (obj.IsOfType <SC_Int, SC_Long>()) { string s = ""; for (int i = 0; i < obj.GetValueAs <int>(); i++) { s += value; } return(new SC_String(s)); } throw new ArgumentException("You cant multiply two strings together!"); }
public static bool IsOfType <T>(this ISCType obj) where T : ISCType { return(obj.GetType() == typeof(T)); }
public override ISCType Subtract(ISCType obj) { throw new NotSupportedException("You cant subtract from a string!"); }
public abstract ISCType Add(ISCType obj);
public override ISCType Divide(ISCType obj) { throw new ArgumentException("Sorry this may never be supported!"); }
public override bool IsLower(ISCType obj) { throw new NotSupportedException("You cant use islower on a string"); }
public abstract ISCType Multiply(ISCType obj);
public abstract ISCType Subtract(ISCType obj);
public override bool IsEqual(ISCType obj) { return(obj.IsOfType <SC_String>() && obj.GetValueAs <string>().Equals(value)); }
public override bool IsEqual(ISCType obj) { return(obj.IsOfType <SC_Long, SC_Int>() && obj.GetValueAs <long>() == value); }
public abstract ISCType Divide(ISCType obj);
public override ISCType Add(ISCType obj) { return(new SC_String(value + obj.GetValueAs <string>())); }
public abstract bool IsLower(ISCType obj);
public abstract bool IsEqual(ISCType obj);
public override ISCType Divide(ISCType obj) { throw new NotImplementedException(); }
public override ISCType Divide(ISCType obj) { throw new NotSupportedException("You cant divide from a string!"); }
public override bool IsLower(ISCType obj) { return(obj.IsOfType <SC_Int, SC_Long>() && value < obj.GetValueAs <long>()); }
public static bool IsOfType <T1, T2>(this ISCType obj) where T1 : ISCType where T2 : ISCType { return(obj.GetType() == typeof(T1) || obj.GetType() == typeof(T2)); }