/// <summary> /// Creates module factories for modules represented in given string /// </summary> /// <param name="representation">String with multiple modules names</param> /// <param name="variableNames">array containing names of variables</param> /// <returns>Array of module factories</returns> public ModuleFactory <T>[] ParseModuleFactories(string input, string[] variableNames) { if (input == null) { throw new ArgumentException("input cannot be null"); } if (variableNames == null) { variableNames = new string[0]; } var expressionParser = _expressionParserFactory.Create(variableNames); var modulesData = SeparateModulesRepresentations(input); var result = new ModuleFactory <T> [modulesData.Count]; for (int moduleIndex = 0; moduleIndex < modulesData.Count; moduleIndex++) { int moduleId = GetModuleId(modulesData[moduleIndex].Item1); string[] paramArray; if (modulesData[moduleIndex].Item2 == null) { paramArray = new string[0]; } else { paramArray = modulesData[moduleIndex].Item2.Split(','); } var handlers = new Func <T[], T> [paramArray.Length]; for (int paramIndex = 0; paramIndex < paramArray.Length; paramIndex++) { handlers[paramIndex] = new Func <T[], T>(expressionParser.Parse(paramArray[paramIndex])); } result[moduleIndex] = new ModuleFactory <T>(moduleId, handlers); } return(result); }
/// <summary> /// Parses parametric conditions from string representation /// </summary> /// <param name="representation">string with parametric conditions, each condition is separated by comma</param> /// <param name="variableNames">array with all variable names defined with source module</param> /// <returns>List off all param conditions contained in representation string</returns> /// <exception cref="ParserException">Thrown if some condition is empty or cannot be parsed</exception> internal Rule <T> .ParamCondition[] ParseParamConditions(string representation, string[] variableNames) { var individualRepresentations = representation.BracketAwareSplit(','); var result = new Rule <T> .ParamCondition[individualRepresentations.Count]; var parser = _expressionParserFactory.Create(variableNames); for (int i = 0; i < result.Length; i++) { result[i] = ParseParamCondition(individualRepresentations[i], parser); } return(result); }