This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Bump Safe's VERSION to 2.28
[perl5.git] / dist / Math-BigInt-FastCalc / FastCalc.pm
1 package Math::BigInt::FastCalc;
2
3 use 5.006;
4 use strict;
5 # use warnings; # dont use warnings for older Perls
6
7 use DynaLoader;
8 use Math::BigInt::Calc;
9
10 use vars qw/@ISA $VERSION $BASE $BASE_LEN/;
11
12 @ISA = qw(DynaLoader);
13
14 $VERSION = '0.21';
15
16 bootstrap Math::BigInt::FastCalc $VERSION;
17
18 ##############################################################################
19 # global constants, flags and accessory
20
21 # announce that we are compatible with MBI v1.70 and up
22 sub api_version () { 1; }
23  
24 BEGIN
25   {
26   # use Calc to override the methods that we do not provide in XS
27
28   for my $method (qw/
29     str
30     add sub mul div
31     rsft lsft
32     mod modpow modinv
33     gcd
34     pow root sqrt log_int fac nok
35     digit check
36     from_hex from_bin from_oct as_hex as_bin as_oct
37     zeros base_len
38     xor or and
39     alen 1ex
40     /)
41     {
42     no strict 'refs';
43     *{'Math::BigInt::FastCalc::_' . $method} = \&{'Math::BigInt::Calc::_' . $method};
44     }
45   my ($AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN_SMALL, $MAX_VAL);
46  
47   # store BASE_LEN and BASE to later pass it to XS code 
48   ($BASE_LEN, $AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN_SMALL, $MAX_VAL, $BASE) =
49     Math::BigInt::Calc::_base_len();
50
51   }
52
53 sub import
54   {
55   _set_XS_BASE($BASE, $BASE_LEN);
56   }
57
58 ##############################################################################
59 ##############################################################################
60
61 1;
62 __END__
63 =pod
64
65 =head1 NAME
66
67 Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed
68
69 =head1 SYNOPSIS
70
71 Provides support for big integer calculations. Not intended to be used by
72 other modules. Other modules which sport the same functions can also be used
73 to support Math::BigInt, like L<Math::BigInt::GMP> or L<Math::BigInt::Pari>.
74
75 =head1 DESCRIPTION
76
77 In order to allow for multiple big integer libraries, Math::BigInt was
78 rewritten to use library modules for core math routines. Any module which
79 follows the same API as this can be used instead by using the following:
80
81         use Math::BigInt lib => 'libname';
82
83 'libname' is either the long name ('Math::BigInt::Pari'), or only the short
84 version like 'Pari'. To use this library:
85
86         use Math::BigInt lib => 'FastCalc';
87
88 Note that from L<Math::BigInt> v1.76 onwards, FastCalc will be loaded
89 automatically, if possible.
90
91 =head1 STORAGE
92
93 FastCalc works exactly like Calc, in stores the numbers in decimal form,
94 chopped into parts.
95
96 =head1 METHODS
97
98 The following functions are now implemented in FastCalc.xs:
99
100         _is_odd         _is_even        _is_one         _is_zero
101         _is_two         _is_ten
102         _zero           _one            _two            _ten
103         _acmp           _len            _num
104         _inc            _dec
105         __strip_zeros   _copy
106
107 =head1 LICENSE
108  
109 This program is free software; you may redistribute it and/or modify it under
110 the same terms as Perl itself. 
111
112 =head1 AUTHORS
113
114 Original math code by Mark Biggar, rewritten by Tels L<http://bloodgate.com/>
115 in late 2000.
116 Seperated from BigInt and shaped API with the help of John Peacock.
117 Fixed, sped-up and enhanced by Tels http://bloodgate.com 2001-2003.
118 Further streamlining (api_version 1 etc.) by Tels 2004-2007.
119
120 =head1 SEE ALSO
121
122 L<Math::BigInt>, L<Math::BigFloat>,
123 L<Math::BigInt::GMP>, L<Math::BigInt::FastCalc> and L<Math::BigInt::Pari>.
124
125 =cut