namespace HeuristicLab.BenchmarkSuite { using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; public static class ExampleArgumentConverter { private static readonly char[] ArrayValueSeparator = { ' ', ';' }; private static readonly char[] ArraySymbolTrim = { '[', ']', '(', ')' }; public static double[] ConvertDoubles(string[] input) { return input.Select(ConvertDouble).ToArray(); } public static double[] ConvertDoubles(string input) { return ConvertMultiple(input, str => double.Parse(str, NumberStyles.Float, CultureInfo.InvariantCulture)); } public static double ConvertDouble(string input) { return double.Parse(input, CultureInfo.InvariantCulture); } public static long[] ConvertIntegers(string[] input) { return input.Select(ConvertInteger).ToArray(); } public static long[] ConvertIntegers(string input) { return ConvertMultiple(input, long.Parse); } public static long ConvertInteger(string input) { return string.IsNullOrEmpty(input) ? default(long) : long.Parse(input); } public static string[] ConvertStringVector(string input) { var length = input.Length - 1; var strs = new List(); for (var i = 1; i < length; i++) { // collect string var c = input[i]; if (c == ' ') continue; if (c != '\"') throw new InvalidDataException("Unable to parse string vector"); var start = i + 1; do { i++; c = input[i]; } while (i < length - 1 && !(c == '\"' && input[i + 1] == ' ') && !(i == length - 2 && c == '\"' && input[i + 1] == ']')); var str = input.Substring(start, i - start); strs.Add(str); } return strs.ToArray(); } public static T[] ConvertMultiple(string input, Func converter) { return input .Trim(ArraySymbolTrim) .Split(ArrayValueSeparator) .Where(s => !string.IsNullOrWhiteSpace(s)) .Select(converter) .ToArray(); } public static IEnumerable SplitByNewLine(string input) { return input.Split(new[] { Environment.NewLine, "\n", "\r\n" }, StringSplitOptions.None); } private static string[] trueFormats = { "true", "t", "1" }; private static string[] falseFormats = { "false", "f", "0" }; public static bool ConvertBoolean(string input) { var str = input.ToLower(); if (trueFormats.Contains(str)) return true; if (falseFormats.Contains(str)) return false; throw new InvalidDataException(string.Format("Unable to parse {0} as boolean", str)); } public static bool[] ConvertBooleans(string input) { return input .Trim(ArraySymbolTrim) .Split(ArrayValueSeparator) .Where(s => !string.IsNullOrWhiteSpace(s)) .Select(ConvertBoolean) .ToArray(); } } }