Dallycot

 view release on metacpan or  search on metacpan

lib/Dallycot/Value/Vector.pm  view on Meta::CPAN

package Dallycot::Value::Vector;
our $AUTHORITY = 'cpan:JSMITH';

# ABSTRACT: A finite length, in-memory ordered set of values

use strict;
use warnings;

use utf8;
use parent 'Dallycot::Value::Collection';

use Promises qw(deferred collect);

sub new {
  my ( $class, @values ) = @_;
  $class = ref $class || $class;
  return bless \@values => $class;
}

sub values {
  @{$_[0]};
}

sub is_empty {
  my ($self) = @_;

  return @$self == 0;
}

sub to_rdf {
  my($self, $model) = @_;

  $model -> list(map { $_ -> to_rdf($model) } @$self);
}

sub is_defined { return 1 }

sub as_text {
  my ($self) = @_;

  return
      "< "
    . join( ", ", map { defined($_) ? ( ( $_ eq $self ) ? '(self)' : $_->as_text ) : '(undef)' } @$self )
    . " >";
}

sub prepend {
  my ( $self, @things ) = @_;

  return bless [ @things, @$self ] => __PACKAGE__;
}

sub calculate_length {
  my ( $self, $engine ) = @_;

  return Dallycot::Value::Numeric->new( scalar @$self );
}

sub calculate_reverse {
  my ( $self, $engine ) = @_;

  my $d = deferred;

  $d->resolve( $self->new( reverse @$self ) );

  return $d->promise;
}

sub apply_map {
  my ( $self, $engine, $transform ) = @_;

  return collect( map { $transform->apply( $engine, {}, $_ ) } @$self )->then(
    sub {
      my @values = map {@$_} @_;
      bless \@values => __PACKAGE__;
    }
  );

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.604 second using v1.00-cache-2.02-grep-82fe00e-cpan-48ebf85a1963 )