Пример #1
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="expressao"></param>
 /// <param name="variavies"></param>
 public ExpressaoAccessor(Expressao expressao, IVariavelCollection variavies)
 {
     expressao.Require(nameof(expressao)).NotNull();
     variavies.Require(nameof(variavies)).NotNull();
     Expressao  = expressao;
     _variaveis = variavies;
 }
Пример #2
0
        /// <summary>
        /// Executa o calculo do valor da expressão.
        /// </summary>
        /// <param name="variaveis">Variáveis que serão usadas no cálculo da expressão.</param>
        /// <returns></returns>
        private double Calcular(IVariavelCollection variaveis)
        {
            variaveis.Require(nameof(variaveis)).NotNull();

            if (ExpressaoCompilada != null)
            {
                try
                {
                    var accessor = new Accessors.ExpressaoAccessor(this, variaveis);

                    var values = new object[] { accessor }
                    .Concat(
                        _lambdaExpression
                        .Parameters
                        .Skip(1)
                        // Recupera somente os valores das variáveis de dependencia
                        .Select(f => _variaveisDependencia.Contains(f.Name) ? variaveis[f.Name] : 0.0)
                        .OfType <object>())
                    .ToArray();

                    return((double)ExpressaoCompilada.DynamicInvoke(values));
                }
                catch (Exception ex)
                {
                    throw new InvalidOperationException("Um erro ocorreu ao tentar compilar a expressão.", ex);
                }
            }

            return(0.0);
        }
Пример #3
0
        /// <summary>
        /// Cria uma cópia da formula usando as variáveis informadas.
        /// </summary>
        /// <param name="formula"></param>
        /// <returns></returns>
        public Formula CreateCopy(IVariavelCollection variaveis)
        {
            var formula   = new Formula(Nome, variaveis);
            var expressao = _expressao.CreateCopy(formula);

            formula._expressao = expressao;

            return(formula);
        }
Пример #4
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="variaveis"></param>
 public VariavelCollectionValueAccessor(IVariavelCollection variaveis)
 {
     _variaveis = variaveis;
 }
Пример #5
0
 /// <summary>
 /// Adiciona uma coleção de variáveis.
 /// </summary>
 /// <param name="variableCollection"></param>
 public void AdicionarVariaveis(IVariavelCollection variableCollection)
 {
     variableCollection.Require(nameof(variableCollection)).NotNull();
     _agregadorVariaveis.Add(variableCollection);
 }
Пример #6
0
 /// <summary>
 /// Remove a coleção do gregador.
 /// </summary>
 /// <param name="collection"></param>
 /// <returns></returns>
 public bool Remove(IVariavelCollection collection)
 {
     return(_collections.Remove(collection));
 }
Пример #7
0
 /// <summary>
 /// Adiciona uma coleção para o agregador.
 /// </summary>
 /// <param name="collection"></param>
 public void Add(IVariavelCollection collection)
 {
     _collections.Add(collection);
 }