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 )