mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-03 10:04:32 +03:00
Optimize comparisions in file sort functions.
Use three-valued comparison macro from gnulib efa15594e17fc20827dba66414fb391e99905394. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
377476765a
commit
375839d657
16
lib/util.h
16
lib/util.h
@ -38,6 +38,22 @@
|
||||
#define MC_PIPE_ERROR_CREATE_PIPE_STREAM -4
|
||||
#define MC_PIPE_ERROR_READ -5
|
||||
|
||||
/* gnulib efa15594e17fc20827dba66414fb391e99905394
|
||||
|
||||
*_GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2.
|
||||
* It returns
|
||||
* 1 if n1 > n2
|
||||
* 0 if n1 == n2
|
||||
* -1 if n1 < n2
|
||||
* The native code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional
|
||||
* jump with nearly all GCC versions up to GCC 10.
|
||||
* This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many
|
||||
* GCC versions up to GCC 9.
|
||||
* The better code (n1 > n2) - (n1 < n2) from Hacker's Delight para 2-9
|
||||
* avoids conditional jumps in all GCC versions >= 3.4.
|
||||
*/
|
||||
#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
|
||||
|
||||
/*** enums ***************************************************************************************/
|
||||
|
||||
/* Pathname canonicalization */
|
||||
|
@ -393,7 +393,7 @@ sort_time (file_entry_t * a, file_entry_t * b)
|
||||
|
||||
if (ad == bd || panels_options.mix_all_files)
|
||||
{
|
||||
int result = a->st.st_mtime < b->st.st_mtime ? -1 : a->st.st_mtime > b->st.st_mtime;
|
||||
int result = _GL_CMP (a->st.st_mtime, b->st.st_mtime);
|
||||
|
||||
if (result != 0)
|
||||
return result * reverse;
|
||||
@ -414,7 +414,7 @@ sort_ctime (file_entry_t * a, file_entry_t * b)
|
||||
|
||||
if (ad == bd || panels_options.mix_all_files)
|
||||
{
|
||||
int result = a->st.st_ctime < b->st.st_ctime ? -1 : a->st.st_ctime > b->st.st_ctime;
|
||||
int result = _GL_CMP (a->st.st_ctime, b->st.st_ctime);
|
||||
|
||||
if (result != 0)
|
||||
return result * reverse;
|
||||
@ -435,7 +435,7 @@ sort_atime (file_entry_t * a, file_entry_t * b)
|
||||
|
||||
if (ad == bd || panels_options.mix_all_files)
|
||||
{
|
||||
int result = a->st.st_atime < b->st.st_atime ? -1 : a->st.st_atime > b->st.st_atime;
|
||||
int result = _GL_CMP (a->st.st_atime, b->st.st_atime);
|
||||
|
||||
if (result != 0)
|
||||
return result * reverse;
|
||||
@ -470,7 +470,7 @@ sort_size (file_entry_t * a, file_entry_t * b)
|
||||
|
||||
if (ad == bd || panels_options.mix_all_files)
|
||||
{
|
||||
int result = a->st.st_size < b->st.st_size ? -1 : a->st.st_size > b->st.st_size;
|
||||
int result = _GL_CMP (a->st.st_size, b->st.st_size);
|
||||
|
||||
if (result != 0)
|
||||
return result * reverse;
|
||||
|
Loading…
Reference in New Issue
Block a user