diff --git a/src/linux/btop_collect.cpp b/src/linux/btop_collect.cpp index bf869df..5a71e11 100644 --- a/src/linux/btop_collect.cpp +++ b/src/linux/btop_collect.cpp @@ -1631,17 +1631,29 @@ namespace Proc { //* Sort processes if (sorted_change or not no_update) { - switch (v_index(sort_vector, sorting)) { - case 0: rng::sort(current_procs, rng::greater{}, &proc_info::pid); break; - case 1: rng::sort(current_procs, rng::greater{}, &proc_info::name); break; - case 2: rng::sort(current_procs, rng::greater{}, &proc_info::cmd); break; - case 3: rng::sort(current_procs, rng::greater{}, &proc_info::threads); break; - case 4: rng::sort(current_procs, rng::greater{}, &proc_info::user); break; - case 5: rng::sort(current_procs, rng::greater{}, &proc_info::mem); break; - case 6: rng::sort(current_procs, rng::greater{}, &proc_info::cpu_p); break; - case 7: rng::sort(current_procs, rng::greater{}, &proc_info::cpu_c); break; + if (reverse) { + switch (v_index(sort_vector, sorting)) { + case 0: rng::stable_sort(current_procs, rng::less{}, &proc_info::pid); break; + case 1: rng::stable_sort(current_procs, rng::less{}, &proc_info::name); break; + case 2: rng::stable_sort(current_procs, rng::less{}, &proc_info::cmd); break; + case 3: rng::stable_sort(current_procs, rng::less{}, &proc_info::threads); break; + case 4: rng::stable_sort(current_procs, rng::less{}, &proc_info::user); break; + case 5: rng::stable_sort(current_procs, rng::less{}, &proc_info::mem); break; + case 6: rng::stable_sort(current_procs, rng::less{}, &proc_info::cpu_p); break; + case 7: rng::stable_sort(current_procs, rng::less{}, &proc_info::cpu_c); break; + } + } else { + switch (v_index(sort_vector, sorting)) { + case 0: rng::stable_sort(current_procs, rng::greater{}, &proc_info::pid); break; + case 1: rng::stable_sort(current_procs, rng::greater{}, &proc_info::name); break; + case 2: rng::stable_sort(current_procs, rng::greater{}, &proc_info::cmd); break; + case 3: rng::stable_sort(current_procs, rng::greater{}, &proc_info::threads); break; + case 4: rng::stable_sort(current_procs, rng::greater{}, &proc_info::user); break; + case 5: rng::stable_sort(current_procs, rng::greater{}, &proc_info::mem); break; + case 6: rng::stable_sort(current_procs, rng::greater{}, &proc_info::cpu_p); break; + case 7: rng::stable_sort(current_procs, rng::greater{}, &proc_info::cpu_c); break; + } } - if (reverse) rng::reverse(current_procs); //* When sorting with "cpu lazy" push processes over threshold cpu usage to the front regardless of cumulative usage if (not tree and not reverse and sorting == "cpu lazy") { @@ -1714,9 +1726,7 @@ namespace Proc { } //? Final sort based on tree index - rng::sort(current_procs, rng::less{}, &proc_info::tree_index); - if (reverse) rng::reverse(current_procs); - + rng::stable_sort(current_procs, rng::less{}, &proc_info::tree_index); } numpids = (int)current_procs.size() - filter_found; diff --git a/src/osx/btop_collect.cpp b/src/osx/btop_collect.cpp index f976a55..33cc651 100644 --- a/src/osx/btop_collect.cpp +++ b/src/osx/btop_collect.cpp @@ -1306,17 +1306,29 @@ namespace Proc { //* Sort processes if (sorted_change or not no_update) { - switch (v_index(sort_vector, sorting)) { - case 0: rng::sort(current_procs, rng::greater{}, &proc_info::pid); break; - case 1: rng::sort(current_procs, rng::greater{}, &proc_info::name); break; - case 2: rng::sort(current_procs, rng::greater{}, &proc_info::cmd); break; - case 3: rng::sort(current_procs, rng::greater{}, &proc_info::threads); break; - case 4: rng::sort(current_procs, rng::greater{}, &proc_info::user); break; - case 5: rng::sort(current_procs, rng::greater{}, &proc_info::mem); break; - case 6: rng::sort(current_procs, rng::greater{}, &proc_info::cpu_p); break; - case 7: rng::sort(current_procs, rng::greater{}, &proc_info::cpu_c); break; + if (reverse) { + switch (v_index(sort_vector, sorting)) { + case 0: rng::stable_sort(current_procs, rng::less{}, &proc_info::pid); break; + case 1: rng::stable_sort(current_procs, rng::less{}, &proc_info::name); break; + case 2: rng::stable_sort(current_procs, rng::less{}, &proc_info::cmd); break; + case 3: rng::stable_sort(current_procs, rng::less{}, &proc_info::threads); break; + case 4: rng::stable_sort(current_procs, rng::less{}, &proc_info::user); break; + case 5: rng::stable_sort(current_procs, rng::less{}, &proc_info::mem); break; + case 6: rng::stable_sort(current_procs, rng::less{}, &proc_info::cpu_p); break; + case 7: rng::stable_sort(current_procs, rng::less{}, &proc_info::cpu_c); break; + } + } else { + switch (v_index(sort_vector, sorting)) { + case 0: rng::stable_sort(current_procs, rng::greater{}, &proc_info::pid); break; + case 1: rng::stable_sort(current_procs, rng::greater{}, &proc_info::name); break; + case 2: rng::stable_sort(current_procs, rng::greater{}, &proc_info::cmd); break; + case 3: rng::stable_sort(current_procs, rng::greater{}, &proc_info::threads); break; + case 4: rng::stable_sort(current_procs, rng::greater{}, &proc_info::user); break; + case 5: rng::stable_sort(current_procs, rng::greater{}, &proc_info::mem); break; + case 6: rng::stable_sort(current_procs, rng::greater{}, &proc_info::cpu_p); break; + case 7: rng::stable_sort(current_procs, rng::greater{}, &proc_info::cpu_c); break; + } } - if (reverse) rng::reverse(current_procs); //* When sorting with "cpu lazy" push processes over threshold cpu usage to the front regardless of cumulative usage if (not tree and not reverse and sorting == "cpu lazy") { @@ -1382,8 +1394,7 @@ namespace Proc { } //? Final sort based on tree index - rng::sort(current_procs, rng::less{}, &proc_info::tree_index); - if (reverse) rng::reverse(current_procs); + rng::stable_sort(current_procs, rng::less{}, &proc_info::tree_index); } numpids = (int)current_procs.size() - filter_found;