Acme-IEnumerable
view release on metacpan or search on metacpan
lib/Acme/IEnumerable.pm view on Meta::CPAN
my $projected = $self->{_zero} + $index * $self->{_dir};
$self->{_list}->[$projected];
}
sub last {
my ($self) = @_;
croak unless $self->count;
$self->element_at($self->count - 1);
}
sub last_or_default {
my ($self, $default) = @_;
return $default unless $self->count;
$self->element_at($self->count - 1);
}
sub first {
my ($self) = @_;
croak "No elements for 'first'" unless $self->count;
$self->element_at(0);
}
sub first_or_default {
my ($self, $default) = @_;
return $default unless $self->count;
$self->element_at(0);
}
sub from_list {
my $class = shift;
my @list = @_;
return _create \@list, sub {
return sub {
state $index = 0;
return unless $index <= $#list;
lib/Acme/IEnumerable.pm view on Meta::CPAN
return $$last unless ref $item;
$last = $item;
}
Carp::confess("Impossible");
}
sub first {
$_[0]->element_at(0);
}
sub first_or_default {
my ($self, $default) = @_;
my $base = $self->new();
my $item = $base->();
return $default unless ref $item;
return $$item;
}
sub last_or_default {
my ($self, $default) = @_;
my $base = $self->new();
my $item = $base->();
return $default unless ref $item;
while (1) {
my $next = $base->();
return $$item unless ref $next;
$item = $next;
}
}
sub count {
my ($self, $predicate) = @_;
$predicate //= sub { 1 };
lib/Acme/IEnumerable.pm view on Meta::CPAN
#####################################################################
#
#####################################################################
# sub select_many { ... }
# sub contains { ... }
# sub sequence_equal { ... }
# sub distinct { ... }
# sub union { ... }
# sub except { ... }
# sub intersect { ... }
# sub default_if_empty { ... }
# sub single_or_default { ... }
# sub concat { ... }
# sub group_join { ... }
# sub join { ... }
# sub empty { ... }
# sub cast { ... }
# sub to_lookup { ...}
# sub to_dictionary { ... }
#####################################################################
#
( run in 0.538 second using v1.01-cache-2.11-cpan-0a6323c29d9 )