예제 #1
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        public override DHJassValue Divide(DHJassValue value)
        {
            DHJassReal returnValue = new DHJassReal();

            returnValue.value = this.value / value.RealValue;

            return returnValue;
        }
예제 #2
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        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;
        }
예제 #3
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        public override DHJassValue Add(DHJassValue value)
        {
            DHJassInt returnValue = new DHJassInt();

            returnValue.Value = this.value + value.IntValue;

            return returnValue;
        }
예제 #4
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassValue Subtract(DHJassValue value)
 {
     return null;
 }
예제 #5
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        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);
        }
예제 #6
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassValue Multiply(DHJassValue value)
 {
     return null;
 }
예제 #7
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassBoolean Or(DHJassValue value)
 {
     return new DHJassBoolean(null, this.BoolValue || value.BoolValue);
 }
예제 #8
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override DHJassValue Add(DHJassValue value)
 {
     return this;
 }
예제 #9
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override DHJassValue Divide(DHJassValue value)
 {
     return this;
 }
예제 #10
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override DHJassValue Add(DHJassValue value)
 {
     return new DHJassString(null, this.value + value.StringValue);
 }
예제 #11
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override void SetValue(DHJassValue value)
 {
     this.value = value.StringValue;
 }
예제 #12
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        public override DHJassValue Subtract(DHJassValue value)
        {
            DHJassReal returnValue = new DHJassReal();

            returnValue.value = this.value - value.RealValue;

            return returnValue;
        }
예제 #13
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        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;
        }
예제 #14
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        public override DHJassValue Multiply(DHJassValue value)
        {
            DHJassReal returnValue = new DHJassReal();

            returnValue.value = this.value * value.RealValue;

            return returnValue;
        }
예제 #15
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 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;
 }
예제 #16
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override DHJassValue Multiply(DHJassValue value)
 {
     return this;
 }
예제 #17
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassBoolean LessOrEqual(DHJassValue value)
 {
     DHJassBoolean result = new DHJassBoolean();
     result.Value = DHJassSyntax.Comparer.Compare(this.Value, value.Value) <= 0;
     return result;
 }
예제 #18
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 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;
 }
예제 #19
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassBoolean NotEquals(DHJassValue value)
 {
     DHJassBoolean result = new DHJassBoolean();
     result.Value = (DHJassSyntax.Comparer.Compare(this.Value, value.Value) != 0);
     return result;
 }
예제 #20
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override DHJassValue Subtract(DHJassValue value)
 {
     return this;
 }
예제 #21
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual void SetValue(DHJassValue value)
 {
     this.Value = value.Value;
 }
예제 #22
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        // @"\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;
                }
            }
        }
예제 #23
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        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;
            }
        }
예제 #24
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassValue Add(DHJassValue value)
 {
     return null;
 }
예제 #25
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override void SetValue(DHJassValue value)
 {
     this.value = value.CodeValue;
 }
예제 #26
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassBoolean And(DHJassValue value)
 {
     return new DHJassBoolean(null, this.BoolValue && value.BoolValue);
 }
예제 #27
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public override void SetValue(DHJassValue value)
 {
 }
예제 #28
0
파일: _Types.cs 프로젝트: sonygod/dotahit
 public virtual DHJassValue Divide(DHJassValue value)
 {
     return null;
 }
예제 #29
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        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;
        }
예제 #30
0
파일: _Types.cs 프로젝트: sonygod/dotahit
        public override DHJassValue Subtract(DHJassValue value)
        {
            DHJassInt returnValue = new DHJassInt();

            returnValue.value = this.value - value.IntValue;

            return returnValue;
        }