package SDLx::Surface::TiedMatrix;
use strict;
use warnings;
use SDLx::Surface::TiedMatrixRow;
use base 'Tie::Array';
sub new {
my $class = shift;
my $matrix = shift;
my $self = {
matrix => $matrix,
rows => [],
};
return bless $self, $class;
}
sub TIEARRAY {
return SDLx::Surface::TiedMatrix->new( $_[1] );
}
sub FETCH {
my ( $self, $y ) = @_;
unless ( $self->{rows}[$y] ) {
tie my @row, 'SDLx::Surface::TiedMatrixRow', $self->{matrix}, $y;
$self->{rows}[$y] = \@row;
}
return $self->{rows}[$y];
}
sub FETCHSIZE {
my ( $self, $x ) = @_;
return $self->{matrix}->surface->h;
}
1;