=pod
=head1 NAME
Data::Range::Compare::Stream::Cookbook::FILE_RESULT_EXAMPLE - Doc on how to build file result iterators
=head1 DESCRIPTION
This section shows how to roll your own Consolidation result iterator, based on file iteration
=head1 Special notes
This example assumes your data contains no overlaps no duplicates and is pre-sorted in the desired order
=head2 Implementing a new Data::Range::Compare::Stream::Iterator::Consolidate class
Source File
1 2
3 5
9 11
12 12
98 174
Example package
package MyIterator;
use strict;
use warnings;
use IO::File;
use IO::Select;
use base qw(Data::Range::Compare::Stream::Iterator::Base);
use Data::Range::Compare::Stream::Iterator::Consolidate::Result;
use Data::Range::Compare::Stream;
sub new {
my ($class,%args)=@_;
my $has_next;
my $self=$class->SUPER::new(%args);
if(defined($args{filename})) {
my $fh=IO::File->new($args{filename});
if($fh) {
$self->{fh}=$fh;
my $line=$fh->getline;
$self->{next_line}=$line;
$has_next=defined($line);
} else {
$self->{msg}="Error could not open $args{filename} error was: $!";
}
}
$self->{has_next}=$has_next;
return $self;
}
sub get_next {
my ($self)=@_;
return undef unless $self->has_next;
my $line=$self->{next_line};
$self->{next_line}=$self->{fh}->getline;
$self->{has_next}=defined($self->{next_line});
chomp $line;
my $range=new Data::Range::Compare::Stream(split /\s+/,$line);
return new Data::Range::Compare::Stream::Iterator::Consolidate::Result($range,$range,$range);
}
1;
=head2 Putting it all togeather
Now we can use the result iterator.
use strict;
use warnings;
use MyIterator;
my $iterator=new MyIterator(filename=>'file_example.src');
while($iterator->has_next) {
print $iterator->get_next,"\n";
}
=head1 AUTHOR
Michael Shipper
=head1 Source-Forge Project
As of version 0.001 the Project has been moved to Source-Forge.net
L<Data Range Compare|https://sourceforge.net/projects/data-range-comp/>
L<https://sourceforge.net/projects/data-range-comp/>
=head1 COPYRIGHT
Copyright 2011 Michael Shipper. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut