La classe seguente viene utilizzata come contenitore FIFO per qualsiasi tipo di dato.
Per FIFO si intende un contenitore in cui si inseriscono valori in modo sequenziale, che poi vengono letti (e tolti dal contenitore), partendo dal primo valore immesso.
Io lo utilizzo in pgDesigner per gestire i messaggi di log inviati dai vari moduli che poi vengono scritti su un'apposito file. La classe mi serve appunto per ricevere tutti questi messaggi e, in base ad un timer, inviarli al manager, in modo che vengano trattati indipendentemente dal processo corrente. Questo elimina i rallentamenti dovuti alla scrittura e ad eventuali altri ritardi, che potrebbero influire sulla scorrevolezza dell'applicazione.
Descrizione:La classe Fifo non è statica, quindi è necessario creare l'oggetto. Una volta creato questo è pronto per ricevere informazioni e a fornirle, scaricandole dal suo array interno.
Metodi:IsEmpty: ritorna TRUE se la FIFO è vuota
Pop: ritorna il prossimo elemento, e lo elimina dalla FIFO
Push: aggiunge un nuovo elemento alla FIFO
Get: ritorna il prossimo elemento, ma non lo elimina dalla FIFO
Clear: pulisce e svuota la FIFO
Create: crea un oggetto Fifo (statica)
Codice:' Gambas class file
PRIVATE $fifo AS Variant[]
'---
' Constructor
'
PUBLIC SUB _new()
$fifo = NEW Variant[]
END
'---
' Return true if fifo is empty
'
' @return : Boolean : Status
'
PUBLIC FUNCTION IsEmpty() AS Boolean
RETURN ($fifo.Count = 0)
END
'---
' Removes the last element of the array and returns it.
'
' @return : Variant : Item
'
PUBLIC FUNCTION Pop() AS Variant
DIM item AS Variant = NULL
IF (NOT ME.IsEmpty()) THEN
item = $fifo[0]
$fifo.Remove(0)
END IF
RETURN item
END
'---
' Adds an element at the end of the array.
'
' @parameter : Variant : Item
'
PUBLIC SUB Push(item AS Variant)
$fifo.Add(item)
END
'---
' Get next element
'
' @return : Variant : Element
'
PUBLIC FUNCTION Get() AS Variant
DIM item AS Variant = NULL
IF (NOT ME.IsEmpty()) THEN
item = $fifo[0]
END IF
RETURN item
END
'---
' Clear fifo
'
PUBLIC SUB Clear()
$fifo.Clear()
END
'---
' Create this object
'
STATIC PUBLIC FUNCTION Create() AS pgFifo
DIM o AS NEW pgFifo
RETURN o
END
Non ne ho fatto un pacchetto perchè mi è sembrato inutile.
Bye