public OneNumber(IDoubleInputToken t, ConversionDelegate convertToken) { _token = t; _convert = convertToken; if (_token is DoubleToken) { _result = _convert(GetValue(null).First()); } }
public Range(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken end, ConversionDelegate convertToken) { _start = start; _step = step; _end = end; _convert = convertToken; if (_start is DoubleToken && _step is DoubleToken && _end is DoubleToken) { _result = GetValue(null); } }
public Sequence(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken count, ConversionDelegate convertToken) { _start = start; _step = step; _count = count; _convert = convertToken; if (_start is DoubleToken && _step is DoubleToken && _count is DoubleToken) { _result = GetValue(null); } }
public OneNumber(IDoubleInputToken t, ConversionDelegate convertToken) { _token = t; _convert = convertToken; if (_token is DoubleToken) _result = _convert(GetValue(null).First()); }
public CountRange(IDoubleInputToken startToken, IDoubleInputToken countToken, IDoubleInputToken endToken, ConversionDelegate convertToken) : base(startToken, countToken, endToken, convertToken) { }
public ApproxRange(IDoubleInputToken start, IDoubleInputToken step, IDoubleInputToken end, ConversionDelegate convertToken) : base(start, step, end, convertToken) { }
public static List <IDoubleSequence> ParseValue(string text, char[] seps, List <string> identifiers, ConversionDelegate convertToken) { var idSet = new HashSet <string>(identifiers); return(text.Replace(" ", "").Split(seps, StringSplitOptions.RemoveEmptyEntries).Select( delegate(string x) { var rangeIdentifiers = x.Split( RangeSeparatorTokens, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray(); if (rangeIdentifiers.Length > 3) { throw new Exception("Bad range syntax: not of format \"start..end[..(increment|#count)]\""); } if (rangeIdentifiers.Length == 0) { throw new Exception("No identifiers found."); } IDoubleInputToken startToken = ParseToken(rangeIdentifiers[0], idSet, identifiers); if (rangeIdentifiers.Length > 1) { if (rangeIdentifiers[1].StartsWith("#")) { var countToken = rangeIdentifiers[1].Substring(1); IDoubleInputToken endToken = ParseToken(countToken, idSet, identifiers); if (rangeIdentifiers.Length > 2) { if (rangeIdentifiers[2].StartsWith("#") || rangeIdentifiers[2].StartsWith("~")) { throw new Exception("Cannot use range or approx. identifier on increment field when one has already been used to specify a count."); } return new Sequence(startToken, ParseToken(rangeIdentifiers[2], idSet, identifiers), endToken, convertToken); } return new Sequence(startToken, new DoubleToken(1), endToken, convertToken) as IDoubleSequence; } else { IDoubleInputToken endToken = ParseToken(rangeIdentifiers[1], idSet, identifiers); if (rangeIdentifiers.Length > 2) { if (rangeIdentifiers[2].StartsWith("#")) { var count = rangeIdentifiers[2].Substring(1); IDoubleInputToken countToken = ParseToken(count, idSet, identifiers); return new CountRange(startToken, countToken, endToken, convertToken); } if (rangeIdentifiers[2].StartsWith("~")) { var approx = rangeIdentifiers[2].Substring(1); IDoubleInputToken approxToken = ParseToken(approx, idSet, identifiers); return new ApproxRange(startToken, approxToken, endToken, convertToken); } return new Range(startToken, ParseToken(rangeIdentifiers[2], idSet, identifiers), endToken, convertToken); } double identifierValue0, identifierValue1; var canBeParsed0 = System.Double.TryParse(rangeIdentifiers[0], out identifierValue0); var canBeParsed1 = System.Double.TryParse(rangeIdentifiers[1], out identifierValue1); //both of the value can be parsed as double if (canBeParsed0 && canBeParsed1) { if (identifierValue0 < identifierValue1) { return new Range(startToken, new DoubleToken(1), endToken, convertToken) as IDoubleSequence; } else { return new Range(startToken, new DoubleToken(-1), endToken, convertToken) as IDoubleSequence; } } //the input cannot be parsed as double, return a default function and let it handle the error return new Range(startToken, new DoubleToken(1), endToken, convertToken) as IDoubleSequence; } } return new OneNumber(startToken, convertToken) as IDoubleSequence; }).ToList()); }