/// <summary> /// Initializes a variable with a variable name. /// </summary> protected VariableModel(BundleModel bundle, ModelName variableName) : base(variableName) { Workspace = bundle.Workspace; Parent = bundle; DomainExpression = new VariableDomainExpressionModel(); }
/// <summary> /// Overrides a variable domain expression to a new domain expression. /// </summary> /// <param name="variableIndex">Variable index starts at zero.</param> /// <param name="newDomainExpression">New domain expression.</param> public void OverrideDomainTo(int variableIndex, VariableDomainExpressionModel newDomainExpression) { if (variableIndex >= Variables.Count() || variableIndex < 0) { throw new ArgumentOutOfRangeException(nameof(variableIndex)); } var variableToOverride = (SingletonVariableModel)GetVariableByIndex(variableIndex); var range = variableToOverride.GetVariableBand(); var newRange = GetRangeFrom(newDomainExpression); if (!range.IntersectsWith(newRange)) { throw new ArgumentException(nameof(newDomainExpression)); } variableToOverride.DomainExpression = newDomainExpression; }
/// <summary> /// Get the domain range from the domain expression. /// </summary> /// <param name="theDomainExpression">Domain expression.</param> /// <returns>Domain range.</returns> private DomainValue GetRangeFrom(VariableDomainExpressionModel theDomainExpression) { var evaluatorContext = new VariableDomainExpressionEvaluatorContext(theDomainExpression.Node, Workspace); return(VariableDomainExpressionEvaluator.Evaluate(evaluatorContext)); }
/// <summary> /// Initializes a variable with a variable name. /// </summary> protected VariableModel(ModelModel theModel, ModelName variableName) : base(variableName) { Parent = theModel; DomainExpression = new VariableDomainExpressionModel(); }
/// <summary> /// Initialize a new inline domain with an empty expression. /// </summary> public InlineDomainModel() { Expression = new VariableDomainExpressionModel(); }
/// <summary> /// Initialize a new inline domain with a domain expression. /// </summary> public InlineDomainModel(string theExpression) { Expression = new VariableDomainExpressionModel(theExpression); }