public static IDataType <DataType> Map(ILiteralToken token, IConfiguration configuration) { switch (token?.LiteralType) { case null: return(null); case LiteralTokenType.Date: return(ConvertToTypedDataType <DateTime, DateToken, DateType>(token, typedToken => new DateType(typedToken.TypedValue))); case LiteralTokenType.Float: return(ConvertToTypedDataType <double, FloatToken, FloatType>(token, typedToken => new FloatType(typedToken.TypedValue))); case LiteralTokenType.LimitedInteger: return(ConvertToTypedDataType <BigInteger, LimitedIntegerToken, LimitedIntegerType>(token, typedToken => new LimitedIntegerType(typedToken.TypedValue, ((LimitedIntegerToken)token).SignAndBitWidth, configuration))); case LiteralTokenType.Time: return(ConvertToTypedDataType <TimeSpan, TimeToken, TimeType>(token, typedToken => new TimeType(typedToken.TypedValue))); case LiteralTokenType.Timespan: return(ConvertToTypedDataType <TimeSpan, TimespanToken, TimespanType>(token, typedToken => new TimespanType(typedToken.TypedValue))); case LiteralTokenType.UnlimitedInteger: return(ConvertToTypedDataType <BigInteger, UnlimitedIntegerToken, UnlimitedIntegerType>(token, typedToken => new UnlimitedIntegerType(typedToken.TypedValue))); default: throw new TypeConversionException($"Unhandled literal token type '{token.LiteralType}' while converting to a data type."); } }
void ConvertToString(ILiteralToken token, int numBase) { var baseStr = numBase.ToString(); var numStr = ""; switch (numBase) { case 16: numStr = token.ToHex(); break; case 10: numStr = token.ToDec(); break; case 8: numStr = token.ToOct(); break; case 2: numStr = token.ToBin(); break; default: baseStr = ""; return; } numRun.Text = numStr; baseRun.Text = baseStr; }
string PrintLiteral(ILiteralToken litToken) { if (litToken == null) { return(null); } return(litToken.LiteralType == LiteralTokenType.Timespan ? $"'{litToken}' " : $"{litToken} "); }
static TDataType ConvertToDataType <TDataType>(LiteralTokenType tokenType) where TDataType : class, IDataType <DataType> { ILiteralToken literalToken = TestCommon.MakeLiteralToken(tokenType); var dataType = ((ICalcEngine)CalcEngine.Instance).ConvertToDataType(literalToken, null); dataType.Should().NotBeNull(); dataType.Should().BeOfType <TDataType>(); var typedDataType = dataType as TDataType; typedDataType.Should().NotBeNull(); return(typedDataType); }
public IDataType <DataType> ConvertToTypedDataType(ILiteralToken token, IConfiguration configuration) => DataMapper.Map(token, configuration);
IDataType ICalcEngine.ConvertToDataType(ILiteralToken token, IConfiguration configuration) => DataMapper.Map(token, configuration);
static IDataType <DataType> ConvertToTypedDataType <TBaseType, TTypedToken, TDataType>(ILiteralToken token, Func <TTypedToken, TDataType> createDataTypeFunc) where TTypedToken : class, ILiteralToken, ILiteralToken <TBaseType, TTypedToken> where TDataType : class, IDataType <DataType> => (token is TTypedToken typedToken)