APR-HTTP-Headers-Compat
view release on metacpan or search on metacpan
lib/APR/HTTP/Headers/Compat/MagicHash.pm view on Meta::CPAN
sub EXISTS {
my ( $self, $key ) = @_;
my %fld = map { $_ => 1 } $self->_keys;
return exists $fld{$key};
}
sub _mkkeys {
my $self = shift;
my @k = ();
my $rm = $self->{rmap};
my %seen = ();
$self->table->do(
sub {
my ( $k, $v ) = @_;
my $kk = defined $rm->{$k} ? $rm->{$k} : lc $k;
push @k, $kk unless $seen{$kk}++;
} );
return \@k;
}
sub _keys {
my $self = shift;
return @{ $self->{keys} ||= $self->_mkkeys };
}
sub _changed {
my $self = shift;
delete $self->{keys};
}
sub FIRSTKEY {
my ( $self ) = @_;
$self->{pos} = 0;
return ( $self->_keys )[0];
}
sub NEXTKEY {
my ( $self, $lastkey ) = @_;
my @keys = $self->_keys;
unless ( $keys[ $self->{pos} ] eq $lastkey ) {
my $nk = scalar @{ $self->{keys} };
for my $i ( 0 .. $nk ) {
if ( $keys[$i] eq $lastkey ) {
$self->{pos} = $i;
last;
}
}
}
return $keys[ ++$self->{pos} ];
}
sub SCALAR {
my ( $self ) = @_;
return scalar $self->_keys;
}
sub DESTROY {
my ( $self ) = @_;
# use Data::Dumper;
# print STDERR "# ", Dumper($self);
# print STDERR "# <<<\n";
# $self->table->do(
# sub {
# my ( $k, $v ) = @_;
# print STDERR "# $k => $v\n";
# } );
# print STDERR "# >>>\n";
}
sub UNTIE { }
1;
# vim:ts=2:sw=2:sts=2:et:ft=perl
( run in 2.167 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )