Dallycot
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Dallycot/Value/Numeric.pm view on Meta::CPAN
package Dallycot::Value::Numeric;
our $AUTHORITY = 'cpan:JSMITH';
# ABSTRACT: An arbitrary precision numeric value
use strict;
use warnings;
use utf8;
use parent 'Dallycot::Value::Any';
use Promises qw(deferred);
sub new {
my ( $class, $value ) = @_;
$class = ref $class || $class;
return bless [ ref($value) ? $value : Math::BigRat->new($value) ] => $class;
}
sub to_rdf {
my($self, $model) = @_;
if($self->[0]->is_int) {
return $model -> integer($self -> [0] -> bstr);
}
elsif($self -> [0] -> is_nan) {
my $bnode = $model->bnode;
$model -> add_type($bnode, 'loc:NotANumber');
return $bnode;
}
elsif($self -> [0] -> is_inf) {
my $bnode = $model -> bnode;
$model -> add_type($bnode, 'loc:PositiveInfinity');
return $bnode;
}
elsif($self -> [0] -> is_inf('-')) {
my $bnode = $model -> bnode;
$model -> add_type($bnode, 'loc:NegativeInifinity');
return $bnode;
}
else {
my $bnode = $model -> bnode;
$model -> add_type($bnode, 'loc:Rational');
my($n, $d) = $self -> [0] -> parts;
$model -> add_connection($bnode, 'loc:denominator',
$model -> integer($d -> bstr)
);
$model -> add_connection($bnode, 'loc:numerator',
$model -> integer($n->bstr)
);
return $bnode;
}
}
sub id {
my ($self) = @_;
return $self->[0]->bstr . "^^Numeric";
}
sub is_defined { return 1 }
sub is_empty {return}
sub as_text {
my ($self) = @_;
return $self->[0]->bstr;
}
sub value {
my ($self) = @_;
return $self->[0];
}
sub calculate_length {
my ( $self, $engine ) = @_;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.380 second using v1.00-cache-2.02-grep-82fe00e-cpan-48ebf85a1963 )