//AttrList : attrlist.cpp
#include "attrlist.h"
/* Funzione di confronto ricorsiva.
* Ritorna:
* 0 se il confronto ha successo
* !=0 se il confronto fallisce
* Per prima cosa confronta l'attributo
* passato per parametro con 'se stesso'.
* Se il risultato del confronto e' difforme
* dal criterio impostato, ritorna 'fallimento' (!= 0)
* altrimenti passa il testimone al prossimo nodo.
* Se i nodi sono finiti, il confronto ha avuto successo.
*/
int AttrList::compare (const Attributo &a)
{
/* Notare che 'compare' (cioe' questo metodo) ridefinisce
* la 'compare' di Attributo. A noi serve quella della
* superclasse, quindi indichiamo 'Attributo::compare' */
int c = Attributo::compare (a);
if (c)
{
switch (conf)
{
case le : // Se dovrebbe essere <=
if (c > 0) // ed invece e' maggiore
return c; // Ritorno errore
break;
case eq : // Se dovrebbe essere ==
return (c); // ritorno errore (comunque)
case ge : // Se dovrebbe essere >=
if (c < 0) // ed invece e' <
return c; // Allora ritorno errore
break;
}
}
if (Next ())
return ((AttrList *) Next ()) -> compare (a);
return 0;
}