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);
 }
Beispiel #10
0
 /// <summary>
 /// 执行输出类型方法。
 /// </summary>
 /// <param name="invoker">泛型执行器</param>
 public void InvokeTOut(IGenericInvoker invoker)
 {
     invoker.Invoke <TOut>();
 }
Beispiel #11
0
 /// <summary>
 /// 执行输入类型方法。
 /// </summary>
 /// <param name="invoker">泛型执行器</param>
 public void InvokeTIn(IGenericInvoker invoker)
 {
     invoker.Invoke <TIn>();
 }
Beispiel #12
0
 public override void Invoke(IGenericInvoker asInvoker)
 {
     asInvoker.Invoke <T>();
 }
Beispiel #13
0
 public abstract void Invoke(IGenericInvoker asInvoker);