Пример #1
0
void TimerHeap::shift_down(int index, TimerPtr timer)
{
    int child = min_child(index);
    while (child != -1 && child <= (int)timers_.size()) {
        if (*timer <= *timers_[child])
            break;
        assign(index, timers_[child]);
        index = child;
        child = min_child(index);
    }
    assign(index, timer);
}
Пример #2
0
void split_file_mode_b(int ChildNum, int Same, void *src)
{
    CompactSource *decompact = (CompactSource *) src;
    FileSrc1D Parent = decompact->in;
    FileDesc1D ParentCount = decompact->in_count;
    FileSrc2D Child = decompact->out;
    FileDesc1D ChildCount = decompact->out_count;
    int i;
    int max_parent = ParentCount[0].count;
    int child_min_no = 0;
    int child_min_count;
    FileSource *tmpParent[max_parent];
    for(i=0; i<max_parent; i++)
    {
        tmpParent[i] = &Parent[i];                            
    }

    qsort(tmpParent, max_parent, sizeof(FileSource *), qsort_cmpfunc);
    /*
    for(i=0; i<max_parent; i++)
    {
        printf("%s [%ld]\n", tmpParent[i]->src, tmpParent[i]->size);
    }
    */
    for(i=0; i<max_parent; i++)
    {
        //printf("[%ld] %s\n", tmpParent[i]->size, tmpParent[i]->path);
        child_min_no = min_child(ChildCount, ChildNum);
        child_min_count = ChildCount[child_min_no].count;
        Child[child_min_no][child_min_count] = *tmpParent[i];
        ChildCount[child_min_no].count++;
        ChildCount[child_min_no].sum_size += tmpParent[i]->size;
    }    
    
}
Пример #3
0
void split_file_mode_a(int ChildNum, int Same, FileSource *Parent, FileSourceProperties *ParentCount, FileSource **Child, FileSourceProperties *ChildCount)
{
    int i;
    int max_parent = ParentCount[0].count;
    int child_min_no = 0;
    int child_min_count;
    FileSource *tmpParent[max_parent];
    for(i=0; i<max_parent; i++)
    {
        tmpParent[i] = &Parent[i];                            
    }

    qsort(tmpParent, max_parent, sizeof(FileSource *), qsort_cmpfunc);
    /*for(i=0; i<max_parent; i++)
    {
        printf("%s [%ld]\n", tmpParent[i]->src, tmpParent[i]->size);
    }*/
    for(i=0; i<max_parent; i++)
    {
        //printf("[%ld] %s\n", tmpParent[i]->size, tmpParent[i]->path);
        child_min_no = min_child(ChildCount, ChildNum);
        child_min_count = ChildCount[child_min_no].count;
        Child[child_min_no][child_min_count] = *tmpParent[i];
        ChildCount[child_min_no].count++;
        ChildCount[child_min_no].sum_size += tmpParent[i]->size;
    }    
    
}
Пример #4
0
 inline void Heap<T, Compare>::bubble_down(size_type index)
 {
   while (HeapArithmetic::left_child(index) < BaseList<T>::size()) {
     size_type new_index = min_child(index);
     if (m_compare(BaseList<T>::at(index), BaseList<T>::at(new_index))) {
       return;
     }
     BaseList<T>::swap(new_index, index);
     index = new_index;
   }
 }
Пример #5
0
Heap* shift_down(Heap *heap, int i) {
  assert(heap);
  while (i * 2 <= heap->size) {
    int mc = min_child(heap, i);
    if (heap->arr[i] > heap->arr[mc]) {
      int tmp = heap->arr[i];
      heap->arr[i] = heap->arr[mc];
      heap->arr[mc] = tmp;
    }
    i = mc;
  }
  return heap;
}
Пример #6
0
int arrange(int child, int percent, void *re_src, void *mv_src)
{
    CompactSrc *re_decompact = (CompactSrc *) re_src;
    FileDesc *Re_Child = re_decompact->out;
    FileDesc Re_Same = re_decompact->same;
    
    CompactSrc *mv_decompact = (CompactSrc *) mv_src;
    FileDesc *Mv_Child = mv_decompact->out;
    //FileDesc Mv_Same = mv_decompact->same;
    
    long long max_child_size;
    long long sum_all_size;
    long long child_size;
    int cmin, cmax;
    struct FileSource tmp_move;
    int i;
    struct FileSource cmp[child];
    
    sum_all_size = Re_Same->sum_size;
    child_size = 0;
    for(i=0; i<child; i++)
    {
        sum_all_size += Re_Child[i]->sum_size;
        child_size += Re_Child[i]->sum_size;
    }
    max_child_size = percent*sum_all_size/100;
    printf("%lld\n", max_child_size);
    if(child_size<max_child_size)
    {
    
        while(child_size<max_child_size)
        {
            cmin = min_child(Re_Child, child);
            tmp_move = dequeue(Re_Same);
            enqueue(Re_Child[cmin], tmp_move);
            enqueue(Mv_Child[cmin], tmp_move);
            child_size += tmp_move.size;
        }
        return 1;
    }
    else
    {
        while(child_size>max_child_size)
        {
            for(i=0; i<child; i++)
            {
                cmp[i] = *(Re_Child[i]->tail);
            }
            cmax = maxxx_child(cmp, child);
            tmp_move = popqueue(Re_Child[cmax]);
            pushbottom(Re_Same, tmp_move);
            enqueue(Mv_Child[cmax], tmp_move);
            child_size -= tmp_move.size;
        }
        if(child_size!=0)
        {
            tmp_move = dequeue(Re_Same);
            cmin = min_child(Re_Child, child);
            enqueue(Re_Child[cmin], tmp_move);
            child_size += tmp_move.size;
            popqueue(Mv_Child[cmin]);
        }
        return 0;
    }



}