class ACTION
la classe ACTION è l’interfaccia di gestione di azioni su un documento. da questa classe derivano le azioni specifiche di undo/redo eseguite su un documento. La classe espone una funzione di gestione della memoria, che permette al programmatore l’allocazione e disallocazione automatica di buffer; contiene inoltre tre metodi virtuali che saranno riscritti nelle classi derivate.
Malloc()
La classe mette a disposizione una funzione Malloc, il cui compito e di allocare un blocco di memoria utilizzabile dalle istanze derivate o all’interno dei documenti durante la costruzione dell’azione undo (ad esempio per allocare un buffer assegnato ad un’area immagine copiata..)
La memoria allocata verrà liberata automaticamente alla distruzione della classe
FilePush() e FilePop() scrittura su file delle azioni
Le due funzioni sono virtuali e devono essere riscritte dalle classi derivate. Consistono nell’interfaccia di salvataggio e richiamo dell’azione da un file: è compito della classe derivata da ACTION decidere se effettuare il flush o meno su file. In genere la strategia è quella di decidere internamente alla classe se vale la pena liberare la memoria temporaneamente fino al FilePop successivo;
Do(OPERATIN_CALL *doc) esecuzione delle operazioni di Undo/Redo
La funzione virtuale Do(), esegue l’azione di undo/redo su un documento doc passato come argomento. Di seguito è riportata la funzione usata nella classe AREA_RESTORE
[sourcecode language=”cpp”]
bool AREA_RESTORE::Do(OPERATION_CALL *doc)
{
GETSTR
___SENDER(doc,OP_RESTORE_AREA)
A_PUSH(this)
___SENDER_END
return RECEIVER_RESPONSE;
}
[/sourcecode]
La funzione controlla che per prima cosa che il comando OP_RESTORE_AREA sia riconosciuto dal documento, quindi esegue la chiamata al receiver di doc.
Per maggiori dettagli sul paradigma SENDER/RECEIVER leggere questo articolo