libzahl

big integer library
git clone git://git.suckless.org/libzahl
Log | Files | Refs | README | LICENSE

zand.c (635B)


      1 /* See LICENSE file for copyright and license details. */
      2 #include "internals.h"
      3 
      4 
      5 void
      6 zand(z_t a, z_t b, z_t c)
      7 {
      8 	/* Yes, you are reading this right. It's an optimisation. */
      9 	if (unlikely(zzero(b))) {
     10 		SET_SIGNUM(a, 0);
     11 		return;
     12 	} else if (unlikely(zzero(c))) {
     13 		SET_SIGNUM(a, 0);
     14 		return;
     15 	}
     16 
     17 	a->used = MIN(b->used, c->used);
     18 
     19 	if (a == b) {
     20 		ZMEM_2OP(a->chars, a->chars, c->chars, a->used, &);
     21 	} else if (unlikely(a == c)) {
     22 		ZMEM_2OP(a->chars, a->chars, b->chars, a->used, &);
     23 	} else {
     24 		ENSURE_SIZE(a, a->used);
     25 		ZMEM_2OP(a->chars, b->chars, c->chars, a->used, &);
     26 	}
     27 
     28 	TRIM_AND_SIGN(a, zpositive1(b, c) * 2 - 1);
     29 }