private void WriteVariable(Variable value, BinaryWriter writer) { writer.Write((int)value.Type); switch (value.Type) { case VarType.String: writer.Write(value.ToString()); break; case VarType.Integer: writer.Write(value.ToInteger()); break; case VarType.Float: writer.Write(value.ToFloat()); break; case VarType.List: writer.Write(value.ListCount); foreach (var item in value.GetList()) { WriteVariable(item, writer); } break; default: throw new Exception("Unable to write unknown variable type."); } }
public int CompareTo(Variable value) { return(value.Type switch { VarType.String => CompareTo(value.ToString()), VarType.Integer => CompareTo(value.ToInteger()), VarType.Float => CompareTo(value.ToFloat()), VarType.List => CompareTo((ListValue)value.Value), _ => throw new InvalidOperationException(), });
public override Variable Add(Variable value) => value.IsFloat() ? new Variable(Value + value.ToFloat()) : new Variable(Value + value.ToInteger());
public override Variable Add(Variable value) => new Variable(Value + value.ToFloat());
public override Variable Modulus(Variable value) => new Variable(Value % value.ToFloat());
public override bool IsEqual(Variable value) => (Value == value.ToFloat());
public override Variable Divide(Variable value) => new Variable(Value / value.ToFloat());
public override Variable Power(Variable value) => new Variable(Math.Pow(Value, value.ToFloat()));
public override Variable Subtract(Variable value) => new Variable(Value - value.ToFloat());
public override Variable Multiply(Variable value) => new Variable(Value * value.ToFloat());
public override Variable Add(Variable value) => (IsFloat() || value.IsFloat()) ? new Variable(ToFloat() + value.ToFloat()) : new Variable(ToInteger() + value.ToInteger());
public override Variable Subtract(Variable value) => value.IsFloat() ? new Variable(Value - value.ToFloat()) : new Variable(Value - value.ToInteger());
public override Variable Modulus(Variable value) => (IsFloat() || value.IsFloat()) ? new Variable(ToFloat() % value.ToFloat()) : new Variable(ToInteger() % value.ToInteger());
public override Variable Multiply(Variable value) => (IsFloat() || value.IsFloat()) ? new Variable(ToFloat() * value.ToFloat()) : new Variable(ToInteger() * value.ToInteger());
public override Variable Subtract(Variable value) => (IsFloat() || value.IsFloat()) ? new Variable(ToFloat() - value.ToFloat()) : new Variable(ToInteger() - value.ToInteger());
public override Variable Modulus(Variable value) => value.IsFloat() ? new Variable(Value % value.ToFloat()) : new Variable(Value % value.ToInteger());
public override Variable Multiply(Variable value) => value.IsFloat() ? new Variable(Value * value.ToFloat()) : new Variable(Value * value.ToInteger());