#ifndef _list_h #define _list_h template class List; template class Node { private: friend class List; Node *next; //prossimo nodo int flag; //nascondi il dato? NT data; //dato public: Node(const NT &d, Node *n); //costruttore ~Node(); //distruttore //accesso ai membri privati int GetFlag() { return flag; } void SetFlag(int value=1) { flag = value; } }; template class List { private: Node *first; //primo nodo della lista int len; //lunghezza della lista char mode[10]; //modalita' di inserimento automatico char description[100]; //descrizione del contenuto degli elementi della lista void DelFirst(); //cancella il primo elemento Node* InsertElement_R(const T &d, Node *one, int pos); //funzione per l'inserimento (ricorsiva) Node* Del_R(int witch, Node *one); //funzione per la cancellazione (ricorsiva) Node* GetElement(int i); //restituisce il nodo dell'elemento i-esimo public: char name[100]; //nome (facoltativo) della lista int modified; //lista modificata? List(char *callsign="INDEFINITA", char* content="ELEMENTO", char* how="QUEUE");//costruttore ~List(); //distruttore T& GetData(int i); //restituisce il dato dell'elemento i-esimo int Cerca(const T& d); //cerca l'elemento d. Se non lo trova restituisce -2 int GetLen(); //restituisce la lunghezza della lista void InsertElement(const T &d, int pos=-1); //inserisce un elemento void DelList(); //cancella lista void Del(int which); //elimina elemento (sfrutta Del_R) void Hide(int which, int value=1); //nasconde un elemento int GetHide(int which) { return GetElement(which)->flag; } //ritorna la flag void UnHide(int which); //rende visibile un elemento void Print(int which); //stampa elemento void Print(char *how="SIMPLE"); //stampa lista (how = "SIMPLE", "NORMAL", "ADVANCED") void SetMode(char *how="QUEUE"); //setta la modalita' di inserimento automatico int IsEmpty(){ return (first==NULL); } //dice se la lista e' vuota int IsHidden(); //dice se la lista e' nascosta totalmente //overload dell'operatore == friend int operator==(List &left, List &right) { if(left.GetLen()!=right.GetLen()) return 0; for(int i=0; i