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