//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::operator == (const Attributo &a)
{
/* Notare che 'operator ==' (cioe' questo metodo) ridefinisce
* la 'operator ==' di Attributo. A noi serve quella della
* superclasse, quindi indichiamo 'Attributo::compare' */
int c = Attributo::operator != (a);
if (c)
{
switch (conf)
{
case le : // Se dovrebbe essere <=
if (c > 0) // ed invece e' maggiore
return 0; // Ritorno errore
break;
case eq : // Se dovrebbe essere ==
return 0; // ritorno errore (comunque)
case ge : // Se dovrebbe essere >=
if (c < 0) // ed invece e' <
return 0; // Allora ritorno errore
break;
}
}
if (Next ())
return *Next () == a; // Siccome uso il template, non mi serve piu' il cast
return -1;
}