aggiornato install.ini per contenere gli elenchi corretti dei tracciati record e le corrette dipendenze git-svn-id: svn://10.65.10.50/trunk@6140 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			493 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			493 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#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
 | 
						||
 | 
						||
#ifndef _ANALISI_H
 | 
						||
#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
 | 
						||
 | 
						||
#include "saldi.h"
 | 
						||
#include "movdett.h"
 | 
						||
#define MAX_ID_REL 999999999
 | 
						||
#define MAX_ID_MOVDETT 999999
 | 
						||
#define NODO_AGGIUNTO "A"
 | 
						||
#define NODO_MODIFICATO "M"
 | 
						||
#define NODO_RIMOSSO "R"
 | 
						||
#define IMMESSO 'I'
 | 
						||
#define TRASFERITO 'T'
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
#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() {}
 | 
						||
};
 | 
						||
 | 
						||
typedef real TNumeric_id;
 | 
						||
/*class TNumeric_id : public real
 | 
						||
{
 | 
						||
public:
 | 
						||
  TNumeric_id &operator =(const int &v)
 | 
						||
    {*((real *)this)=v; return *this;}
 | 
						||
  TNumeric_id &operator =(const real &v)
 | 
						||
    {*((real *)this)=v; return *this;}
 | 
						||
  TNumeric_id(const real &v)
 | 
						||
    {*this=v;}
 | 
						||
  TNumeric_id()
 | 
						||
    {}
 | 
						||
};*/
 | 
						||
 | 
						||
 | 
						||
class TAlbero_movdett : public TAlbero_bidir
 | 
						||
{
 | 
						||
  TToken_string _codtab;
 | 
						||
  TLocalisamfile *_movdett;
 | 
						||
//  TNumeric_id _last_id;
 | 
						||
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)
 | 
						||
//  TNumeric_id &new_id(real id);
 | 
						||
  // @cmember Costruttore
 | 
						||
  TAlbero_movdett( const char * tabcode);
 | 
						||
  // @cmember Distruttore
 | 
						||
  virtual ~TAlbero_movdett() {;}
 | 
						||
};
 | 
						||
 | 
						||
//Classe per gestire l'albero di relana
 | 
						||
class TAlbero_relana : public TAlbero_bidir
 | 
						||
{
 | 
						||
  TString _codtab;
 | 
						||
  TLocalisamfile *_relana;
 | 
						||
  TNumeric_id _last_id;
 | 
						||
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
 | 
						||
  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)
 | 
						||
  TNumeric_id &new_id(real id);
 | 
						||
  // @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
 | 
						||
{
 | 
						||
  TString _codtab;
 | 
						||
  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() ;
 | 
						||
};
 | 
						||
 | 
						||
// Struttura da albero basata su un file temporaneo cached
 | 
						||
class TAlbero_locale : public TAlbero_bidir
 | 
						||
{ 
 | 
						||
  TRWrecord_cache * _local_cache;
 | 
						||
  
 | 
						||
  TLocalisamfile *_f;   // da rimuovere !!
 | 
						||
  
 | 
						||
  TRectype *_currnode;
 | 
						||
  TNumeric_id _last_insert_id;
 | 
						||
  TAssoc_array _status_node;
 | 
						||
  
 | 
						||
  protected:
 | 
						||
  
 | 
						||
    // @cmember Elimina il sottoalbero dei figli di un nodo 
 | 
						||
    // @cmember che sta per essere eliminato da un struttura di tipo lista doppiamente lincata
 | 
						||
    bool remove_subtree(const TNumeric_id lastnode_id);
 | 
						||
    // @cmember genera/setta il nuovo id
 | 
						||
    TNumeric_id &new_id(TNumeric_id);
 | 
						||
  
 | 
						||
    void goto_node(const TNumeric_id id);
 | 
						||
    void goto_node(TRectype &node) {*_currnode = node;}
 | 
						||
  
 | 
						||
    virtual void put_headkey(TRectype &) pure;
 | 
						||
    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;
 | 
						||
    virtual const char * get_headkey() pure;
 | 
						||
  public:
 | 
						||
    // debug
 | 
						||
    void write_cache() { _local_cache->flush(); }
 | 
						||
 | 
						||
    // @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
 | 
						||
    bool insert_node(TRectype &node, const TNumeric_id id_prec, const TNumeric_id id_padre, TNumeric_id id, const char trasf_immes = TRASFERITO);
 | 
						||
    // @cmember Elimina un nodo da una struttura di tipo lista doppiamente lincata
 | 
						||
    bool delete_node(const TNumeric_id &id);
 | 
						||
    // @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
 | 
						||
    TRectype & current() const {return *_currnode;}
 | 
						||
    
 | 
						||
    // @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
 | 
						||
    TRectype extract_dirtynode(TNumeric_id &id, TString& status);
 | 
						||
    // @cmember Ritorna il numero di elementi dell'assoc_array status_node
 | 
						||
    int dirty_nodes() { return _status_node.items();}
 | 
						||
    // @cmember Setta lo stato del nodo: valori ammessi = nodo <A>ggiunto, nodo <M>odificato, nodo <R>imosso
 | 
						||
    void set_status_node(const TNumeric_id &id, const char *status);
 | 
						||
    // @cmember Ritorna lo stato di un nodo
 | 
						||
    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);
 | 
						||
    // @cmember Costruttore
 | 
						||
    TAlbero_locale(int filenum);
 | 
						||
    // @cmember Distruttore
 | 
						||
    virtual ~TAlbero_locale();
 | 
						||
};
 | 
						||
 | 
						||
