APR-HTTP-Headers-Compat
view release on metacpan or search on metacpan
lib/APR/HTTP/Headers/Compat/MagicArray.pm view on Meta::CPAN
package APR::HTTP::Headers::Compat::MagicArray;
use strict;
use warnings;
=head1 NAME
APR::HTTP::Headers::Compat::MagicArray - magic array for multivalue headers
=cut
sub TIEARRAY {
my ( $class, $fld, $magic, @vals ) = @_;
return bless {
a => \@vals,
f => $fld,
m => $magic,
}, $class;
}
sub FETCH {
my ( $self, $key ) = @_;
return $self->{a}[$key];
}
# Sync the table with our state
sub _sync {
my $self = shift;
my ( $table, $fld, @vals )
= ( $self->{m}->table, $self->{f}, @{ $self->{a} } );
$table->set( $fld, shift @vals );
$table->add( $fld, $_ ) for @vals;
}
sub STORE {
my ( $self, $key, $value ) = @_;
$self->{a}[$key] = $value;
$self->_sync;
}
sub FETCHSIZE { scalar @{ shift->{a} } }
sub STORESIZE { }
sub CLEAR {
my $self = shift;
$self->{a} = [];
$self->_sync;
}
sub PUSH {
my ( $self, @list ) = @_;
push @{ $self->{a} }, @list;
$self->_sync;
}
sub POP {
my $self = shift;
my $val = pop @{ $self->{a} };
$self->_sync;
return $val;
}
sub SHIFT {
my $self = shift;
my $val = shift @{ $self->{a} };
$self->_sync;
return $val;
}
sub UNSHIFT {
my ( $self, @list ) = @_;
unshift @{ $self->{a} }, @list;
$self->_sync;
( run in 0.683 second using v1.01-cache-2.11-cpan-39bf76dae61 )