예제 #1
0
 internal virtual void Set(string name, TotemValue value)
 {
     if (parent == null || values.ContainsKey(name))
         values[name] = value;
     else
         parent.Set(name, value);
 }
예제 #2
0
 public virtual void SetProp(string name, TotemValue value)
 {
     if (!Type.SetTypeProp(this, name, value))
     {
         properties[name] = value;
     }
 }
예제 #3
0
 public override TotemValue GreaterThanOrEqual(TotemValue other)
 {
     if (other is TotemNumber)
     {
         return(new TotemBool(ToDouble(this) >= ToDouble((TotemNumber)other)));
     }
     return(base.LessThan(other));
 }
예제 #4
0
 public override TotemValue DivideBy(TotemValue other)
 {
     if (other is TotemNumber)
     {
         return(new TotemNumber(ToDouble(this) / ToDouble((TotemNumber)other)));
     }
     return(base.DivideBy(other));
 }
예제 #5
0
 public void Add(string name, TotemValue value)
 {
     args.Add(new TotemArgument
     {
         Name  = name,
         Value = value
     });
 }
예제 #6
0
 public override TotemValue LessThan(TotemValue other)
 {
     if (other is TotemNumber)
     {
         return(new TotemBool(ToDouble(this) < ToDouble((TotemNumber)other)));
     }
     return(base.LessThan(other));
 }
예제 #7
0
 internal virtual void Set(string name, TotemValue value)
 {
     if (parent == null || values.ContainsKey(name))
     {
         values[name] = value;
     }
     else
     {
         parent.Set(name, value);
     }
 }
예제 #8
0
 public virtual TotemValue this[TotemValue key]
 {
     get
     {
         return TotemValue.Undefined;
     }
     set
     {
         throw new InvalidOperationException("Can't set lookup-items on a " + GetType().Name);
     }
 }
예제 #9
0
 public virtual TotemValue this[TotemValue key]
 {
     get
     {
         return(TotemValue.Undefined);
     }
     set
     {
         throw new InvalidOperationException("Can't set lookup-items on a " + GetType().Name);
     }
 }
예제 #10
0
 public override TotemValue this[TotemValue key]
 {
     get
     {
         TotemValue ret;
         return(value.TryGetValue(key, out ret) ? ret : TotemValue.Undefined);
     }
     set
     {
         this.value[key] = value;
     }
 }
예제 #11
0
파일: TotemMap.cs 프로젝트: Karapuska/Totem
 public override TotemValue this[TotemValue key]
 {
     get
     {
         TotemValue ret;
         return value.TryGetValue(key, out ret) ? ret : TotemValue.Undefined;
     }
     set
     {
         this.value[key] = value;
     }
 }
예제 #12
0
 public override TotemValue this[TotemValue key]
 {
     get
     {
         if (key.GetType() == typeof(TotemNumber))
             return value[(int)((TotemNumber)key).IntValue];
         throw new InvalidOperationException("Invalid array key.");
     }
     set
     {
         if (key.GetType() == typeof(TotemNumber))
             this.value[(int)((TotemNumber)key).IntValue] = value;
         throw new InvalidOperationException("Invalid array key.");
     }
 }
예제 #13
0
 public override TotemValue Add(TotemValue other)
 {
     if (other is TotemNumber)
     {
         var n = (TotemNumber)other;
         if (n.isFloatingPoint || isFloatingPoint)
         {
             return new TotemNumber(Convert.ToDouble(Value) + Convert.ToDouble(n.Value));
         }
         else
         {
             return new TotemNumber(lValue + n.lValue);
         }
     }
     return base.Add(other);
 }
예제 #14
0
 public override TotemValue MultiplyWith(TotemValue other)
 {
     if (other is TotemNumber)
     {
         var n = (TotemNumber)other;
         if (n.isFloatingPoint || isFloatingPoint)
         {
             return(new TotemNumber(ToDouble(this) * ToDouble(n)));
         }
         else
         {
             return(new TotemNumber(lValue * n.lValue));
         }
     }
     return(base.MultiplyWith(other));
 }
