Exemplo n.º 1
0
 /// <summary>
 /// Tenta ler a matriz a partir de um leitor de símbolos.
 /// </summary>
 /// <param name="reader">O leitor de símbolos.</param>
 /// <param name="parser">O interpretador da matriz.</param>
 /// <param name="matrix">Estabelece a matriz lida.</param>
 /// <param name="matrixFactory">A função responsável pela criação das matrizes.</param>
 /// <returns>Verdadeiro caso a operação seja bem sucedida e falso caso contrário.</returns>
 public bool TryParseMatrix(
     IMementoSymbolReader <SymbValue, SymbType> reader,
     IParse <T, SymbValue, SymbType> parser,
     Func <int, int, M> matrixFactory,
     out M matrix)
 {
     return(this.TryParseMatrix(reader, parser, null, matrixFactory, out matrix));
 }
Exemplo n.º 2
0
        /// <summary>
        /// Tenta ler a matriz a partir de um leitor de símbolos estabelecendo um valor por defeito.
        /// </summary>
        /// <param name="reader">O leitor de símbolos.</param>
        /// <param name="parser">O interpretador da matriz.</param>
        /// <param name="errors">Os erros da leitura.</param>
        /// <param name="defaultValue">O valor por defeito.</param>
        /// <param name="matrixFactory">A função responsável pela criação de matrizes.</param>
        /// <param name="matrix">Estabelece a matriz lida.</param>
        /// <returns>Verdadeiro caso a operação seja bem sucedida e falso caso contrário.</returns>
        public bool TryParseMatrix(
            IMementoSymbolReader <SymbValue, SymbType> reader,
            IParse <T, SymbValue, SymbType> parser,
            ILogStatus <string, EParseErrorLevel> errors,
            T defaultValue,
            Func <int, int, T, M> matrixFactory,
            out M matrix)
        {
            if (matrixFactory == null)
            {
                throw new ArgumentNullException("matrixFactory");
            }
            else
            {
                matrix = default(M);
                this.rangeReader.ReadRangeValues(reader, parser);
                if (this.rangeReader.HasErrors)
                {
                    if (errors != null)
                    {
                        foreach (var message in this.rangeReader.ErrorMessages)
                        {
                            errors.AddLog(message, EParseErrorLevel.ERROR);
                        }
                    }

                    return(false);
                }
                else
                {
                    var lines   = -1;
                    var columns = -1;
                    var configurationEnumerator = this.rangeReader.Configuration.GetEnumerator();
                    if (configurationEnumerator.MoveNext())
                    {
                        lines = configurationEnumerator.Current;
                        if (configurationEnumerator.MoveNext())
                        {
                            columns = configurationEnumerator.Current;
                        }
                    }

                    matrix = matrixFactory.Invoke(lines, columns, defaultValue);
                    this.SetupResultMatrix(matrix, new int[] { lines, columns }, this.rangeReader.Elements);
                    return(true);
                }
            }
        }