DBIx-ObjectMapper
view release on metacpan or search on metacpan
lib/DBIx/ObjectMapper/Session/Array.pm view on Meta::CPAN
package DBIx::ObjectMapper::Session::Array;
use strict;
use warnings;
use Scalar::Util qw(refaddr weaken);
use base qw(Tie::Array);
sub new {
my ( $class, $name, $mapper, @val ) = @_;
my $array = [];
tie @$array, $class, $name, $mapper, \@val;
return $array;
}
sub TIEARRAY {
my $class = shift;
my $name = shift;
my $mapper = shift;
my $val = shift;
return bless {
value => $val,
name => $name,
mapperaddr => refaddr($mapper->instance),
mapper => ref($mapper),
}, $class;
}
sub name { $_[0]->{name} }
sub mapper {
my $self = shift;
return $self->{mapper}->get( $self->{mapperaddr} );
}
sub _remove {
my $self = shift;
if( my $mapper = $self->mapper ) {
$mapper->remove_multi_val( $self->name, $_ )
for grep { defined $_ } @_;
}
return @_;
}
sub _add {
my $self = shift;
if( my $mapper = $self->mapper ) {
$mapper->add_multi_val( $self->name, $_ )
for grep { defined $_ } @_;
}
return @_;
}
sub FETCHSIZE { scalar @{$_[0]->{value}} }
sub FETCH {
my ($self, $index) = @_;
return $self->{value}->[$index];
}
#sub STORESIZE {}
( run in 0.567 second using v1.01-cache-2.11-cpan-39bf76dae61 )