FIFO : First In, First Out. Le premier arrivé est le premier servi, comme théoriquement dans une file d'attente (quand les grugeurs sont en RTT...). Grand classique de l'informatique, la "file" ("queue" en anglais), ici en version Ruby. En général, on l'implémente avec des cellules ayant pour attributs : la valeur stockée, un chemin (pointeur) vers la cellule suivante et parfois un chemin vers la précédente. En Ruby, pas de pointeurs, donc ma modeste version est à base de tableau.
Le code :
class Fifo
def initialize an_array
@conten = an_array
end
def add val
@conten.push val
end
def add_sev an_arr
for i in an_arr
self.add i
end
end
def remove number = 1
temp = @conten[number, @conten.size-1]
@conten = temp
end
def lenght
@conten.size
end
def cell int
@conten[int]
end
def print
str = ""
for i in (0...@conten.size)
str = str + "[ " + @conten[i].to_s + " ]->"
end
str = str + " nil "
puts str
end
def include? val
@conten.include? val
end
end
C'est une classe très simple, qui respecte l'approche objet par son côté : pas d'accès direct aux données (sauf aux valeurs des cellules en lecture via cell). add pour ajouter un élément, add_sev pour plusieurs (idéalement, une seule méthode avec condition sur la variable d'entrée devrait suffire mais bon...) remove x pour retirer x éléments. print pour l'affichage, include? pour savoir si un objet se trouve dans la liste et enfin lenght pour obtenir la longueur de la file.
Testons, avec 2 cellules arrivant à chaque itération et entre 0 et 2 qui sortent : vous avez dit "bouchon" ?
a = Fifo.new ["first one !"]Alors, ça avance ?
for i in (0...20)
a.add_sev [rand(100), rand(100)]
a.print
a.remove rand(3)
end
0 commentaires:
Enregistrer un commentaire