예제 #15
0
 public override TotemValue Subtract(TotemValue other)
 {
     if (other is TotemNumber)
     {
         var n = (TotemNumber)other;
         if (n.isFloatingPoint || isFloatingPoint)
         {
             return(new TotemNumber(ToDouble(this) - ToDouble(n)));
         }
         else
         {
             return(new TotemNumber(lValue - n.lValue));
         }
     }
     return(base.Subtract(other));
 }
예제 #16
0
 public override TotemValue Add(TotemValue other)
 {
     if (other is TotemNumber)
     {
         var n = (TotemNumber)other;
         if (n.isFloatingPoint || isFloatingPoint)
         {
             return(new TotemNumber(Convert.ToDouble(Value) + Convert.ToDouble(n.Value)));
         }
         else
         {
             return(new TotemNumber(lValue + n.lValue));
         }
     }
     return(base.Add(other));
 }
예제 #17
0
        public virtual TotemValue GetTypeProp(TotemValue @this, string propName)
        {
            TotemProperty prop;

            if (!properties.TryGetValue(propName, out prop))
            {
                return(Object.ReferenceEquals(Parent, null) ? TotemValue.Undefined : Parent.GetTypeProp(@this, propName));
            }

            if (prop.Type == TotemPropertyType.Property)
            {
                return(prop.Getter(@this));
            }
            else
            {
                return(prop.Value);
            }
        }
예제 #18
0
 public override TotemValue this[TotemValue key]
 {
     get
     {
         if (key.GetType() == typeof(TotemNumber))
         {
             return(value[(int)((TotemNumber)key).IntValue]);
         }
         throw new InvalidOperationException("Invalid array key.");
     }
     set
     {
         if (key.GetType() == typeof(TotemNumber))
         {
             this.value[(int)((TotemNumber)key).IntValue] = value;
         }
         throw new InvalidOperationException("Invalid array key.");
     }
 }
예제 #19
0
        public virtual bool SetTypeProp(TotemValue @this, string propName, TotemValue value)
        {
            TotemProperty prop;

            if (!properties.TryGetValue(propName, out prop))
            {
                return(!Object.ReferenceEquals(Parent, null) && Parent.SetTypeProp(@this, propName, value));
            }

            if (prop.Type == TotemPropertyType.Property)
            {
                prop.Setter(@this, value);
            }
            else
            {
                return(false);
            }
            return(true);
        }
예제 #20
0
 public virtual TotemValue Subtract(TotemValue other)
 {
     throw new InvalidOperationException("Can't subtract a " + other.GetType().Name + " to a " + GetType().Name);
 }
예제 #21
0
 public virtual TotemValue DivideBy(TotemValue other)
 {
     throw new InvalidOperationException("Can't divide a " + GetType().Name + " with a " + other.GetType().Name);
 }
예제 #22
0
 public virtual TotemValue MultiplyWith(TotemValue other)
 {
     throw new InvalidOperationException("Can't multiply a " + other.GetType().Name + " with a " + GetType().Name);
 }
예제 #23
0
 public void AddItem(TotemValue key, TotemValue value)
 {
     this.value.Add(key, value);
 }
예제 #24
0
 public virtual TotemValue GreaterThanOrEqual(TotemValue other)
 {
     throw new InvalidOperationException("Can't compare a " + other.GetType().Name + " to a " + GetType().Name);
 }
예제 #25
0
 public override TotemValue MultiplyWith(TotemValue other)
 {
     if (other is TotemNumber)
     {
         var n = (TotemNumber)other;
         if (n.isFloatingPoint || isFloatingPoint)
         {
             return new TotemNumber(ToDouble(this) * ToDouble(n));
         }
         else
         {
             return new TotemNumber(lValue * n.lValue);
         }
     }
     return base.MultiplyWith(other);
 }
