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); }
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; } }
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; } }
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; } }
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; }
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; } }