TAG_list
La classe TAG_list è il gestore delle liste di tag assegnate; è una struttura indice che può essere memorizzata su file; le tag_list in genere sono definite all’interno di altre classi: ad esempio la classe DOCUMENT contiene una tag_list nella quale sono memorizzate tutte i tag delle proprietà;
Il vantaggio maggiore nell’utilizzo delle tag_list è la leggibilità dei file che le contengono da parte di versioni precedenti di Colibri (a partire dalla revisione 7 in poi..); In questo caso i tag eventualmente non interpretabili dalle versioni precedenti del software rimangono inalterati e accessibili alle versioni successive anche dopo salvataggio.
Una interessante caratteristica: La classe TAG_list deriva da TAG: questo significa che una tag_list può contenere altre tag_list: in altre parole, è possibile generare e gestire tag_list di tag_list a più livelli-.
class AFX_EXT_CLASS TAG_list : public TAG { public: TAG_list(); ~TAG_list(); TAG *Create(TAG &tag, STRING name); bool Add_tag(TAG *tag); TAG * Get_tag(STRING id); TAG * Get_tag(TAG &tag); FILEPTR Get_file_end_pos(); __use_tag_funcs __use_private_struct };
Create(TAG &tag, STRING name)
la funzione genera ed inserisce nella lista un TAG del quale e’ fornita La classe base, se la stessa é stata registrata in precedenza; in caso contrario rimanda 0.Il secondo parametri è il nome proprio da assegnare alll’istanza generata;
ad esempio:
TAG_list list ........ ...... DocumentSize prot; DocumentSize *sz=list.Create(prot, L"my_name"); if (sz) { ..... }
DocumentSize è una classe TAG definita registrata nel software; vedremo in un esempio di definizione di una classe che usa le tag_list che è possibile utilizzare delle macro specifiche per semplificare la scrittura del codice.
N.B. Poiché una tag_list contenere un solo tag per ogni nome, a un secondo tentativo la funzione Create rimanderà 0.
TAG * Get_tag(STRING name)
Rimanda il tag della lista dato il suo nome (vedi la funzione Set_name()..); se non presente alcun tag con il nome passato, rimanda 0.
le funzioni virtuali
La TAG_list, derivando da TAG , possiede anche le funzioni New, Read e Write per generare una nuova istanza, leggere e scrivere su file; la dichiarazione delle funzioni è data attraverso la macro __use_tag_funcs, scritta alla fine della struttura della classe.
FILEPTR Get_file_end_pos()
La funzione rimanda la posizione dell’ultimo byte della classe l’ultima volta che è stata scritta o letta nel file; vedremo in un successivo articolo le ragioni di esistenza di questa funzione; il suo valore è mantenuto aggiornato dalle funzioni Read e Write della classe.