af464f1f49a17631a038e1a945d5278f0fe23954
[p5sagit/p5-mst-13.2.git] / ext / Math / BigInt / FastCalc / FastCalc.pm
1 package Math::BigInt::FastCalc;
2
3 use 5.006002;
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.15';
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 length 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
64 =head1 NAME
65
66 Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed
67
68 =head1 SYNOPSIS
69
70 Provides support for big integer calculations. Not intended to be used by
71 other modules. Other modules which sport the same functions can also be used
72 to support Math::BigInt, like L<Math::BigInt::GMP> or L<Math::BigInt::Pari>.
73
74 =head1 DESCRIPTION
75
76 In order to allow for multiple big integer libraries, Math::BigInt was
77 rewritten to use library modules for core math routines. Any module which
78 follows the same API as this can be used instead by using the following:
79
80         use Math::BigInt lib => 'libname';
81
82 'libname' is either the long name ('Math::BigInt::Pari'), or only the short
83 version like 'Pari'. To use this library:
84
85         use Math::BigInt lib => 'FastCalc';
86
87 Note that from L<Math::BigInt> v1.76 onwards, FastCalc will be loaded
88 automatically, if possible.
89
90 =head1 STORAGE
91
92 FastCalc works exactly like Calc, in stores the numbers in decimal form,
93 chopped into parts.
94
95 =head1 METHODS
96
97 The following functions are now implemented in FastCalc.xs:
98
99         _is_odd         _is_even        _is_one         _is_zero
100         _is_two         _is_ten
101         _zero           _one            _two            _ten
102         _acmp           _len            _num
103         _inc            _dec
104         __strip_zeros   _copy
105
106 =head1 LICENSE
107  
108 This program is free software; you may redistribute it and/or modify it under
109 the same terms as Perl itself. 
110
111 =head1 AUTHORS
112
113 Original math code by Mark Biggar, rewritten by Tels L<http://bloodgate.com/>
114 in late 2000.
115 Seperated from BigInt and shaped API with the help of John Peacock.
116 Fixed, sped-up and enhanced by Tels http://bloodgate.com 2001-2003.
117 Further streamlining (api_version 1 etc.) by Tels 2004-2007.
118
119 =head1 SEE ALSO
120
121 L<Math::BigInt>, L<Math::BigFloat>,
122 L<Math::BigInt::GMP>, L<Math::BigInt::FastCalc> and L<Math::BigInt::Pari>.
123
124 =cut