/// <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)); }
/// <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); } } }