예제 #26
0
 internal override void Set(string name, TotemValue value)
 {
     throw new InvalidOperationException("Can't change global value " + name + ".");
 }
예제 #27
0
 protected void LocalDec(string name, TotemValue value)
 {
     Scope.Declare(name);
     Scope.Set(name, value);
 }
예제 #28
0
 protected void LocalSet(string name, TotemValue value)
 {
     Scope.Set(name, value);
 }
예제 #29
0
 public virtual TotemValue Subtract(TotemValue other)
 {
     throw new InvalidOperationException("Can't subtract a " + other.GetType().Name + " to a " + GetType().Name);
 }
예제 #30
0
 public void AddItem(TotemValue value)
 {
     this.value.Add(value);
 }
예제 #31
0
 public virtual void SetProp(string name, TotemValue value)
 {
     if (!Type.SetTypeProp(this, name, value))
     {
         properties[name] = value;
     }
 }
예제 #32
0
파일: TotemMap.cs 프로젝트: Karapuska/Totem
 public void AddItem(TotemValue key, TotemValue value)
 {
     this.value.Add(key, value);
 }
예제 #33
0
 protected void LocalSet(string name, TotemValue value)
 {
     Scope.Set(name, value);
 }
예제 #34
0
 public virtual TotemValue Add(TotemValue other)
 {
     throw new InvalidOperationException("Can't add a " + other.GetType().Name + " to a " + GetType().Name);
 }
예제 #35
0
 internal override void Set(string name, TotemValue value)
 {
     throw new InvalidOperationException("Can't change global value " + name + ".");
 }
예제 #36
0
 protected void LocalDec(string name, TotemValue value)
 {
     Scope.Declare(name);
     Scope.Set(name, value);
 }
예제 #37
0
 public override TotemValue GreaterThan(TotemValue other)
 {
     if (other is TotemNumber)
     {
         return new TotemBool(ToDouble(this) > ToDouble((TotemNumber)other));
     }
     return base.LessThan(other);
 }
예제 #38
0
 public void AddItem(TotemValue value)
 {
     this.value.Add(value);
 }
예제 #39
0
 public virtual TotemValue Add(TotemValue other)
 {
     throw new InvalidOperationException("Can't add a " + other.GetType().Name + " to a " + GetType().Name);
 }
예제 #40
0
 public override TotemValue LessThanOrEqual(TotemValue other)
 {
     if (other is TotemNumber)
     {
         return new TotemBool(ToDouble(this) <= ToDouble((TotemNumber)other));
     }
     return base.LessThan(other);
 }
예제 #41
0
 public virtual TotemValue DivideBy(TotemValue other)
 {
     throw new InvalidOperationException("Can't divide a " + GetType().Name + " with a " + other.GetType().Name);
 }
예제 #42
0
 public override TotemValue Subtract(TotemValue other)
 {
     if (other is TotemNumber)
     {
         var n = (TotemNumber)other;
         if (n.isFloatingPoint || isFloatingPoint)
         {
             return new TotemNumber(ToDouble(this) - ToDouble(n));
         }
         else
         {
             return new TotemNumber(lValue - n.lValue);
         }
     }
     return base.Subtract(other);
 }
예제 #43
0
 public virtual TotemValue LessThanOrEqual(TotemValue other)
 {
     throw new InvalidOperationException("Can't compare a " + other.GetType().Name + " to a " + GetType().Name);
 }
예제 #44
0
 public override TotemValue DivideBy(TotemValue other)
 {
     if (other is TotemNumber)
     {
         return new TotemNumber(ToDouble(this) / ToDouble((TotemNumber)other));
     }
     return base.DivideBy(other);
 }
예제 #45
0
 public virtual TotemValue MultiplyWith(TotemValue other)
 {
     throw new InvalidOperationException("Can't multiply a " + other.GetType().Name + " with a " + GetType().Name);
 }