// Copia locale dell'albero di una tabella analisi
 | 
						||
class TLocal_relana3 : public TAlbero_locale
 | 
						||
{ 
 | 
						||
protected:
 | 
						||
                                      
 | 
						||
  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;}
 | 
						||
  virtual const char * id_fieldname(){return ABRA_ID;}
 | 
						||
  virtual const char * get_headkey() {return " ";}
 | 
						||
  virtual void put_headkey(TRectype & node) {node.put(ABRA_CODAN,get_headkey());}
 | 
						||
  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;}
 | 
						||
  virtual const char * id_fieldname(){return ABMD_ID;}
 | 
						||
  virtual const char * get_headkey() {return " | | | | ";}
 | 
						||
  virtual void put_headkey(TRectype & node) ;
 | 
						||
 | 
						||
  public:
 | 
						||
     
 | 
						||
    // @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
 | 
						||
    virtual int read_body(bool lockstruct) {return 0;}  //DA FARE
 | 
						||
    // @cmember Copia la chiave sul record dei nodi dell'albero
 | 
						||
    virtual void put_headkey(TRectype &rec) const {;} //DA FARE
 | 
						||
    TRectype * _newrec; //buffer per l'inserimento dodo per nodo
 | 
						||
  public:
 | 
						||
    // @cmember Costruttore
 | 
						||
    TAlbero_AB(int filenum);
 | 
						||
    // #cmember Distruttore
 | 
						||
    virtual ~TAlbero_AB() {;} //DA FARE
 | 
						||
    // @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;}
 | 
						||
};
 | 
						||
 | 
						||
class TAnalisi_bil: public TAlbero_AB
 | 
						||
{
 | 
						||
    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;
 | 
						||
    //TLocal_relana3 *_inter_tree;
 | 
						||
  protected:
 | 
						||
    // @cmember Esegue una navigazione dell'albero di rel_voci e di rel_ana
 | 
						||
    // @cmember parallelamente verificanto eventualmente delle inconsistenze
 | 
						||
    void naviga_relazioni(const TNumeric_id & id_relana,const TNumeric_id & prec,const TNumeric_id & padre );
 | 
						||
    // @cmember Sincronizza la copia locale basandosi su relvoci (per la struttura) e su relana (per le info aggiuntive)
 | 
						||
    TRectype * sincronizza_relana(const TNumeric_id &begin_relana,TNumeric_id &id_relana);
 | 
						||
    // @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();
 | 
						||
    // @cmember Esegue la scrittura del body del record scrive il contenuto di una tabella di analisi
 | 
						||
    //virtual int commit_body() const;
 | 
						||
    // @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;
 | 
						||
    //Serve solo per il debug: lancia l'iserimento 
 | 
						||
    //diretto e manuale di un nodo, testo la funzione di inserimento
 | 
						||
    void prova_inserimento();
 | 
						||
  public:
 | 
						||
    // @cmember Costruttore
 | 
						||
    TAnalisi_bil();
 | 
						||
    // #cmember Distruttore
 | 
						||
    virtual ~TAnalisi_bil() ;
 | 
						||
    // @cmember Ritorna il tipo di analisi
 | 
						||
    const TString &type() {return get(ABAN_TIPOAN);}
 | 
						||
    // @cmember Setta il tipo di analisi
 | 
						||
    void set_type(const char * tipo) {put(ABAN_TIPOAN,tipo);}
 | 
						||
};
 | 
						||
    
 | 
						||
class TABsaldo: public TAlbero_AB
 | 
						||
{
 | 
						||
    TLocalisamfile *_saldi;
 | 
						||
    TAlbero_movdett *_mov;
 | 
						||
    TLocalisamfile *_movdett;
 | 
						||
    //TLocal_balance3 *_inter_tree;
 | 
						||
  protected:
 | 
						||
    // @cmember Esegue la scrittura del body del record scrive il contenuto di una tabella di analisi
 | 
						||
    //virtual int commit_body() const;
 | 
						||
    // @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;
 | 
						||
    // @cmember Naviga l'albero dei movimenti e dettagli
 | 
						||
    void naviga_movdett();
 | 
						||
    //Serve solo per il debug: lancia l'iserimento 
 | 
						||
    //diretto e manuale di un nodo, testo la funzione di inserimento
 | 
						||
    void prova_inserimento();
 | 
						||
  public:
 | 
						||
    // @cmember Costruttore
 | 
						||
     TABsaldo();
 | 
						||
    // #cmember Distruttore
 | 
						||
    virtual ~ TABsaldo();
 | 
						||
};
 | 
						||
    
 | 
						||
 | 
						||
#endif //__ANALISI_H
 |