diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Math/BigInt/FastCalc.pm')
-rw-r--r-- | Master/tlpkg/tlperl/lib/Math/BigInt/FastCalc.pm | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Math/BigInt/FastCalc.pm b/Master/tlpkg/tlperl/lib/Math/BigInt/FastCalc.pm new file mode 100644 index 00000000000..2b4aea58dc2 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/Math/BigInt/FastCalc.pm @@ -0,0 +1,125 @@ +package Math::BigInt::FastCalc; + +use 5.006; +use strict; +# use warnings; # dont use warnings for older Perls + +use DynaLoader; +use Math::BigInt::Calc; + +use vars qw/@ISA $VERSION $BASE $BASE_LEN/; + +@ISA = qw(DynaLoader); + +$VERSION = '0.19'; + +bootstrap Math::BigInt::FastCalc $VERSION; + +############################################################################## +# global constants, flags and accessory + +# announce that we are compatible with MBI v1.70 and up +sub api_version () { 1; } + +BEGIN + { + # use Calc to override the methods that we do not provide in XS + + for my $method (qw/ + str + add sub mul div + rsft lsft + mod modpow modinv + gcd + pow root sqrt log_int fac nok + digit check + from_hex from_bin from_oct as_hex as_bin as_oct + zeros base_len + xor or and + alen 1ex + /) + { + no strict 'refs'; + *{'Math::BigInt::FastCalc::_' . $method} = \&{'Math::BigInt::Calc::_' . $method}; + } + my ($AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN_SMALL, $MAX_VAL); + + # store BASE_LEN and BASE to later pass it to XS code + ($BASE_LEN, $AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN_SMALL, $MAX_VAL, $BASE) = + Math::BigInt::Calc::_base_len(); + + } + +sub import + { + _set_XS_BASE($BASE, $BASE_LEN); + } + +############################################################################## +############################################################################## + +1; +__END__ +=pod + +=head1 NAME + +Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed + +=head1 SYNOPSIS + +Provides support for big integer calculations. Not intended to be used by +other modules. Other modules which sport the same functions can also be used +to support Math::BigInt, like L<Math::BigInt::GMP> or L<Math::BigInt::Pari>. + +=head1 DESCRIPTION + +In order to allow for multiple big integer libraries, Math::BigInt was +rewritten to use library modules for core math routines. Any module which +follows the same API as this can be used instead by using the following: + + use Math::BigInt lib => 'libname'; + +'libname' is either the long name ('Math::BigInt::Pari'), or only the short +version like 'Pari'. To use this library: + + use Math::BigInt lib => 'FastCalc'; + +Note that from L<Math::BigInt> v1.76 onwards, FastCalc will be loaded +automatically, if possible. + +=head1 STORAGE + +FastCalc works exactly like Calc, in stores the numbers in decimal form, +chopped into parts. + +=head1 METHODS + +The following functions are now implemented in FastCalc.xs: + + _is_odd _is_even _is_one _is_zero + _is_two _is_ten + _zero _one _two _ten + _acmp _len _num + _inc _dec + __strip_zeros _copy + +=head1 LICENSE + +This program is free software; you may redistribute it and/or modify it under +the same terms as Perl itself. + +=head1 AUTHORS + +Original math code by Mark Biggar, rewritten by Tels L<http://bloodgate.com/> +in late 2000. +Seperated from BigInt and shaped API with the help of John Peacock. +Fixed, sped-up and enhanced by Tels http://bloodgate.com 2001-2003. +Further streamlining (api_version 1 etc.) by Tels 2004-2007. + +=head1 SEE ALSO + +L<Math::BigInt>, L<Math::BigFloat>, +L<Math::BigInt::GMP>, L<Math::BigInt::FastCalc> and L<Math::BigInt::Pari>. + +=cut |