public Array Run <T>(IGenericInvoker source, Tuple <long, int> arg) { long firstItemIdx = arg.Item1; int count = arg.Item2; var file = ((BinaryFile <T>)source); long fileCount = file.Count; if (firstItemIdx < 0 || firstItemIdx > fileCount) { throw new ArgumentOutOfRangeException( "firstItemIdx" + "", firstItemIdx, string.Format("Accepted range [0:{0}]", fileCount)); } if (count < 0) { throw new ArgumentOutOfRangeException("count" + "", count, "Must be non-negative"); } var result = new T[(int)Math.Min(fileCount - firstItemIdx, count)]; file.PerformFileAccess(firstItemIdx, new ArraySegment <T>(result), false); return(result); }
protected abstract TResult InternalInvoke <TResult>(IGenericInvoker <TResult> invoker);
protected abstract void InternalInvoke(IGenericInvoker invoker);
public static TResult Invoke <TResult>(object obj, IGenericInvoker <TResult> invoker) { return(cache.GetOrCreate(obj).InternalInvoke(invoker)); }
public static TResult Invoke <TResult>(Type type, IGenericInvoker <TResult> invoker) { return(cache.GetOrCreate(type).InternalInvoke(invoker)); }
protected override TResult InternalInvoke <TResult>(IGenericInvoker <TResult> invoker) { return(invoker.Invoke <T>()); }
protected override void InternalInvoke(IGenericInvoker invoker) { invoker.Invoke <T>(); }
public static void Invoke(object obj, IGenericInvoker invoker) { cache.GetOrCreate(obj).InternalInvoke(invoker); }
public static void Invoke(Type type, IGenericInvoker invoker) { cache.GetOrCreate(type).InternalInvoke(invoker); }
/// <summary> /// 执行输出类型方法。 /// </summary> /// <param name="invoker">泛型执行器</param> public void InvokeTOut(IGenericInvoker invoker) { invoker.Invoke <TOut>(); }
/// <summary> /// 执行输入类型方法。 /// </summary> /// <param name="invoker">泛型执行器</param> public void InvokeTIn(IGenericInvoker invoker) { invoker.Invoke <TIn>(); }
public override void Invoke(IGenericInvoker asInvoker) { asInvoker.Invoke <T>(); }
public abstract void Invoke(IGenericInvoker asInvoker);