// GobDecode implements the gob.GobDecoder interface. func (z *Int) GobDecode(buf []byte) error { if len(buf) == 0 { return errors.New("Int.GobDecode: no data") } b := buf[0] if b>>1 != intGobVersion { return errors.New(fmt.Sprintf("Int.GobDecode: encoding version %d not supported", b>>1)) } z.SetBytes(buf[1:]) if b&1 != 0 { C.mpz_neg(&z.i[0], &z.i[0]) } return nil }
// SetInt64 sets z to x and returns z. func (z *Int) SetInt64(x int64) *Int { z.doinit() // Test for truncation y := C.long(x) if int64(y) == x { C.mpz_set_si(&z.i[0], y) } else { negative := false if x < 0 { x = -x negative = true } C.mpz_import(&z.i[0], 1, 0, 8, 0, 0, unsafe.Pointer(&x)) if negative { C.mpz_neg(&z.i[0], &z.i[0]) } } return z }
// Neg sets z = -x and returns z. func (z *Int) Neg(x *Int) *Int { x.doinit() z.doinit() C.mpz_neg(&z.i[0], &x.i[0]) return z }
// Neg sets z = -x and returns z. func (z *Int) Neg(x *Int) *Int { x.doinit() z.doinit() C.mpz_neg(z.ptr, x.ptr) return z }