Brunet.Services.MapReduce.MapReduceBoundedBroadcast.GenerateTreeOutRange C# (CSharp) Метод

GenerateTreeOutRange() приватный Метод

private GenerateTreeOutRange ( AHAddress start, AHAddress end, MapReduceArgs mr_args ) : List
start Brunet.Symphony.AHAddress
end Brunet.Symphony.AHAddress
mr_args MapReduceArgs
Результат List
    private List<MapReduceInfo> GenerateTreeOutRange(AHAddress start, AHAddress end, MapReduceArgs mr_args) {
      List<MapReduceInfo> retval = new List<MapReduceInfo>();
      BigInteger up = start.ToBigInteger();
      BigInteger down = end.ToBigInteger();
      BigInteger mid_range = (up + down) /2;
      if (mid_range % 2 == 1) {mid_range = mid_range -1; }
      AHAddress mid_addr = new AHAddress(mid_range);
      //if (!mid_addr.IsBetweenFromLeft(start, end) ) {
      if (!InRange(mid_addr, start, end) ) {
        mid_range += Address.Half;
        mid_addr = new AHAddress(mid_range);
      }
      ArrayList gen_arg = new ArrayList();
      if (NextGreedyClosest(mid_addr) != null ) {
        AHGreedySender ags = new AHGreedySender(_node, mid_addr);
        string start_range = start.ToString();
        string end_range = end.ToString();
        gen_arg.Add(start_range);
        gen_arg.Add(end_range);
        MapReduceInfo mr_info = new MapReduceInfo( (ISender) ags,
        			                new MapReduceArgs(this.TaskName,
        						          mr_args.MapArg,
        							  gen_arg,
                                                                  mr_args.ReduceArg));
        Log("{0}: {1}, out of range, moving to the closest node to mid_range: {2} to target node, range start: {3}, range end: {4}",
        		  this.TaskName, _node.Address, mid_addr, start, end);
        retval.Add(mr_info);
      }
      else  {
        // cannot find a node in the range. 
      }
      return retval;
    }