use strict; package Adapters::ParallelFiles; sub new { my $class = shift; my ($src_path, $trg_path) = @_; my $self = { src_path => $src_path, trg_path => $trg_path, src_handle => undef, trg_handle => undef, current_src => undef, current_trg => undef, line_no => -1, }; open($self->{src_handle}, "<:utf8", $src_path) or die; open($self->{trg_handle}, "<:utf8", $trg_path) or die; bless $self, $class; return $self; } sub HasNext() { my $self = shift; my $src_handle = $self->{src_handle}; my $trg_handle = $self->{trg_handle}; if(defined($self->{current_src} = <$src_handle>) and defined($self->{current_trg} = <$trg_handle>)) { chomp($self->{current_src}, $self->{current_trg}); $self->{line_no}++; return 1; } else { return 0; } } sub CurrentSource { my $self = shift; return $self->{current_src}; } sub CurrentTarget { my $self = shift; return $self->{current_trg}; } sub LineNo { my $self = shift; return $self->{line_no}; } sub Reset { my $self = shift; close($self->{src_handle}) or die; close($self->{trg_handle}) or die; open($self->{src_handle}, "<:utf8", $self->{src_path}) or die; open($self->{trg_handle}, "<:utf8", $self->{trg_path}) or die; $self->{current_src} = undef; $self->{current_trg} = undef; $self->{line_no} = -1; } 1;