예제 #1
0
        object CreateSimpleLoader(SimpleLoaderType loaderType)
        {
            var             delegateType    = typeof(Func <, ,>).MakeGenericType(typeof(AbstractBufferedReader), typeof(IReaderCtx), loaderType.RealType);
            var             dm              = ILBuilder.Instance.NewMethod(loaderType.FieldHandler.Name + "SimpleReader", delegateType);
            var             ilGenerator     = dm.Generator;
            Action <IILGen> pushReaderOrCtx = il => il.Ldarg((ushort)(loaderType.FieldHandler.NeedsCtx() ? 1 : 0));

            loaderType.FieldHandler.Load(ilGenerator, pushReaderOrCtx);
            ilGenerator
            .Do(_typeConvertorGenerator.GenerateConversion(loaderType.FieldHandler.HandledType(), loaderType.RealType))
            .Ret();
            return(dm.Create());
        }
예제 #2
0
 public object GetSimpleLoader(SimpleLoaderType handler)
 {
     return(_simpleLoader.GetOrAdd(handler, CreateSimpleLoader));
 }