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.

Pages: 1 2 3 4
%d bloggers like this:
Skip to toolbar