Inheritance: ScriptObject
		public override ScriptNumber Clamp (ScriptNumber min, ScriptNumber max)
		{
			if (m_Value < min.ToDouble ())
				return new ScriptNumberDouble(m_Script, min.ToDouble());
			if (m_Value > max.ToDouble ())
				return new ScriptNumberDouble(m_Script, max.ToDouble());
			return new ScriptNumberDouble(m_Script, m_Value);
		}
Example #2
0
            public int Compare(ScriptObject x, ScriptObject y)
            {
                ScriptNumber ret = func.Call(new ScriptObject[] { x, y }) as ScriptNumber;

                if (ret == null)
                {
                    throw new ExecutionException(script, "Sort 返回值 必须是Number类型");
                }
                return(ret.ToInt32());
            }
		public override ScriptNumber Clamp (ScriptNumber min, ScriptNumber max)
		{
            long val = min.ToLong();
			if (m_Value < val)
				return new ScriptNumberLong(m_Script, val);
            val = max.ToLong();
			if (m_Value > val)
				return new ScriptNumberLong(m_Script, val);
			return new ScriptNumberLong(m_Script, m_Value);
		}
Example #4
0
 public void Sort(ScriptFunction func)
 {
     m_listObject.Sort(new Comparison <ScriptObject>((o1, o2) => {
         ScriptNumber ret = func.Call(new ScriptObject[] { o1, o2 }) as ScriptNumber;
         if (ret == null)
         {
             throw new ExecutionException(Script, "Sort 返回值 必须是Number类型");
         }
         return(ret.ToInt32());
     }));
 }
 public override ScriptObject AssignCompute(TokenType type, ScriptNumber obj)
 {
     switch (type)
     {
         case TokenType.AssignPlus:
             m_Value += obj.ToLong();
             return this;
         case TokenType.AssignMinus:
             m_Value -= obj.ToLong();
             return this;
         case TokenType.AssignMultiply:
             m_Value *= obj.ToLong();
             return this;
         case TokenType.AssignDivide:
             m_Value /= obj.ToLong();
             return this;
         case TokenType.AssignModulo:
             m_Value %= obj.ToLong();
             return this;
         case TokenType.AssignInclusiveOr:
             m_Value |= obj.ToLong();
             return this;
         case TokenType.AssignCombine:
             m_Value &= obj.ToLong();
             return this;
         case TokenType.AssignXOR:
             m_Value ^= obj.ToLong();
             return this;
         case TokenType.AssignShr:
             m_Value >>= obj.ToInt32();
             return this;
         case TokenType.AssignShi:
             m_Value <<= obj.ToInt32();
             return this;
         default:
             throw new ExecutionException(Script, "Long不支持的运算符 " + type);
     }
 }
 public override ScriptObject AssignCompute(TokenType type, ScriptNumber obj)
 {
     switch (type)
     {
         case TokenType.AssignPlus:
             m_Value += obj.ToDouble();
             return this;
         case TokenType.AssignMinus:
             m_Value -= obj.ToDouble();
             return this;
         case TokenType.AssignMultiply:
             m_Value *= obj.ToDouble();
             return this;
         case TokenType.AssignDivide:
             m_Value /= obj.ToDouble();
             return this;
         case TokenType.AssignModulo:
             m_Value %= obj.ToDouble();
             return this;
         default:
             throw new ExecutionException(Script, "Double不支持的运算符 " + type);
     }
 }
Example #7
0
 public ScriptNumber Pow(ScriptNumber value)
 {
     return(base.m_Script.CreateDouble(Math.Pow(this.ToDouble(), value.ToDouble())));
 }
Example #8
0
 public virtual ScriptNumber Clamp(ScriptNumber min, ScriptNumber max)
 {
     throw new ExecutionException(base.m_Script, "数字类型不支持Clamp函数");
 }
Example #9
0
 public abstract ScriptObject ComputeDivide(ScriptNumber obj);          // /
 public abstract ScriptObject ComputeModulo(ScriptNumber obj);          // %
 public override ScriptObject Compute(TokenType type, ScriptNumber obj)
 {
     switch (type)
     {
         case TokenType.Plus:
             return Script.CreateLong(m_Value + obj.ToLong());
         case TokenType.Minus:
             return Script.CreateLong(m_Value - obj.ToLong());
         case TokenType.Multiply:
             return Script.CreateLong(m_Value * obj.ToLong());
         case TokenType.Divide:
             return Script.CreateLong(m_Value / obj.ToLong());
         case TokenType.Modulo:
             return Script.CreateLong(m_Value % obj.ToLong());
         case TokenType.InclusiveOr:
             return Script.CreateLong(m_Value | obj.ToLong());
         case TokenType.Combine:
             return Script.CreateLong(m_Value & obj.ToLong());
         case TokenType.XOR:
             return Script.CreateLong(m_Value ^ obj.ToLong());
         case TokenType.Shr:
             return Script.CreateLong(m_Value >> obj.ToInt32());
         case TokenType.Shi:
             return Script.CreateLong(m_Value << obj.ToInt32());
         default:
             throw new ExecutionException(Script, "Long不支持的运算符 " + type);
     }
 }
