Autore Topic: Classe Fifo  (Letto 952 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Classe Fifo
« il: 18 Agosto 2010, 13:08:24 »
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:
Codice: [Seleziona]
' 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

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Classe Fifo
« Risposta #1 il: 22 Agosto 2010, 11:37:21 »
Uno stack FIFO, carino  ;)

Una curiosità, ma perché per restituire/eliminare l'oggetto non hai usato il metodo Extract?
Removes one or more elements from the array, and return them.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe Fifo
« Risposta #2 il: 23 Agosto 2010, 13:31:25 »
E' più una vecchia abitudine, oltre al voler controllare tutto io... :-)

Sai com'è... le abitudini sono dure a morire, e poi fidarsi è bene, ma non fidarsi... :-)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Classe Fifo
« Risposta #3 il: 23 Agosto 2010, 15:45:39 »
Eh eh eh... ti capisco  :2birre:
Visita il mio sito personale: http://www.leonardomiliani.com