1998-01-14 15:03:20 +00:00
# ifndef __ANALISIB_H
# define __ANALISIB_H
# ifndef __RELATION_H
# define __RELATION_H
# include <relation.h>
# endif //__RELATION_H
# ifndef __APPLICAT_H
# define __APPLICAT_H
# include <applicat.h> //Definizione della classe TApplication
# endif //__APPLICAT_H
# ifndef _ABLI09_H
# include "ablib09.h"
# endif //_ABLIB09_H
1998-01-14 16:00:58 +00:00
# ifndef _ANALISI_H
1998-01-14 15:03:20 +00:00
# include "analisi.h"
# endif //_ANALIS_H
# ifndef _RELVOCI_H
//#define _RELVOCI_H
# include "relvoci.h"
# endif //_RELVOCI_H
# ifndef _RELANA_H
//#define _RELANA_H
# include "relana.h"
# endif //_RELANA_H
1998-01-14 17:49:01 +00:00
# include "saldi.h"
# include "movdett.h"
1998-01-20 10:14:04 +00:00
# define MAX_ID_REL 999999999
1998-01-22 08:50:45 +00:00
# define MAX_ID_MOVDETT 999999
1998-01-20 10:14:04 +00:00
# define NODO_AGGIUNTO "A"
# define NODO_MODIFICATO "M"
# define NODO_RIMOSSO "R"
# define IMMESSO 'I'
# define TRASFERITO 'T'
1998-01-14 17:49:01 +00:00
1998-01-14 15:03:20 +00:00
# define TIPO_ANALISI "A"
# define TIPO_VOCE "V"
# define ID_NULLO 0
//Serve per eseguire il test
class TTest : public TSkeleton_application
{
protected :
virtual void main_loop ( ) ;
public :
// @cmember Costruttore
TTest ( )
{
}
// @cmember Distruttore
virtual ~ TTest ( )
{
}
} ;
class TNodeId : public TString
{
} ;
// classe per un albero navigabile in una direzione
// (depth first o breadth first)
class TAlbero : public TObject
{
protected :
virtual void node2id ( const TObject * node , TNodeId & id ) const
{ return ; }
public :
virtual bool empty ( ) { return ! goto_root ( ) ; }
virtual bool goto_root ( ) pure ;
virtual bool goto_firstson ( ) pure ;
virtual bool goto_rbrother ( ) pure ;
virtual TObject * curr_node ( ) const pure ;
void curr_id ( TNodeId & var ) const
{ node2id ( curr_node ( ) , var ) ; }
virtual bool goto_node ( TNodeId & id )
{ return FALSE ; }
virtual bool has_son ( ) const
{ return FALSE ; }
virtual bool has_rbrother ( ) const
{ return FALSE ; }
TAlbero ( ) { }
virtual ~ TAlbero ( ) { }
} ;
// classe per un albero navigabile in due direzioni
class TAlbero_bidir : public TAlbero
{
public :
virtual bool has_father ( ) const
{ return FALSE ; }
virtual bool has_lbrother ( ) const
{ return FALSE ; }
virtual bool goto_father ( )
{ return FALSE ; }
virtual bool goto_lbrother ( )
{ return FALSE ; }
TAlbero_bidir ( ) { }
virtual ~ TAlbero_bidir ( ) { }
} ;
1998-01-14 16:00:58 +00:00
typedef real TNumeric_id ;
/*class TNumeric_id : public real
1998-01-14 15:03:20 +00:00
{
public :
1998-01-14 16:00:58 +00:00
TNumeric_id & operator = ( const int & v )
1998-01-14 15:03:20 +00:00
{ * ( ( real * ) this ) = v ; return * this ; }
1998-01-14 16:00:58 +00:00
TNumeric_id & operator = ( const real & v )
1998-01-14 15:03:20 +00:00
{ * ( ( real * ) this ) = v ; return * this ; }
1998-01-14 16:00:58 +00:00
TNumeric_id ( const real & v )
1998-01-14 15:03:20 +00:00
{ * this = v ; }
1998-01-14 16:00:58 +00:00
TNumeric_id ( )
1998-01-14 15:03:20 +00:00
{ }
} ; */
1998-01-19 15:42:10 +00:00
class TAlbero_movdett : public TAlbero_bidir
{
TToken_string _codtab ;
TLocalisamfile * _movdett ;
1998-01-22 08:50:45 +00:00
// TNumeric_id _last_id;
1998-01-19 15:42:10 +00:00
protected :
virtual void node2id ( const TObject * node , TNodeId & id ) const ;
public :
// @cmember Ritorna TRUE se riesce a trovare il primo figlio
virtual bool has_son ( ) const ;
// @cmember Ritorna TRUE se riesce a trovare il fratello destro
virtual bool has_rbrother ( ) const ;
// @cmember Ritorna TRUE se riesce a trovare il padre
virtual bool has_father ( ) const ;
// @cmember Ritorna TRUE se riesce a trovare il fratello sinistro
virtual bool has_lbrother ( ) const ;
// @cmember Si posiziona sulla radice principale
virtual bool goto_root ( ) ;
// @cmember Si posiziona sul primo figlio
virtual bool goto_firstson ( ) ;
// @cmember Si posiziona sul padre
virtual bool goto_father ( ) ;
// @cmember Si posiziona sul fratello destro
virtual bool goto_rbrother ( ) ;
// @cmember Si posiziona sul fratello sinistro
virtual bool goto_lbrother ( ) ;
// @cmember Ritorna TRUE se pu<70> posizionarsi sul nodo indicato dall'id specificato
virtual bool goto_node ( TNodeId & id )
{ return ( _movdett - > readat ( atol ( id ) ) = = NOERR ) ; }
// @cmember Si posiziona sul nodo specificato dall'id
bool goto_id ( const TNumeric_id & id ) ;
// @cmember Ritorna il nodo corrente
virtual TObject * curr_node ( ) const ;
// @cmember Ritorna il nodo corrente
TRectype & curr ( ) { return ( TRectype & ) * curr_node ( ) ; }
// @cmember Esegue un lock
// bool lock();
// @cmember Esegue un unlock
// void unlock();
// @cmember Inserisce un nodo nella struttura ad albero
//bool insert_node(real id);
// @cmember Restituisce un nuovo id (il primo disponibile)
1998-01-22 08:50:45 +00:00
// TNumeric_id &new_id(real id);
1998-01-19 15:42:10 +00:00
// @cmember Costruttore
TAlbero_movdett ( const char * tabcode ) ;
// @cmember Distruttore
virtual ~ TAlbero_movdett ( ) { ; }
} ;
1998-01-14 15:03:20 +00:00
//Classe per gestire l'albero di relana
class TAlbero_relana : public TAlbero_bidir
{
1998-01-19 15:42:10 +00:00
TString _codtab ;
1998-01-14 15:03:20 +00:00
TLocalisamfile * _relana ;
1998-01-14 16:00:58 +00:00
TNumeric_id _last_id ;
1998-01-14 15:03:20 +00:00
protected :
virtual void node2id ( const TObject * node , TNodeId & id ) const ;
public :
// @cmember Ritorna TRUE se riesce a trovare il primo figlio
virtual bool has_son ( ) const ;
// @cmember Ritorna TRUE se riesce a trovare il fratello destro
virtual bool has_rbrother ( ) const ;
// @cmember Ritorna TRUE se riesce a trovare il padre
virtual bool has_father ( ) const ;
// @cmember Ritorna TRUE se riesce a trovare il fratello sinistro
virtual bool has_lbrother ( ) const ;
// @cmember Si posiziona sulla radice principale
virtual bool goto_root ( ) ;
// @cmember Si posiziona sul primo figlio
virtual bool goto_firstson ( ) ;
// @cmember Si posiziona sul padre
virtual bool goto_father ( ) ;
// @cmember Si posiziona sul fratello destro
virtual bool goto_rbrother ( ) ;
// @cmember Si posiziona sul fratello sinistro
virtual bool goto_lbrother ( ) ;
// @cmember Ritorna TRUE se pu<70> posizionarsi sul nodo indicato dall'id specificato
virtual bool goto_node ( TNodeId & id )
{ return ( _relana - > readat ( atol ( id ) ) = = NOERR ) ; }
// @cmember Si posiziona sul nodo specificato dall'id
1998-01-14 16:00:58 +00:00
bool goto_id ( const TNumeric_id & id ) ;
1998-01-14 15:03:20 +00:00
// @cmember Ritorna il nodo corrente
virtual TObject * curr_node ( ) const ;
// @cmember Ritorna il nodo corrente
TRectype & curr ( ) { return ( TRectype & ) * curr_node ( ) ; }
// @cmember Esegue un lock
bool lock ( ) ;
// @cmember Esegue un unlock
void unlock ( ) ;
// @cmember Inserisce un nodo nella struttura ad albero
//bool insert_node(real id);
// @cmember Restituisce un nuovo id (il primo disponibile)
1998-01-14 16:00:58 +00:00
TNumeric_id & new_id ( real id ) ;
1998-01-14 15:03:20 +00:00
// @cmember Costruttore
TAlbero_relana ( const char * tabcode ) ;
// @cmember Distruttore
virtual ~ TAlbero_relana ( ) ;
} ;
//Classe per gestire la struttura di una tabella di analisi
// basandosi sull'albero di relvoci
class TAlbero_relvoci : public TAlbero
{
1998-01-19 15:42:10 +00:00
TString _codtab ;
1998-01-14 15:03:20 +00:00
TLocalisamfile * _relvoci ;
protected :
virtual void node2id ( const TObject * node , TNodeId & id ) const ;
public :
// @cmember Si posiziona sulla radice principale
virtual bool goto_root ( ) ;
// @cmember Ritorna TRUE se trova un figlio
virtual bool has_son ( ) const ;
// @cmember Si posiziona sul primo figlio
virtual bool goto_firstson ( ) ;
// @cmember Ritorna TRUE se trova un fratello destro
virtual bool has_rbrother ( ) const ;
// @cmember Si posiziona sul fratello destro
virtual bool goto_rbrother ( ) ;
// @cmember Ritorna TRUE se trova un fratello sinistro
bool has_lbrother ( ) const ;
// @cmember Si posiziona sul fratello sinistro
bool goto_lbrother ( ) ;
// @cmember Restituisce il nodo corrente
virtual TObject * curr_node ( ) const ;
// @cmember Restituisce il nodo specificato dall'id
virtual bool goto_node ( TNodeId & id )
{ return ( _relvoci - > readat ( atol ( id ) ) = = NOERR ) ; }
// @cmember Restituisce il nodo corrente
TRectype & curr ( ) { return ( TRectype & ) * curr_node ( ) ; }
// @cmember Esegue un lock
bool lock ( ) ;
// @cmember Esegue un unlock
void unlock ( ) ;
// @cmember Restituisce il codice della tabella che si sta usando
const TString & codtab ( )
{ return _codtab ; }
// @cmember Costruttore
TAlbero_relvoci ( const char * tabcode ) ;
// @cmember Distruttore
virtual ~ TAlbero_relvoci ( ) ;
} ;
1998-01-19 15:42:10 +00:00
1998-01-14 15:03:20 +00:00
// Struttura da albero basata su un file temporaneo cached
1998-01-14 17:49:01 +00:00
class TAlbero_locale : public TAlbero_bidir
1998-01-14 15:03:20 +00:00
{
1998-01-19 15:42:10 +00:00
TRWrecord_cache * _local_cache ;
1998-01-14 15:03:20 +00:00
TLocalisamfile * _f ; // da rimuovere !!
TRectype * _currnode ;
1998-01-14 16:00:58 +00:00
TNumeric_id _last_insert_id ;
1998-01-14 15:03:20 +00:00
TAssoc_array _status_node ;
1998-01-19 15:42:10 +00:00
protected :
1998-01-14 15:03:20 +00:00
// @cmember Elimina il sottoalbero dei figli di un nodo
// @cmember che sta per essere eliminato da un struttura di tipo lista doppiamente lincata
1998-01-14 16:00:58 +00:00
bool remove_subtree ( const TNumeric_id lastnode_id ) ;
1998-01-14 15:03:20 +00:00
// @cmember genera/setta il nuovo id
1998-01-14 16:00:58 +00:00
TNumeric_id & new_id ( TNumeric_id ) ;
1998-01-19 15:42:10 +00:00
1998-01-14 17:49:01 +00:00
void goto_node ( const TNumeric_id id ) ;
1998-01-14 15:03:20 +00:00
void goto_node ( TRectype & node ) { * _currnode = node ; }
1998-01-19 15:42:10 +00:00
1998-01-19 16:19:12 +00:00
virtual void put_headkey ( TRectype & ) pure ;
1998-01-19 15:42:10 +00:00
virtual const char * idfather_fieldname ( ) pure ;
virtual const char * idson_fieldname ( ) pure ;
virtual const char * idsucc_fieldname ( ) pure ;
virtual const char * idprec_fieldname ( ) pure ;
virtual const char * id_fieldname ( ) pure ;
1998-01-22 08:50:45 +00:00
virtual const char * get_headkey ( ) pure ;
1998-01-14 15:03:20 +00:00
public :
1998-01-19 15:42:10 +00:00
// debug
void write_cache ( ) { _local_cache - > flush ( ) ; }
1998-01-20 10:14:04 +00:00
// @cmember Inserisce un nodo in una struttura di tipo lista doppiamente lincata: trasf_immes <20> un flag che dice se il nodo <20> trasferito o immesso
1998-01-22 08:50:45 +00:00
bool insert_node ( TRectype & node , const TNumeric_id id_prec , const TNumeric_id id_padre , TNumeric_id id , const char trasf_immes = TRASFERITO ) ;
1998-01-14 15:03:20 +00:00
// @cmember Elimina un nodo da una struttura di tipo lista doppiamente lincata
1998-01-14 16:00:58 +00:00
bool delete_node ( const TNumeric_id & id ) ;
1998-01-14 15:03:20 +00:00
// @cmember Lancia la rimozione di tutto l'albero
bool delete_tree ( ) ;
// @cmember Lancia la rimozione di tutto l'albero
void zero ( ) ;
// @cmember Restituisce il nodo corrente
1998-01-14 17:49:01 +00:00
TRectype & current ( ) const { return * _currnode ; }
1998-01-14 15:03:20 +00:00
// @cmember Restituisce TRUE se esiste un figlio di un nodo
virtual bool has_son ( ) ;
// @cmember Si posizione sul primo figlio di un nodo
virtual bool goto_firstson ( ) ;
// @cmember Restituisce TRUE se esiste il fratello destro di un nodo
virtual bool has_rbrother ( ) ;
// @cmember Si posiziona sul fratello destro di un nodo
virtual bool goto_rbrother ( ) ;
// @cmember Si posiziona sul primo nodo della struttura ad albero
virtual bool goto_root ( ) ;
// @cmember Restituisce il nodo corrente
virtual TObject * curr_node ( ) const { return _currnode ; }
// ***** gestione interfaccia Database/copia locale
// @cmember Estrae un nodo dall'albero
1998-01-14 17:49:01 +00:00
TRectype extract_dirtynode ( TNumeric_id & id , TString & status ) ;
1998-01-14 15:03:20 +00:00
// @cmember Ritorna il numero di elementi dell'assoc_array status_node
1998-01-14 17:49:01 +00:00
int dirty_nodes ( ) { return _status_node . items ( ) ; }
1998-01-14 15:03:20 +00:00
// @cmember Setta lo stato del nodo: valori ammessi = nodo <A>ggiunto, nodo <M>odificato, nodo <R>imosso
1998-01-14 16:00:58 +00:00
void set_status_node ( const TNumeric_id & id , const char * status ) ;
1998-01-14 15:03:20 +00:00
// @cmember Ritorna lo stato di un nodo
1998-01-22 08:50:45 +00:00
TString * get_status_node ( const TNumeric_id & id )
{ return ( TString * ) _status_node . objptr ( id . string ( ) ) ; }
void link_succ_zero ( const TNumeric_id currid ) ;
void link_son_zero ( const TNumeric_id currid ) ;
1998-01-14 15:03:20 +00:00
// @cmember Costruttore
1998-01-14 17:49:01 +00:00
TAlbero_locale ( int filenum ) ;
1998-01-14 15:03:20 +00:00
// @cmember Distruttore
1998-01-14 17:49:01 +00:00
virtual ~ TAlbero_locale ( ) ;
} ;
// Copia locale dell'albero di una tabella analisi
class TLocal_relana3 : public TAlbero_locale
{
protected :
1998-01-19 15:42:10 +00:00
1998-01-14 17:49:01 +00:00
virtual const char * idfather_fieldname ( ) { return ABRA_IDPADRE ; }
virtual const char * idson_fieldname ( ) { return ABRA_IDFIGLIO ; }
virtual const char * idsucc_fieldname ( ) { return ABRA_IDSUCC ; }
virtual const char * idprec_fieldname ( ) { return ABRA_IDPREC ; }
1998-01-19 15:42:10 +00:00
virtual const char * id_fieldname ( ) { return ABRA_ID ; }
1998-01-14 17:49:01 +00:00
virtual const char * get_headkey ( ) { return " " ; }
1998-01-22 08:50:45 +00:00
virtual void put_headkey ( TRectype & node ) { node . put ( ABRA_CODAN , get_headkey ( ) ) ; }
1998-01-14 17:49:01 +00:00
public :
// @cmember Costruttore
TLocal_relana3 ( ) ;
// @cmember Distruttore
virtual ~ TLocal_relana3 ( ) ;
} ;
// Copia locale dell'albero dei dettagli di un saldo
class TLocal_balance3 : public TAlbero_locale
{
protected :
virtual const char * idfather_fieldname ( ) { return ABMD_IDPADRE ; }
virtual const char * idson_fieldname ( ) { return ABMD_IDFIGLIO ; }
virtual const char * idsucc_fieldname ( ) { return ABMD_IDSUCC ; }
virtual const char * idprec_fieldname ( ) { return ABMD_IDPREC ; }
1998-01-19 15:42:10 +00:00
virtual const char * id_fieldname ( ) { return ABMD_ID ; }
virtual const char * get_headkey ( ) { return " | | | | " ; }
1998-01-19 16:19:12 +00:00
virtual void put_headkey ( TRectype & node ) ;
1998-01-14 17:49:01 +00:00
public :
1998-01-22 08:50:45 +00:00
1998-01-14 17:49:01 +00:00
// @cmember Costruttore
TLocal_balance3 ( ) ;
// @cmember Distruttore
virtual ~ TLocal_balance3 ( ) ;
} ;
class TAlbero_AB : public TRectype
{
protected :
TAlbero_locale * _inter_tree ;
// @cmember Esegue la scrittura del body del record
virtual int commit_body ( ) const ;
// @cmember Esegue la lettura del body del rocord
1998-01-19 15:42:10 +00:00
virtual int read_body ( bool lockstruct ) { return 0 ; } //DA FARE
1998-01-14 17:49:01 +00:00
// @cmember Copia la chiave sul record dei nodi dell'albero
1998-01-19 15:42:10 +00:00
virtual void put_headkey ( TRectype & rec ) const { ; } //DA FARE
1998-01-19 16:40:23 +00:00
TRectype * _newrec ; //buffer per l'inserimento dodo per nodo
1998-01-14 17:49:01 +00:00
public :
// @cmember Costruttore
TAlbero_AB ( int filenum ) ;
// #cmember Distruttore
1998-01-19 15:42:10 +00:00
virtual ~ TAlbero_AB ( ) { ; } //DA FARE
1998-01-14 17:49:01 +00:00
// @cmember Esegue la lettura della testata di un record da LF_ANALISI e del suo "body"
virtual int read ( TBaseisamfile & analisi , word isop = _isequal , word lockop = _nolock ) ;
// @cmember Esegue la lettura della testata di un record alla posizione nrec da LF_ANALISI e del suo "body"
virtual int readat ( TBaseisamfile & f , TRecnotype nrec , word lockop = _nolock ) ;
// @cmember Scrive una tabella di analisi
virtual int write ( TBaseisamfile & analisi ) const ;
// @cmember Riscrive una tabella di analisi
virtual int rewrite ( TBaseisamfile & analisi ) const ;
// @cmember Elimina una intera tabella di analisi con tutto il suo contenuto
virtual int remove ( TBaseisamfile & f ) const ;
// @cmember Azzera l record
virtual void zero ( ) ;
TAlbero_locale * user_tree ( )
{ return _inter_tree ; }
1998-01-14 15:03:20 +00:00
} ;
1998-01-14 17:49:01 +00:00
class TAnalisi_bil : public TAlbero_AB
1998-01-14 15:03:20 +00:00
{
class TArray_fratelli : public TAssoc_array
{
public :
void setkey ( const char * tipocod , const char * codvc , TToken_string & key ) const ;
bool find1stkey ( const char * tipocod , const char * codvc , TToken_string & key ) ;
void mark_used ( const char * key ) ;
bool used ( TObject * o ) ;
} ;
TArray_fratelli _nodifratelli ;
TLocalisamfile * _analisi ;
TLocalisamfile * _voci ;
TAlbero_relvoci * _relaz ;
TAlbero_relana * _ana ;
1998-01-19 15:42:10 +00:00
//TLocal_relana3 *_inter_tree;
1998-01-14 15:03:20 +00:00
protected :
// @cmember Esegue una navigazione dell'albero di rel_voci e di rel_ana
// @cmember parallelamente verificanto eventualmente delle inconsistenze
1998-01-14 16:00:58 +00:00
void naviga_relazioni ( const TNumeric_id & id_relana , const TNumeric_id & prec , const TNumeric_id & padre ) ;
1998-01-14 15:03:20 +00:00
// @cmember Sincronizza la copia locale basandosi su relvoci (per la struttura) e su relana (per le info aggiuntive)
1998-01-14 16:00:58 +00:00
TRectype * sincronizza_relana ( const TNumeric_id & begin_relana , TNumeric_id & id_relana ) ;
1998-01-14 15:03:20 +00:00
// @cmember Esegue un lock di una struttura ad albero
bool lock_struttura ( ) ;
// @cmember Esegue un unlock di una struttura ad albero
bool unlock_struttura ( ) ;
// @cmember Esegue un lock su una tabella di analisi
bool lock_tabella ( ) ;
// @cmember Sblocca una tabella di analisi
bool unlock_tabella ( ) ;
1998-01-14 17:49:01 +00:00
// @cmember Esegue la scrittura del body del record scrive il contenuto di una tabella di analisi
1998-01-19 15:42:10 +00:00
//virtual int commit_body() const;
1998-01-14 17:49:01 +00:00
// @cmember Esegue la lettura del body del rocord: legge il contenuto di una tabella di analisi
virtual int read_body ( bool lockstruct ) ;
// @cmember Copia la chiave sul record dei nodi dell'albero
virtual void put_headkey ( TRectype & rec ) const ;
1998-01-22 08:50:45 +00:00
//Serve solo per il debug: lancia l'iserimento
//diretto e manuale di un nodo, testo la funzione di inserimento
void prova_inserimento ( ) ;
1998-01-14 15:03:20 +00:00
public :
// @cmember Costruttore
TAnalisi_bil ( ) ;
// #cmember Distruttore
virtual ~ TAnalisi_bil ( ) ;
1998-01-14 17:49:01 +00:00
// @cmember Ritorna il tipo di analisi
1998-01-14 15:03:20 +00:00
const TString & type ( ) { return get ( ABAN_TIPOAN ) ; }
// @cmember Setta il tipo di analisi
void set_type ( const char * tipo ) { put ( ABAN_TIPOAN , tipo ) ; }
1998-01-14 17:49:01 +00:00
} ;
1998-01-19 15:42:10 +00:00
class TABsaldo : public TAlbero_AB
1998-01-14 17:49:01 +00:00
{
TLocalisamfile * _saldi ;
1998-01-19 15:42:10 +00:00
TAlbero_movdett * _mov ;
TLocalisamfile * _movdett ;
//TLocal_balance3 *_inter_tree;
1998-01-14 17:49:01 +00:00
protected :
1998-01-14 15:03:20 +00:00
// @cmember Esegue la scrittura del body del record scrive il contenuto di una tabella di analisi
1998-01-19 16:19:12 +00:00
//virtual int commit_body() const;
1998-01-14 15:03:20 +00:00
// @cmember Esegue la lettura del body del rocord: legge il contenuto di una tabella di analisi
1998-01-14 17:49:01 +00:00
virtual int read_body ( bool lockstruct ) ;
// @cmember Copia la chiave sul record dei nodi dell'albero
virtual void put_headkey ( TRectype & rec ) const ;
1998-01-22 08:50:45 +00:00
// @cmember Naviga l'albero dei movimenti e dettagli
1998-01-19 15:42:10 +00:00
void naviga_movdett ( ) ;
1998-01-22 08:50:45 +00:00
//Serve solo per il debug: lancia l'iserimento
//diretto e manuale di un nodo, testo la funzione di inserimento
void prova_inserimento ( ) ;
1998-01-14 17:49:01 +00:00
public :
// @cmember Costruttore
TABsaldo ( ) ;
// #cmember Distruttore
1998-01-19 15:42:10 +00:00
virtual ~ TABsaldo ( ) ;
1998-01-14 15:03:20 +00:00
} ;
1998-01-14 17:49:01 +00:00
1998-02-06 10:56:30 +00:00
# endif //__ANALISI_H