Raw content of Bio::DB::GFF::Adaptor::dbi::iterator
=head1 NAME
Bio::DB::GFF::Adaptor::dbi::iterator - iterator for Bio::DB::GFF::Adaptor::dbi
=head1 SYNOPSIS
For internal use only
=head1 DESCRIPTION
This is an internal module that is used by the Bio::DB::GFF DBI
adaptor to return an iterator across a sequence feature query. The
object has a single method, next_feature(), that returns the next
feature from the query. The method next_seq() is an alias for
next_feature().
=head1 BUGS
None known yet.
=head1 SEE ALSO
L,
=head1 AUTHOR
Lincoln Stein Elstein@cshl.orgE.
Copyright (c) 2001 Cold Spring Harbor Laboratory.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
package Bio::DB::GFF::Adaptor::dbi::iterator;
use strict;
use constant STH => 0;
use constant CALLBACK => 1;
use constant CACHE => 2;
*next_seq = \&next_feature;
sub new {
my $class = shift;
my ($sth,$callback) = @_;
return bless [$sth,$callback,[]],$class;
}
sub next_feature {
my $self = shift;
return shift @{$self->[CACHE]} if @{$self->[CACHE]};
my $sth = $self->[STH] or return;
my $callback = $self->[CALLBACK];
my $features;
while (1) {
if (my @row = $sth->fetchrow_array) {
$features = $callback->(@row);
last if $features;
} else {
$sth->finish;
undef $self->[STH];
$features = $callback->();
last;
}
}
$self->[CACHE] = $features or return;
shift @{$self->[CACHE]};
}
1;