Example #11
0
 public abstract bool Compare(TokenType type, CodeOperator oper, ScriptNumber num);
Example #12
0
 public abstract bool Compare(TokenType type, ScriptNumber num);                 //两个数值比较 > >= < <=
 public abstract ScriptObject Compute(TokenType type, ScriptNumber obj);         //位运算或者运算符 + - * / % | & ^ >> <<
Example #13
0
 public abstract ScriptObject ComputePlus(ScriptNumber obj);            // +
 public abstract ScriptObject ComputeMinus(ScriptNumber obj);           // -
 public virtual ScriptNumber Clamp(ScriptNumber min, ScriptNumber max) {        //取值的区间
     throw new ExecutionException(m_Script, "数字类型不支持Clamp函数");
 }
Example #15
0
 public abstract ScriptObject AssignDivide(ScriptNumber obj);           // /=
 public abstract ScriptObject AssignModulo(ScriptNumber obj);           // %=
Example #16
0
 public abstract ScriptObject AssignMultiply(ScriptNumber obj);         // *=
 public abstract ScriptObject AssignDivide(ScriptNumber obj);           // /=
Example #17
0
 public abstract ScriptObject AssignMinus(ScriptNumber obj);            // -=
 public abstract ScriptObject AssignMultiply(ScriptNumber obj);         // *=
Example #18
0
 public abstract ScriptObject AssignPlus(ScriptNumber obj);             // +=
 public abstract ScriptObject AssignMinus(ScriptNumber obj);            // -=
Example #19
0
        public abstract ScriptObject ComputeModulo(ScriptNumber obj);          // %

        public abstract ScriptObject AssignPlus(ScriptNumber obj);             // +=
 public abstract bool Compare(TokenType type, ScriptNumber num);
 public abstract ScriptObject Compute(TokenType type, ScriptNumber obj);
		public ScriptNumber Pow (ScriptNumber value) {									//取几次方
			return m_Script.CreateDouble (Math.Pow (ToDouble(), value.ToDouble()));
		}
Example #23
0
 public abstract bool Compare(TokenType type, ScriptNumber num);                 //两个数值比较 > >= < <=
 public override ScriptObject Compute(TokenType type, ScriptNumber obj)
 {
     switch (type)
     {
         case TokenType.Plus:
             return Script.CreateDouble(m_Value + obj.ToDouble());
         case TokenType.Minus:
             return Script.CreateDouble(m_Value - obj.ToDouble());
         case TokenType.Multiply:
             return Script.CreateDouble(m_Value * obj.ToDouble());
         case TokenType.Divide:
             return Script.CreateDouble(m_Value / obj.ToDouble());
         case TokenType.Modulo:
             return Script.CreateDouble(m_Value % obj.ToDouble());
         default:
             throw new ExecutionException(Script, "Double不支持的运算符 " + type);
     }
 }
Example #25
0
 public abstract ScriptObject Compute(TokenType type, ScriptNumber obj);         //位运算或者运算符 + - * / % | & ^ >> <<
 public abstract ScriptObject AssignCompute(TokenType type, ScriptNumber obj);   //位运算或者运算符复制运算 += -= *= /= %= |= &= ^= >>= <<=
Example #26
0
 public abstract ScriptNumber Floor();                                                           //取数的整数
 public abstract ScriptNumber Clamp(ScriptNumber min, ScriptNumber max);                         //取值的区间
 public override bool Compare(TokenType type, ScriptNumber num)
 {
     ScriptNumberLong val = num as ScriptNumberLong;
     if (val == null) throw new ExecutionException(Script, "数字比较 两边的数字类型不一致 请先转换再比较 ");
     switch (type)
     {
         case TokenType.Greater:
             return m_Value > val.m_Value;
         case TokenType.GreaterOrEqual:
             return m_Value >= val.m_Value;
         case TokenType.Less:
             return m_Value < val.m_Value;
         case TokenType.LessOrEqual:
             return m_Value <= val.m_Value;
         default:
             throw new ExecutionException(Script, "Number类型 操作符[" + type + "]不支持");
     }
 }
Example #28
0
 public abstract ScriptObject ComputeMinus(ScriptNumber obj);           // -
 public abstract ScriptObject ComputeMultiply(ScriptNumber obj);        // *
Example #29
0
 public ScriptNumber Pow(ScriptNumber value)                                                                             //取几次方
 {
     return(m_Script.CreateDouble(Math.Pow(ToDouble(), value.ToDouble())));
 }
Example #30
0
 public abstract ScriptObject ComputeMultiply(ScriptNumber obj);        // *
 public abstract ScriptObject ComputeDivide(ScriptNumber obj);          // /