diff mbox series

[v6] git: use logical-not operator to toggle between 0 and 1

Message ID pull.1620.v6.git.git.1734541037465.gitgitgadget@gmail.com (mailing list archive)
State New
Headers show
Series [v6] git: use logical-not operator to toggle between 0 and 1 | expand

Commit Message

Seija Kijin Dec. 18, 2024, 4:57 p.m. UTC
From: Seija Kijin <doremylover123@gmail.com>

If it is known that an int is either 1 or 0,
using a logical-not to switch instead of a
modulus makes more sense and is more efficient.

Signed-off-by: Seija Kijin <doremylover123@gmail.com>
---
    git: use logical-not operator to toggle between 0 and 1
    
    If it is known that an int is either 1 or 0, doing an exclusive or to
    switch instead of a modulus makes more sense and is more efficient.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1620%2FAreaZR%2Fbuffer-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1620/AreaZR/buffer-v6
Pull-Request: https://github.com/git/git/pull/1620

Range-diff vs v5:

 1:  5bb2cf10062 ! 1:  0fe9e776177 git: use ^=1 to toggle between 0 and 1
     @@ Metadata
      Author: Seija Kijin <doremylover123@gmail.com>
      
       ## Commit message ##
     -    git: use ^=1 to toggle between 0 and 1
     +    git: use logical-not operator to toggle between 0 and 1
      
          If it is known that an int is either 1 or 0,
     -    doing an exclusive or to switch instead of a
     +    using a logical-not to switch instead of a
          modulus makes more sense and is more efficient.
      
          Signed-off-by: Seija Kijin <doremylover123@gmail.com>
     @@ diff.c: static void mark_color_as_moved(struct diff_options *o,
       
       			if (contiguous && pmb_nr && moved_symbol == l->s)
      -				flipped_block = (flipped_block + 1) % 2;
     -+				flipped_block ^= 1;
     ++				flipped_block = !flipped_block;
       			else
       				flipped_block = 0;
       


 diff.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


base-commit: d882f382b3d939d90cfa58d17b17802338f05d66

Comments

Junio C Hamano Dec. 19, 2024, 10:35 a.m. UTC | #1
"AreaZR via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Seija Kijin <doremylover123@gmail.com>
>
> If it is known that an int is either 1 or 0,

This justification needs to be updated.

The point of using flip = !flip pattern is not that you do not
assume "1 or 0", but follow "zero or non-zero", which is more
idiomatic in C.

Other than that, 

>       -				flipped_block = (flipped_block + 1) % 2;
>      -+				flipped_block ^= 1;
>      ++				flipped_block = !flipped_block;

it indeed is a good change to avoid modulo-2 like this.

Thanks.
diff mbox series

Patch

diff --git a/diff.c b/diff.c
index 266ddf18e73..48335971a4c 100644
--- a/diff.c
+++ b/diff.c
@@ -1231,7 +1231,7 @@  static void mark_color_as_moved(struct diff_options *o,
 							    &pmb_nr);
 
 			if (contiguous && pmb_nr && moved_symbol == l->s)
-				flipped_block = (flipped_block + 1) % 2;
+				flipped_block = !flipped_block;
 			else
 				flipped_block = 0;