
Data::Range::Compare::Stream::Iterator::Base - Abstract class

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;
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}=$self->{next_line} ? 1 : 0;
chomp $line;
return new Data::Range::Compare::Stream(split /\s+/,$line);
}
1;

This module acts as the base class for all Data::Range::Compare::Stream::Iterator classes.
The default object constructor takes a hash of arguments, and returns a blessed anonymous hash. If you want to do anything other than that you will need to overload this function!
The internals return $self->{has_next}. If you want to do anything other than that you will need to overload this function!
Objects returned from this function should extend Data::Range::Compare::Stream::Result::Base
Returns the package name of $iterator
This object needs to be called when ranges are being consolidated.
Deletes $id from $iterator.
Returns true if the object was auto generated by another object.
Returns true if this $iterator auto generated a new iterator object
Returns the column id of this $iterator.
Sets the column id of $iterator
Returns true if this $iterator was auto generated by another iterator.
Returns the root object if $iterator->has_root is true.
Returns the column_id of the object that auto generated $iterator, returns current column_id of the object was not auto generated.
Returns the child object if $iterator->has_child is true.
Returns the child column_id if $iterator->has_child is true.
Given a $result from $iterator->get_next, this interface converts the $range object into a line that can be parsed by $iterator->parse_line($line). Think of this function as a data serializer for range objects generated by an $iterator object. When overloading this function or using a call back make sure result_to_line can be parsed by parse_line.
sub result_to_line {
my ($self,$result)=@_;
return $self->{result_to_line}->($result) if defined($self->{result_to_line});
my $range=$result->get_common;
my $line=$range->range_start_to_string.' '.$range->range_end_to_string."\n";
return $line;
}
Given a $line returns the arguments required to construct an object that extends or implements Data::Range::Compare::Stream. When overloading or passing in constructor arguments that provide a call back make sure result_to_line produces the expected line parse_line expects.
sub parse_line {
my ($self,$line)=@_;
return $self->{parse_line}->($line) if defined($self->{parse_line});
chomp $line;
[split /\s+/,$line];
}

Data::Range::Compare::Stream::Cookbook

Michael Shipper

As of version 0.001 the Project has been moved to Source-Forge.net
Data Range Compare https://sourceforge.net/projects/data-range-comp/

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.