CXC-Number

 view release on metacpan or  search on metacpan

lib/CXC/Number/Sequence.pm  view on Meta::CPAN

package CXC::Number::Sequence;

# ABSTRACT: Numerical Sequence Generation

use v5.28;

use POSIX                        ();
use CXC::Number::Sequence::Types qw( Sequence );
use CXC::Number::Sequence::Failure -all;
use CXC::Number::Sequence::Utils qw( load_class );

use Moo;

use experimental 'signatures';

our $VERSION = '0.13';

use namespace::clean;

use MooX::StrictConstructor;

# subclass should define
has _raw_elements => (
    is       => 'lazy',
    init_arg => 'elements',
    isa      => Sequence,
    required => 1,
    coerce   => 1,
);


sub _convert ( $self, $bignum ) {
    require Ref::Util;

    return Ref::Util::is_plain_arrayref( $bignum )
      ? [ map { $_->numify } $bignum->@* ]
      : $bignum->numify;
}










sub elements ( $self ) {
    $self->_convert( $self->_raw_elements );
}









sub nelem ( $self ) {
    scalar $self->_raw_elements->@*;
}











sub spacing ( $self ) {
    my $elements = $self->_raw_elements;
    my @spacing  = map { $elements->[$_] - $elements->[ $_ - 1 ] } 1 .. ( $self->nelem - 1 );
    return $self->_convert( \@spacing );
}









sub min ( $self ) {
    return $self->_convert( $self->_raw_elements->[0] );
}






( run in 0.577 second using v1.01-cache-2.11-cpan-39bf76dae61 )