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); }
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); }
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); } }
public ScriptNumber Pow(ScriptNumber value) { return(base.m_Script.CreateDouble(Math.Pow(this.ToDouble(), value.ToDouble()))); }
public virtual ScriptNumber Clamp(ScriptNumber min, ScriptNumber max) { throw new ExecutionException(base.m_Script, "数字类型不支持Clamp函数"); }
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); } }
public abstract bool Compare(TokenType type, CodeOperator oper, ScriptNumber num);
public abstract bool Compare(TokenType type, ScriptNumber num); //两个数值比较 > >= < <= public abstract ScriptObject Compute(TokenType type, ScriptNumber obj); //位运算或者运算符 + - * / % | & ^ >> <<
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函数"); }
public abstract ScriptObject AssignDivide(ScriptNumber obj); // /= public abstract ScriptObject AssignModulo(ScriptNumber obj); // %=
public abstract ScriptObject AssignMultiply(ScriptNumber obj); // *= public abstract ScriptObject AssignDivide(ScriptNumber obj); // /=
public abstract ScriptObject AssignMinus(ScriptNumber obj); // -= public abstract ScriptObject AssignMultiply(ScriptNumber obj); // *=
public abstract ScriptObject AssignPlus(ScriptNumber obj); // += public abstract ScriptObject AssignMinus(ScriptNumber obj); // -=
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())); }
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); } }
public abstract ScriptObject Compute(TokenType type, ScriptNumber obj); //位运算或者运算符 + - * / % | & ^ >> << public abstract ScriptObject AssignCompute(TokenType type, ScriptNumber obj); //位运算或者运算符复制运算 += -= *= /= %= |= &= ^= >>= <<=
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 + "]不支持"); } }
public abstract ScriptObject ComputeMinus(ScriptNumber obj); // - public abstract ScriptObject ComputeMultiply(ScriptNumber obj); // *
public ScriptNumber Pow(ScriptNumber value) //取几次方 { return(m_Script.CreateDouble(Math.Pow(ToDouble(), value.ToDouble()))); }
public abstract ScriptObject ComputeMultiply(ScriptNumber obj); // * public abstract ScriptObject ComputeDivide(ScriptNumber obj); // /