//Magazzino: magaz.cpp
#include <stdio.h>
#include "magaz.h"
/******************************************************/
/* Classe Magazzino */
/******************************************************/
/* Metodo che aggiunge una lista di capi al magazzino */
void Magazzino::Add (Capo *add)
{
if (add) // Se passo una lista di capi (controllo su parametri)
{
add -> append (cont); // Mette il contenuto attuale in coda a quello che aggiungo
cont = add; // E mette la nuova lista come magazzino nuovo
} // In questo modo, se il magazzion e' vuoto' va lo stesso
}
/* Data una lista di criteri, confronta
* ogni capo con la lista data.
* Se corrisponde, guarda se ne ha gia'
* 'scelto' uno uguale.
* Se non c'e' gia', lo estrae dalla lista
* del magazzino e la appende alla lista dei
* capi scelti.
* Per finire, restituisce la lista dei capi scelti */
Capo *Magazzino::Select (AttrList *criteri)
{
Capo *scelti = 0; // Inizialmente nessuno scelto
Capo *curr = cont; // elemento corrente = primo del magazzino
while (curr) // Finche' ci sono elementi
{
if (!curr -> compare (criteri) && // Se corrisponde ai criteri
curr -> compare (scelti)) // e non e' gia' stato scelto
{
Capo *sel = curr; // Puntatore temporaneo all'elemento da spostare
curr = (Capo*) curr -> Next (); // Posiziona il 'corente' sul prossimo capo
sel -> remove ((list **) &cont); // Elimina il capo scelto dal magazzino
sel -> append (scelti); // Gli mette in coda i capi gia' scelti
scelti = sel; // E quindi ricostruisce la lista dei capi scelti
}
else
curr = (Capo *) curr -> Next (); // Se non lo ha scelto, va qui' al prossimo
}
return scelti; // Ritorna la lista dei capi scelti
}
/* Stampa tutti gli elementi nella lista del magazzino */
void Magazzino::Inventario ()
{
if (cont) // Se la lista non e' vuota
cont -> show (1); // Richiama il metodo 'show' di Capo (ricorsivo), a partire da 1
}
/******************************************************/
/* Classe Attributo */
/******************************************************/
void MenuInventario::action (void *par)
{
if (par) // Se viene richiamata correttamente
((Magazzino *) par) -> Inventario (); // Richiama la 'stampa inventario' del magazzino
printf ("Premi A-Capo per continuare"); // Poi stampa un 'prompt'
getchar (); // Ed attende un segno da parte dell'utente
}