File: _Iterator.pm

package info (click to toggle)
libtfbs-perl 0.6.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 1,608 kB
  • ctags: 725
  • sloc: perl: 6,980; ansic: 699; makefile: 557; sh: 9
file content (71 lines) | stat: -rwxr-xr-x 1,543 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package TFBS::_Iterator;

use vars '@ISA';
use strict;
use Carp;
@ISA = qw(Bio::Root::Root);

#############################################################
# PUBLIC METHODS
#############################################################

sub new  {
    my ($caller, $arrayref, $sort_by, $reverse) = @_;
    my $class = ref $caller || $caller;
    my $self;
    if ($arrayref)  {
	$self = bless { _orig_array_ref     => [ @$arrayref ],
			_iterator_array_ref => [ @$arrayref ],
			_sort_by            => ($sort_by || undef),
			_reverse            => ($reverse || 0)
			},
		$class;
    }
    else  {
	croak("No valid array ref for Iterator of ".
	      (ref($class)  || $class)." provided:");
    }
    
    $self->_sort()    if $sort_by;
    $self->_reverse() if $reverse;

    return $self;
}
				       


sub current {

}

sub reset  {
    my ($self) = @_;
    @{$self->{_iterator_array_ref}} = @{$self->{_orig_array_ref}};
    $self->_sort()    if $self->{'_sort_by'};
    $self->_reverse() if $self->{'reverse'};
    return $self;
}

sub next {
    my $self = shift;
    return shift @{$self->{_iterator_array_ref}};
}
#################################################################
# PRIVATE METHODS
#################################################################

sub _sort  {
    my ($self, $sort_by) = @_;
    $self->throw("Generic iterator cannot sort ".ref($self).
		 " object by '$sort_by'.");
}

sub _reverse {
    my $self = shift;
    $self->{'_iterator_array_ref'} = 
	[ reverse @{ $self->{'_iterator_array_ref'} } ];
}