public override DHJassValue Divide(DHJassValue value) { DHJassReal returnValue = new DHJassReal(); returnValue.value = this.value / value.RealValue; return returnValue; }
public DHJassFunction(List<string> declaration, List<string> lines) : base(declaration[0]) { this.declaration = declaration[0]; /////////////////////// // parameters /////////////////////// argsArray = new DHJassValue[declaration.Count - 2]; for (int i = 0; i < declaration.Count - 2; i++) { DHJassValue value = DbJassTypeValueKnowledge.CreateKnownValue(declaration[i + 2]); if (value != null) { args.Add(value.Name, value); argsArray[i] = value; } } /////////////////////// // return value /////////////////////// //string return_value_declaration = declaration.Groups["returns"].Value; returnValue = new DHJassUnusedType();//DbJassTypeValueKnowledge.CreateKnownValue(return_value_declaration); ////////////////////////////////////////////// // save body lines for compiling on demand ////////////////////////////////////////////// this.lines = lines; }
public override DHJassValue Add(DHJassValue value) { DHJassInt returnValue = new DHJassInt(); returnValue.Value = this.value + value.IntValue; return returnValue; }
public virtual DHJassValue Subtract(DHJassValue value) { return null; }
public void SetElementValue(int index, DHJassValue value) { DHJassValue result; if (!array.TryGetValue(index, out result) || result == null || (result is DHJassUnusedType && !(value is DHJassUnusedType)) || (!(result is DHJassUnusedType) && value is DHJassUnusedType)) { result = value.GetNew(); array[index] = result; } result.SetValue(value); }
public virtual DHJassValue Multiply(DHJassValue value) { return null; }
public virtual DHJassBoolean Or(DHJassValue value) { return new DHJassBoolean(null, this.BoolValue || value.BoolValue); }
public override DHJassValue Add(DHJassValue value) { return this; }
public override DHJassValue Divide(DHJassValue value) { return this; }
public override DHJassValue Add(DHJassValue value) { return new DHJassString(null, this.value + value.StringValue); }
public override void SetValue(DHJassValue value) { this.value = value.StringValue; }
public override DHJassValue Subtract(DHJassValue value) { DHJassReal returnValue = new DHJassReal(); returnValue.value = this.value - value.RealValue; return returnValue; }
public override DHJassBoolean NotEquals(DHJassValue value) { DHJassBoolean result = new DHJassBoolean(); object obj = value.Value; if (obj is int) result.Value = DHJassSyntax.Comparer.Compare(this.Value, (double)(int)obj) != 0; else result.Value = DHJassSyntax.Comparer.Compare(this.Value, obj) != 0; return result; }
public override DHJassValue Multiply(DHJassValue value) { DHJassReal returnValue = new DHJassReal(); returnValue.value = this.value * value.RealValue; return returnValue; }
public virtual DHJassBoolean Less(DHJassValue value) { DHJassBoolean result = new DHJassBoolean(); try { result.Value = DHJassSyntax.Comparer.Compare(this.Value, value.Value) < 0; } catch { result.Value = false; } return result; }
public override DHJassValue Multiply(DHJassValue value) { return this; }
public virtual DHJassBoolean LessOrEqual(DHJassValue value) { DHJassBoolean result = new DHJassBoolean(); result.Value = DHJassSyntax.Comparer.Compare(this.Value, value.Value) <= 0; return result; }
public override DHJassBoolean NotEquals(DHJassValue value) { DHJassBoolean result = new DHJassBoolean(); try { if (value is DHJassString) result.Value = (DHJassSyntax.Comparer.Compare(this.Value, value.Value) != 0); else result.Value = (DHJassSyntax.Comparer.Compare(this.RealValue, value.RealValue) != 0); } catch { result.Value = false; } return result; }
public virtual DHJassBoolean NotEquals(DHJassValue value) { DHJassBoolean result = new DHJassBoolean(); result.Value = (DHJassSyntax.Comparer.Compare(this.Value, value.Value) != 0); return result; }
public override DHJassValue Subtract(DHJassValue value) { return this; }
public virtual void SetValue(DHJassValue value) { this.Value = value.Value; }
// @"\A\s*(constant\s+)?" + typename + @"(\s+(?<name>\b(?!array)\w+)\s*(=\s*(?<value>.+))?|\z)"; // @"\A\s*(?<element_type>\w+)\s+array\s+(?<name>\w+)(=(?<value>\w+))?" public static bool TryParseDeclaration(string code, out DHJassValue value, out List<string> args) { if (code.Length < 4) { value = null; args = null; return false; } string constantStr = "constant"; // should be interned string arrayStr = "array"; bool isConstant = false; unsafe { fixed (char* pCode = code, ptrCONSTANT = constantStr, ptrARRAY = arrayStr) { char* ptr = pCode; // skip whitespaces DHJassSyntax.skipWhiteSpacesFast(ref ptr); // "constant" keyword could be here if (DHJassSyntax.checkStringsEqual(ptr, ptrCONSTANT, constantStr.Length)) { isConstant = true; // skip the "constant" bytes ptr += constantStr.Length; // skip whitespaces DHJassSyntax.skipWhiteSpacesFast(ref ptr); } char* pStart = ptr; // typename should be here DHJassSyntax.skipNonWhiteSpacesFast(ref ptr); string typeName = new string(pStart, 0, (int)(ptr - pStart)); if (!DbJassTypeValueKnowledge.TypenameValuePairs.TryGetValue(typeName, out value)) { args = null; return false; } args = new List<string>(2); // skip whitespaces DHJassSyntax.skipWhiteSpacesFast(ref ptr); // check for "array" keyword if (!isConstant && DHJassSyntax.checkStringsEqual(ptr, ptrARRAY, arrayStr.Length)) { value = DbJassTypeValueKnowledge.TypeValuePairs[typeof(DHJassArray)]; // skip the "array" bytes ptr += arrayStr.Length; // skip whitespaces DHJassSyntax.skipWhiteSpacesFast(ref ptr); } pStart = ptr; // reach end of the variable name DHJassSyntax.reachEndOfVariableNameSyntaxFast(ref ptr); // add variable name args.Add(new string(pStart, 0, (int)(ptr - pStart))); // skip whitespaces DHJassSyntax.skipWhiteSpacesFast(ref ptr); if (*ptr != '=') return true; ptr++; // skip whitespaces DHJassSyntax.skipWhiteSpacesFast(ref ptr); // add variable's initial value args.Add(new string(ptr)); return true; } } }
public DHJassValue this[DHJassValue index] { get { object intIndex = index.GetValue(); if (intIndex is int) return array[(int)intIndex]; else return null; } set { object intIndex = index.GetValue(); if (intIndex is int) array[(int)intIndex] = value; } }
public virtual DHJassValue Add(DHJassValue value) { return null; }
public override void SetValue(DHJassValue value) { this.value = value.CodeValue; }
public virtual DHJassBoolean And(DHJassValue value) { return new DHJassBoolean(null, this.BoolValue && value.BoolValue); }
public override void SetValue(DHJassValue value) { }
public virtual DHJassValue Divide(DHJassValue value) { return null; }
public override DHJassBoolean Equals(DHJassValue value) { DHJassBoolean result = new DHJassBoolean(); object obj = value.Value; if (obj == null) result.Value = (this.value == 0); else result.Value = (DHJassSyntax.Comparer.Compare(this.Value, obj) == 0); return result; }
public override DHJassValue Subtract(DHJassValue value) { DHJassInt returnValue = new DHJassInt(); returnValue.value = this.value - value.IntValue; return returnValue; }