package Parse::Win32Registry::File; use strict; use warnings; sub get_filehandle { my $self = shift; return $self->{_filehandle}; } sub get_filename { my $self = shift; return $self->{_filename}; } sub get_length { my $self = shift; return $self->{_length}; } sub get_entry_iterator { my $self = shift; my $entry_iter; my $block_iter = $self->get_block_iterator; return Parse::Win32Registry::Iterator->new(sub { while (1) { if (defined $entry_iter) { my $entry = $entry_iter->(); if (defined $entry) { return $entry; } } # entry iterator is undefined or finished my $block = $block_iter->(); if (!defined $block) { return; # block iterator finished } $entry_iter = $block->get_entry_iterator; } }); } # method provided for backwards compatibility sub move_to_first_entry { my $self = shift; $self->{_entry_iter} = undef; } # method provided for backwards compatibility sub get_next_entry { my $self = shift; my $entry_iter = $self->{_entry_iter}; if (!defined $entry_iter) { $self->{_entry_iter} = $entry_iter = $self->get_entry_iterator; } return $entry_iter->(); } 1;