//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; }