diff options
Diffstat (limited to 'systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm')
-rw-r--r-- | systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm b/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm new file mode 100644 index 0000000000..04dec98bc5 --- /dev/null +++ b/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm @@ -0,0 +1,58 @@ +#!perl + +package Math::BigFloat::Trace; + +require 5.010; +use strict; +use warnings; + +use Exporter; +use Math::BigFloat; + +our ($accuracy, $precision, $round_mode, $div_scale); + +our @ISA = qw(Exporter Math::BigFloat); + +our $VERSION = '0.49'; + +use overload; # inherit overload from Math::BigFloat + +# Globals +$accuracy = $precision = undef; +$round_mode = 'even'; +$div_scale = 40; + +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + + my $value = shift; + my $a = $accuracy; + $a = $_[0] if defined $_[0]; + my $p = $precision; + $p = $_[1] if defined $_[1]; + my $self = Math::BigFloat->new($value, $a, $p, $round_mode); + + # remember, downgrading may return a BigInt, so don't meddle with class + # bless $self, $class; + + print "MBF new '$value' => '$self' (", ref($self), ")"; + return $self; +} + +sub import { + print "MBF import ", join(' ', @_); + my $self = shift; + + # we catch the constants, the rest goes go BigFloat + my @a = (); + foreach (@_) { + push @a, $_ if $_ ne ':constant'; + } + overload::constant float => sub { $self->new(shift); }; + + Math::BigFloat->import(@a); # need it for subclasses +# $self->export_to_level(1,$self,@_); # need this ? +} + +1; |