Lines Matching refs:z
607 void mpz_init_zero(mpz_t *z) { in mpz_init_zero() argument
608 z->neg = 0; in mpz_init_zero()
609 z->fixed_dig = 0; in mpz_init_zero()
610 z->alloc = 0; in mpz_init_zero()
611 z->len = 0; in mpz_init_zero()
612 z->dig = NULL; in mpz_init_zero()
615 void mpz_init_from_int(mpz_t *z, mp_int_t val) { in mpz_init_from_int() argument
616 mpz_init_zero(z); in mpz_init_from_int()
617 mpz_set_from_int(z, val); in mpz_init_from_int()
620 void mpz_init_fixed_from_int(mpz_t *z, mpz_dig_t *dig, size_t alloc, mp_int_t val) { in mpz_init_fixed_from_int() argument
621 z->neg = 0; in mpz_init_fixed_from_int()
622 z->fixed_dig = 1; in mpz_init_fixed_from_int()
623 z->alloc = alloc; in mpz_init_fixed_from_int()
624 z->len = 0; in mpz_init_fixed_from_int()
625 z->dig = dig; in mpz_init_fixed_from_int()
626 mpz_set_from_int(z, val); in mpz_init_fixed_from_int()
629 void mpz_deinit(mpz_t *z) { in mpz_deinit() argument
630 if (z != NULL && !z->fixed_dig) { in mpz_deinit()
631 m_del(mpz_dig_t, z->dig, z->alloc); in mpz_deinit()
639 mpz_t *z = m_new_obj(mpz_t);
640 mpz_init_zero(z);
641 return z;
645 mpz_t *z = mpz_zero();
646 mpz_set_from_int(z, val);
647 return z;
651 mpz_t *z = mpz_zero();
652 mpz_set_from_ll(z, val, is_signed);
653 return z;
658 mpz_t *z = mpz_zero();
659 mpz_set_from_float(z, val);
660 return z;
665 mpz_t *z = mpz_zero();
666 mpz_set_from_str(z, str, len, neg, base);
667 return z;
671 STATIC void mpz_free(mpz_t *z) { in mpz_free() argument
672 if (z != NULL) { in mpz_free()
673 m_del(mpz_dig_t, z->dig, z->alloc); in mpz_free()
674 m_del_obj(mpz_t, z); in mpz_free()
678 STATIC void mpz_need_dig(mpz_t *z, size_t need) { in mpz_need_dig() argument
683 if (z->dig == NULL || z->alloc < need) { in mpz_need_dig()
686 assert(!z->fixed_dig); in mpz_need_dig()
687 z->dig = m_renew(mpz_dig_t, z->dig, z->alloc, need); in mpz_need_dig()
688 z->alloc = need; in mpz_need_dig()
694 mpz_t *z = m_new_obj(mpz_t); in mpz_clone() local
695 z->neg = src->neg; in mpz_clone()
696 z->fixed_dig = 0; in mpz_clone()
697 z->alloc = src->alloc; in mpz_clone()
698 z->len = src->len; in mpz_clone()
699 z->dig = m_new(mpz_dig_t, z->alloc); in mpz_clone()
700 memcpy(z->dig, src->dig, src->alloc * sizeof(mpz_dig_t)); in mpz_clone()
701 return z; in mpz_clone()
714 void mpz_set_from_int(mpz_t *z, mp_int_t val) { in mpz_set_from_int() argument
716 z->len = 0; in mpz_set_from_int()
720 mpz_need_dig(z, MPZ_NUM_DIG_FOR_INT); in mpz_set_from_int()
724 z->neg = 1; in mpz_set_from_int()
727 z->neg = 0; in mpz_set_from_int()
731 z->len = 0; in mpz_set_from_int()
733 z->dig[z->len++] = uval & DIG_MASK; in mpz_set_from_int()
738 void mpz_set_from_ll(mpz_t *z, long long val, bool is_signed) { in mpz_set_from_ll() argument
739 mpz_need_dig(z, MPZ_NUM_DIG_FOR_LL); in mpz_set_from_ll()
743 z->neg = 1; in mpz_set_from_ll()
746 z->neg = 0; in mpz_set_from_ll()
750 z->len = 0; in mpz_set_from_ll()
752 z->dig[z->len++] = uval & DIG_MASK; in mpz_set_from_ll()
758 void mpz_set_from_float(mpz_t *z, mp_float_t src) { in mpz_set_from_float() argument
760 z->neg = u.p.sgn; in mpz_set_from_float()
763 mpz_set_from_int(z, 0); in mpz_set_from_float()
767 mpz_set_from_int(z, 0); in mpz_set_from_float()
772 mpz_set_from_int(z, 0); in mpz_set_from_float()
775 mpz_set_from_int(z, 1); in mpz_set_from_float()
791 mpz_need_dig(z, dig_cnt); in mpz_set_from_float()
792 z->len = dig_cnt; in mpz_set_from_float()
794 memset(z->dig, 0, dig_ind * sizeof(mpz_dig_t)); in mpz_set_from_float()
797 z->dig[dig_ind++] = (frc << shft) & DIG_MASK; in mpz_set_from_float()
802 z->dig[dig_ind++] = frc & DIG_MASK; in mpz_set_from_float()
807 z->dig[dig_ind] = frc; in mpz_set_from_float()
816 size_t mpz_set_from_str(mpz_t *z, const char *str, size_t len, bool neg, unsigned int base) { in mpz_set_from_str() argument
822 mpz_need_dig(z, len * 8 / DIG_SIZE + 1); in mpz_set_from_str()
825 z->neg = 1; in mpz_set_from_str()
827 z->neg = 0; in mpz_set_from_str()
830 z->len = 0; in mpz_set_from_str()
846 z->len = mpn_mul_dig_add_dig(z->dig, z->len, base, v); in mpz_set_from_str()
852 void mpz_set_from_bytes(mpz_t *z, bool big_endian, size_t len, const byte *buf) { in mpz_set_from_bytes() argument
859 mpz_need_dig(z, (len * 8 + DIG_SIZE - 1) / DIG_SIZE); in mpz_set_from_bytes()
863 z->neg = 0; in mpz_set_from_bytes()
864 z->len = 0; in mpz_set_from_bytes()
872 z->dig[z->len++] = d & DIG_MASK; in mpz_set_from_bytes()
882 z->len = mpn_remove_trailing_zeros(z->dig, z->dig + z->len); in mpz_set_from_bytes()
888 bool mpz_is_pos(const mpz_t *z) {
889 return z->len > 0 && z->neg == 0;
892 bool mpz_is_odd(const mpz_t *z) {
893 return z->len > 0 && (z->dig[0] & 1) != 0;
896 bool mpz_is_even(const mpz_t *z) {
897 return z->len == 0 || (z->dig[0] & 1) == 0;
920 mp_int_t mpz_cmp_sml_int(const mpz_t *z, mp_int_t sml_int) {
922 if (z->neg == 0) {
927 if (z->len == 0) {
932 if (z->len == 0) {
936 if (z->len != 1) {
939 cmp = z->dig[0] - sml_int;
945 if (z->len == 0) {
950 if (z->len == 0) {
954 if (z->len != 1) {
957 cmp = -z->dig[0] - sml_int;
974 mpz_t *mpz_abs(const mpz_t *z) {
976 mpz_t *z2 = mpz_clone(z);
983 mpz_t *mpz_neg(const mpz_t *z) {
985 mpz_t *z2 = mpz_clone(z);
994 mpz_t *z = mpz_zero();
995 mpz_add_inpl(z, lhs, rhs);
996 return z;
1003 mpz_t *z = mpz_zero();
1004 mpz_sub_inpl(z, lhs, rhs);
1005 return z;
1012 mpz_t *z = mpz_zero();
1013 mpz_mul_inpl(z, lhs, rhs);
1014 return z;
1021 mpz_t *z = mpz_zero();
1022 mpz_pow_inpl(z, lhs, rhs);
1023 return z;
1041 void mpz_abs_inpl(mpz_t *dest, const mpz_t *z) { in mpz_abs_inpl() argument
1042 if (dest != z) { in mpz_abs_inpl()
1043 mpz_set(dest, z); in mpz_abs_inpl()
1051 void mpz_neg_inpl(mpz_t *dest, const mpz_t *z) { in mpz_neg_inpl() argument
1052 if (dest != z) { in mpz_neg_inpl()
1053 mpz_set(dest, z); in mpz_neg_inpl()
1061 void mpz_not_inpl(mpz_t *dest, const mpz_t *z) { in mpz_not_inpl() argument
1062 if (dest != z) { in mpz_not_inpl()
1063 mpz_set(dest, z); in mpz_not_inpl()
1533 mp_int_t mpz_hash(const mpz_t *z) { in mpz_hash() argument
1535 mpz_dig_t *d = z->dig + z->len; in mpz_hash()
1537 while (d-- > z->dig) { in mpz_hash()
1541 if (z->neg != 0) { in mpz_hash()
1589 void mpz_as_bytes(const mpz_t *z, bool big_endian, size_t len, byte *buf) { in mpz_as_bytes() argument
1594 mpz_dig_t *zdig = z->dig; in mpz_as_bytes()
1598 for (size_t zlen = z->len; zlen > 0; --zlen) { in mpz_as_bytes()
1603 if (z->neg) { in mpz_as_bytes()
1628 memset(buf, z->neg ? 0xff : 0x00, len); in mpz_as_bytes()