Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }