// Classe lista: listc.cpp
#include "listc.h"
/* Metodo ricorsivo che ritorna un puntatore all' i-esimo
* elemento della lista. Richiede di sapere quale elemento
* e' questo nella lista (curr).
* Ritorna un puntatore all'elemento o NULL se non ce ne sono
* abbastanza */
list * list::index (int i, int curr)
{
if (i == curr) // Se 'io' (curr) son quello richiesto
return this; // ritorno un puntatore a me stesso
else if (next) // Altrimenti, se c'e' un prossimo elemento
return next -> index (i,curr + 1); // va a cercare al prossimo (dicendogli che e' il prossimo - curr+1)
else
return 0; // Se non c'e' neanche il prossimo, ritorna 'NULL' = non trovato
}
/* operatore += : Aggiunge la lista che comincia con 'add'
* in coda alla lista di cui fa parte questo emelento */
void list::operator += (list *add)
{
if (next) // Se c'e' un prossimo elemento
next -> operator += (add); // Lo appendo in fondo alla sual lista chiamando l'operatore per nome
else
next = add; // Altrimenti (sono l'ultimo), lo appendo qui
}
/* Elimina quest'oggetto dalla lista <base>
*/
void list::remove (list **base)
{
list *b;
if (*base == this) // Se la lista inizia con questo emento
*base = next; // La fa iniziare con il prossimo
else { // Altrimenti
for (b = *base;b -> next; b = b -> next) // Scandisce la lista
if (b -> next == this) // Quando trova l'elemento che mi precede
{
b -> next = next; // Gli collega il prossimo
break; // e termina la scansione
}
}
next = 0; // Per finire, mi indica come terminatore della mia lista
}