1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# GMP mpz module.
# Copyright 2001-2003 Free Software Foundation, Inc.
#
# This file is part of the GNU MP Library.
#
# The GNU MP Library is free software; you can redistribute it and/or modify
# it under the terms of either:
#
# * the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your
# option) any later version.
#
# or
#
# * the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any
# later version.
#
# or both in parallel, as here.
#
# The GNU MP Library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received copies of the GNU General Public License and the
# GNU Lesser General Public License along with the GNU MP Library. If not,
# see https://www.gnu.org/licenses/.
package GMP::Mpz;
require GMP;
require Exporter;
@ISA = qw(GMP Exporter);
@EXPORT = qw();
@EXPORT_OK = qw();
%EXPORT_TAGS = ('all' => [qw(
bin cdiv cdiv_2exp clrbit combit congruent_p
congruent_2exp_p divexact divisible_p
divisible_2exp_p even_p fac fdiv fdiv_2exp fib
fib2 gcd gcdext hamdist invert jacobi kronecker
lcm lucnum lucnum2 mod mpz mpz_export
mpz_import nextprime odd_p perfect_power_p
perfect_square_p popcount powm probab_prime_p
realloc remove root roote rootrem scan0 scan1
setbit sizeinbase sqrtrem tdiv tdiv_2exp
tstbit)],
'constants' => [@EXPORT],
'noconstants' => [@EXPORT]);
Exporter::export_ok_tags('all');
use overload
'+' => \&overload_add, '+=' => \&overload_addeq,
'-' => \&overload_sub, '-=' => \&overload_subeq,
'*' => \&overload_mul, '*=' => \&overload_muleq,
'/' => \&overload_div, '/=' => \&overload_diveq,
'%' => \&overload_rem, '%=' => \&overload_remeq,
'<<' => \&overload_lshift, '<<=' => \&overload_lshifteq,
'>>' => \&overload_rshift, '>>=' => \&overload_rshifteq,
'**' => \&overload_pow, '**=' => \&overload_poweq,
'&' => \&overload_and, '&=' => \&overload_andeq,
'|' => \&overload_ior, '|=' => \&overload_ioreq,
'^' => \&overload_xor, '^=' => \&overload_xoreq,
'bool' => \&overload_bool,
'not' => \&overload_not,
'!' => \&overload_not,
'~' => \&overload_com,
'<=>' => \&overload_spaceship,
'++' => \&overload_inc,
'--' => \&overload_dec,
'=' => \&overload_copy,
'abs' => \&overload_abs,
'neg' => \&overload_neg,
'sqrt' => \&overload_sqrt,
'""' => \&overload_string;
sub import {
foreach (@_) {
if ($_ eq ':constants') {
overload::constant ('integer' => \&overload_constant,
'binary' => \&overload_constant,
'float' => \&overload_constant);
} elsif ($_ eq ':noconstants') {
overload::remove_constant ('integer' => \&overload_constant,
'binary' => \&overload_constant,
'float' => \&overload_constant);
}
}
goto &Exporter::import;
}
1;
__END__
# Local variables:
# perl-indent-level: 2
# End:
|