package iterd;
use strict;
# class iterd: un petit itérateur pour traverser une
# arborescence et appliquer un traitement sur les fichiers
# On pourrait l'etendre pour 
# 1. rajouter des extensions à filter etc ..
# 2. donner une regexp pour la forme du nom de fichier 
# 3. Donne une fonction à appeler sur le nom du directory
# etc .. 
# 
## constructeur: 
# 
sub new {
    my ($class) = @_ ;
    $class = ref($class) || $class ;
    my $this = {};
    bless($this, $class);
    $this->{FUNC} = \&undef;
    $this->{DATA} = \&undef;
    return $this;
}
#
# Parcours un directory 
#
sub traverse {
    my ($this,$path) = @_ ; 
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
	next if $file =~ /^\.\.?$/;
	$file = $path."/".$file;
	if (-d $file) {
	    traverse($this,$file);
	}
	if (-f $file) {
	    $this->{FUNC}->($file, $this->{DATA} ) ; 
	}
    }
}
# setFunction:
# declare la function à appeler sur chaque fichier.
#
sub setFunction {
      my ($this, $f ) = @_ ; 
      $this->{FUNC} = $f;
}
# setData:
# pour que la function puisse recevoir des données.
#
sub setData {
      my ($this, $d ) = @_ ; 
      $this->{DATA} = $d;
}

#
# setExtension:
# declare la liste des extensions à traiter ( defaut = toutes )
# ...
#sub setExtension {
#      my ($this, $e ) = @_ ; 
#      $this->{EXT} = $e;
#}
1;
