/// <summary> /// Averigua se uma atribuição é recursiva. /// </summary> /// <param name="name">O nome da atribuição.</param> /// <param name="value">O valor da atribuição.</param> /// <returns>Verdadeiro se a atribuição é recursiva e falso caso contrário.</returns> private bool IsAssignementRecursive(NameMathematicsObject name, AMathematicsObject value) { if (value.MathematicsType == EMathematicsType.INTEGER_VALUE || value.MathematicsType == EMathematicsType.DOUBLE_VALUE || value.MathematicsType == EMathematicsType.BOOLEAN_VALUE) { return(false); } else { throw new NotImplementedException(); } }
/// <summary> /// Atribui o nome. /// </summary> /// <param name="name">O nome.</param> /// <param name="value">O valor.</param> /// <exception cref="ExpressionInterpreterException">Se a atribuição for recursiva.</exception> public void Assign(NameMathematicsObject name, AMathematicsObject value) { if (this.IsAssignementRecursive(name, value)) { throw new ExpressionInterpreterException("Recursive assignment."); } else { if (this.assignements.ContainsKey(name)) { this.assignements[name] = value; } else { this.assignements.Add(name, value); } } }
/// <summary> /// Tenta obter o valor atribuído ao nome. /// </summary> /// <param name="name">O nome.</param> /// <param name="value">A referência que recebe o valor.</param> /// <returns>Veradeiro caso o nome esteja atribuído e falso caso contrário.</returns> public bool TryGetValue(NameMathematicsObject name, out AMathematicsObject value) { return(this.assignements.TryGetValue(name, out value)); }
/// <summary> /// Liberta o nome de alguma atribuição. /// </summary> /// <param name="name">O nome.</param> public void Unassign(NameMathematicsObject name) { this.assignements.Remove(name); }
/// <summary> /// Determina se um nome está atribuído. /// </summary> /// <param name="name">O nome.</param> /// <returns>Verdadeiro caso o nome esteja atribuído e falso caso contrário.</returns> public bool IsAssigned(NameMathematicsObject name) { return(this.assignements.ContainsKey(name)); }