ablib01.h ablib09.h analisi.h : corretta l'inclusione degli header

ablib01.cpp ablib01.h : cambiato nome al tipo dll'id_numerico


git-svn-id: svn://10.65.10.50/trunk@5937 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
augusto 1998-01-14 16:00:58 +00:00
parent a47344d0ca
commit dca3e18971
4 changed files with 55 additions and 49 deletions

View File

@ -33,7 +33,7 @@ TAnalisi_bil::~TAnalisi_bil()
//Estraggo un nodo: in ingresso ho un id e il codice della tabella; //Estraggo un nodo: in ingresso ho un id e il codice della tabella;
//in output ho il record e le informazioni per sapere cosa fare di quel record //in output ho il record e le informazioni per sapere cosa fare di quel record
TRectype TInsert_albero::extract_node(const TString &codtab,TRelana_id &id, TString &status) TRectype TInsert_albero::extract_node(const TString &codtab,TNumeric_id &id, TString &status)
{ {
TToken_string key = codtab; TToken_string key = codtab;
TRectype rec(LF_RELANA); TRectype rec(LF_RELANA);
@ -44,7 +44,7 @@ TRectype TInsert_albero::extract_node(const TString &codtab,TRelana_id &id, TStr
_status_node.restart(); _status_node.restart();
row_status = _status_node.get_hashobj(); row_status = _status_node.get_hashobj();
status = (TString&)row_status->obj(); status = (TString&)row_status->obj();
id = (TRelana_id)row_status->key(); id = (TNumeric_id)row_status->key();
} }
else else
{ {
@ -96,9 +96,12 @@ int TAnalisi_bil::commit_body(TLocalisamfile &relana) const
//Estraggo un nodo per volta basandomi sull'assoc_array degli status //Estraggo un nodo per volta basandomi sull'assoc_array degli status
while (_inter_tree->status_node_items() > 0) while (_inter_tree->status_node_items() > 0)
{ {
TRelana_id id; TNumeric_id id;
int prova = _inter_tree->status_node_items(); int prova = _inter_tree->status_node_items();
rec= _inter_tree->extract_node(get(ABAN_CODAN), id, status); rec= _inter_tree->extract_node(get(ABAN_CODAN), id, status);
//Ho un rectype e uno status node //Ho un rectype e uno status node
if (status == NODO_AGGIUNTO) if (status == NODO_AGGIUNTO)
{ {
@ -174,7 +177,7 @@ int TAnalisi_bil::read_body(bool lock_struct )
_ana = new TAlbero_relana(get(ABAN_CODAN)); _ana = new TAlbero_relana(get(ABAN_CODAN));
} }
// carica la copia locale // carica la copia locale
TRelana_id id_relana; TNumeric_id id_relana;
if (lock_struct) if (lock_struct)
_relaz->lock(); _relaz->lock();
@ -192,7 +195,7 @@ int TAnalisi_bil::remove(TBaseisamfile& f) const
/*Abilitare questa parte solo per effettuare un debug della delete_node /*Abilitare questa parte solo per effettuare un debug della delete_node
// anche se messa in questa posizione, la chiamata non ha senso // anche se messa in questa posizione, la chiamata non ha senso
TLocalisamfile lf(LF_RELANA); TLocalisamfile lf(LF_RELANA);
TRelana_id id; TNumeric_id id;
id = 17; id = 17;
_inter_tree->delete_node(id); _inter_tree->delete_node(id);
int errc = commit_body(lf); int errc = commit_body(lf);
@ -225,9 +228,9 @@ void TAnalisi_bil::zero()
} }
//Naviga l'albero delle relazioni //Naviga l'albero delle relazioni
void TAnalisi_bil::naviga_relazioni(const TRelana_id & begin_relana, const TRelana_id & id_prec,const TRelana_id & id_padre) void TAnalisi_bil::naviga_relazioni(const TNumeric_id & begin_relana, const TNumeric_id & id_prec,const TNumeric_id & id_padre)
{ {
TRelana_id id_relana, currid; TNumeric_id id_relana, currid;
TNodeId key_rel; TNodeId key_rel;
_relaz->curr_id(key_rel); _relaz->curr_id(key_rel);
_newrec = sincronizza_relana(begin_relana, id_relana); _newrec = sincronizza_relana(begin_relana, id_relana);
@ -241,7 +244,7 @@ void TAnalisi_bil::naviga_relazioni(const TRelana_id & begin_relana, const TRela
{ //Fratello di rel_voci trovato { //Fratello di rel_voci trovato
//Cerco un fratello anche su rel_ana: se non si trova c'è una inconsistenza nei dati //Cerco un fratello anche su rel_ana: se non si trova c'è una inconsistenza nei dati
//fra relvoci e relana //fra relvoci e relana
TRelana_id frat_relana; TNumeric_id frat_relana;
naviga_relazioni(frat_relana,currid , id_padre); naviga_relazioni(frat_relana,currid , id_padre);
//_ana->goto_node(key_ana); //Per risalire al nodo che mi ha chiamato in relana //_ana->goto_node(key_ana); //Per risalire al nodo che mi ha chiamato in relana
_relaz->goto_node(key_rel); _relaz->goto_node(key_rel);
@ -268,7 +271,7 @@ void TAnalisi_bil::naviga_relazioni(const TRelana_id & begin_relana, const TRela
} }
//Sincronizza relana con quello che trovo in relaz: relaz è navigato da naviga_relazioni //Sincronizza relana con quello che trovo in relaz: relaz è navigato da naviga_relazioni
TRectype *TAnalisi_bil::sincronizza_relana(const TRelana_id &begin_relana,TRelana_id &id_relana) TRectype *TAnalisi_bil::sincronizza_relana(const TNumeric_id &begin_relana,TNumeric_id &id_relana)
{ {
id_relana=begin_relana; id_relana=begin_relana;
TToken_string key; TToken_string key;
@ -380,7 +383,7 @@ TInsert_albero::~TInsert_albero()
} }
//Setta lo stato del nodo: cioè decide che cosa dovrò fare con questo nodo //Setta lo stato del nodo: cioè decide che cosa dovrò fare con questo nodo
void TInsert_albero::set_status_node(const TRelana_id &id, const char *status) void TInsert_albero::set_status_node(const TNumeric_id &id, const char *status)
{ {
// STATUS A priorità assoluta e rimane sempre A // STATUS A priorità assoluta e rimane sempre A
// STATUS M priorità su R ma non su A // STATUS M priorità su R ma non su A
@ -421,7 +424,7 @@ void TInsert_albero::set_status_node(const TRelana_id &id, const char *status)
} }
//Restituisce un nuovo id //Restituisce un nuovo id
TRelana_id &TInsert_albero::new_id(TRelana_id id) TNumeric_id &TInsert_albero::new_id(TNumeric_id id)
{ {
if (id == ID_NULLO) if (id == ID_NULLO)
_last_insert_id+1; _last_insert_id+1;
@ -432,9 +435,9 @@ TRelana_id &TInsert_albero::new_id(TRelana_id id)
//Inserisce il nodo (che ho in ingresso) nella struttura ad albero doppiamente linkata //Inserisce il nodo (che ho in ingresso) nella struttura ad albero doppiamente linkata
//di relana aggiornando tutti i link //di relana aggiornando tutti i link
bool TInsert_albero::insert_node(TRectype & node,const TRelana_id id_prec, const TRelana_id id_padre, TRelana_id id) bool TInsert_albero::insert_node(TRectype & node,const TNumeric_id id_prec, const TNumeric_id id_padre, TNumeric_id id)
{ {
TRelana_id id_succ; TNumeric_id id_succ;
TToken_string key; TToken_string key;
key.add(node.get(ABRA_CODAN)); key.add(node.get(ABRA_CODAN));
TRectype parente(LF_RELANA); TRectype parente(LF_RELANA);
@ -477,11 +480,11 @@ bool TInsert_albero::insert_node(TRectype & node,const TRelana_id id_prec, const
//Questa funzione aggiorna i link dei "parenti" di un nodo che sta per essere rimosso //Questa funzione aggiorna i link dei "parenti" di un nodo che sta per essere rimosso
bool TInsert_albero::delete_node(const TRelana_id &id) bool TInsert_albero::delete_node(const TNumeric_id &id)
{ {
TRectype parente(LF_RELANA); TRectype parente(LF_RELANA);
TRelana_id id_padre, id_figlio, id_prec, id_succ; TNumeric_id id_padre, id_figlio, id_prec, id_succ;
goto_node(id); goto_node(id);
TToken_string key = _currnode->get(ABRA_CODAN); TToken_string key = _currnode->get(ABRA_CODAN);
@ -534,7 +537,7 @@ bool TInsert_albero::delete_node(const TRelana_id &id)
_ana_cache->put(*_currnode); _ana_cache->put(*_currnode);
//Elimino i miei figli //Elimino i miei figli
TRelana_id nextnode_id; TNumeric_id nextnode_id;
if (id_prec != ID_NULLO) if (id_prec != ID_NULLO)
{ {
nextnode_id = id_prec; nextnode_id = id_prec;
@ -579,9 +582,9 @@ bool TInsert_albero::delete_tree()
//Questa funzione elimina tutti i nodi sottostanti al nodo //Questa funzione elimina tutti i nodi sottostanti al nodo
//"principale" che sta per essere eliminato //"principale" che sta per essere eliminato
bool TInsert_albero::remove_subtree(const TRelana_id thisnode_id) bool TInsert_albero::remove_subtree(const TNumeric_id thisnode_id)
{ {
TRelana_id myself_id; TNumeric_id myself_id;
//cerco il figlio //cerco il figlio
if (has_son()) if (has_son())
{ {
@ -597,7 +600,7 @@ bool TInsert_albero::remove_subtree(const TRelana_id thisnode_id)
goto_rbrother(); goto_rbrother();
remove_subtree(myself_id); remove_subtree(myself_id);
} }
TRelana_id id = _currnode->get(ABRA_ID); TNumeric_id id = _currnode->get(ABRA_ID);
//Questa parte esegue la gestione dell'assoc_array degli stati //Questa parte esegue la gestione dell'assoc_array degli stati
//in modo tale da mantenerlo allineato con il contenuto della cache //in modo tale da mantenerlo allineato con il contenuto della cache
@ -655,7 +658,7 @@ bool TInsert_albero::goto_root()
if (current()->get_real(ABRA_ID)==ID_NULLO) if (current()->get_real(ABRA_ID)==ID_NULLO)
return FALSE; return FALSE;
TToken_string key; TToken_string key;
TRelana_id id_prec, id_padre; TNumeric_id id_prec, id_padre;
key.add(_currnode->get(ABRA_CODAN)); key.add(_currnode->get(ABRA_CODAN));
key.add(_currnode->get(ABRA_ID)); key.add(_currnode->get(ABRA_ID));
do do
@ -723,7 +726,7 @@ TAlbero_relana::~TAlbero_relana()
} }
//Incremento l'id per dare il primo id disponibile //Incremento l'id per dare il primo id disponibile
TRelana_id & TAlbero_relana::new_id(TRelana_id id) TNumeric_id & TAlbero_relana::new_id(TNumeric_id id)
{ {
if (id == ID_NULLO) if (id == ID_NULLO)
_last_id = _last_id+1; _last_id = _last_id+1;
@ -733,7 +736,7 @@ TRelana_id & TAlbero_relana::new_id(TRelana_id id)
} }
//Posiziona relana sul record voluto //Posiziona relana sul record voluto
bool TAlbero_relana::goto_id(const TRelana_id &id) bool TAlbero_relana::goto_id(const TNumeric_id &id)
{ {
_relana->put(ABRA_CODAN,_codtab); _relana->put(ABRA_CODAN,_codtab);
_relana->put(ABRA_ID,id); _relana->put(ABRA_ID,id);
@ -785,7 +788,7 @@ bool TAlbero_relana::has_son() const
//Ricerca il primo filglio di un nodo di relana //Ricerca il primo filglio di un nodo di relana
bool TAlbero_relana::goto_firstson() bool TAlbero_relana::goto_firstson()
{ {
TRelana_id id_figlio(_relana->get_real(ABRA_IDFIGLIO)); TNumeric_id id_figlio(_relana->get_real(ABRA_IDFIGLIO));
if (id_figlio > 0) if (id_figlio > 0)
{ //Ci deve essere un figlio: lo cerco { //Ci deve essere un figlio: lo cerco
//Il CODAN deve rimanere uguale a quello del padre //Il CODAN deve rimanere uguale a quello del padre
@ -807,7 +810,7 @@ bool TAlbero_relana::has_rbrother() const
//Ricerca il fratello destro di un nodo di relana //Ricerca il fratello destro di un nodo di relana
bool TAlbero_relana::goto_rbrother() bool TAlbero_relana::goto_rbrother()
{ {
TRelana_id id_fratello(_relana->get_real(ABRA_IDSUCC)); TNumeric_id id_fratello(_relana->get_real(ABRA_IDSUCC));
if (id_fratello > 0) if (id_fratello > 0)
{ //Ci deve essere un fratello: lo cerco { //Ci deve essere un fratello: lo cerco
//Il CODAN deve rimanere uguale a quello del fratello precedente //Il CODAN deve rimanere uguale a quello del fratello precedente
@ -852,7 +855,7 @@ bool TAlbero_relana::has_lbrother() const
//Ricerca il fratello sinistro di un nodo di relana //Ricerca il fratello sinistro di un nodo di relana
bool TAlbero_relana::goto_lbrother() bool TAlbero_relana::goto_lbrother()
{ {
TRelana_id id_fratello(_relana->get_real(ABRA_IDPREC)); TNumeric_id id_fratello(_relana->get_real(ABRA_IDPREC));
if (id_fratello > 0) if (id_fratello > 0)
{//Ci deve essere un fratello: lo cerco {//Ci deve essere un fratello: lo cerco
//Il CODAN deve rimanere uguale a quello del fratello successivo //Il CODAN deve rimanere uguale a quello del fratello successivo

View File

@ -12,12 +12,10 @@
#endif //__APPLICAT_H #endif //__APPLICAT_H
#ifndef _ABLI09_H #ifndef _ABLI09_H
#define _ABLI09_H
#include "ablib09.h" #include "ablib09.h"
#endif //_ABLIB09_H #endif //_ABLIB09_H
#ifndef _ANALIS_H #ifndef _ANALISI_H
#define _ANALIS_H
#include "analisi.h" #include "analisi.h"
#endif //_ANALIS_H #endif //_ANALIS_H
@ -103,17 +101,17 @@ public:
virtual ~TAlbero_bidir() {} virtual ~TAlbero_bidir() {}
}; };
typedef real TRelana_id; typedef real TNumeric_id;
/*class TRelana_id : public real /*class TNumeric_id : public real
{ {
public: public:
TRelana_id &operator =(const int &v) TNumeric_id &operator =(const int &v)
{*((real *)this)=v; return *this;} {*((real *)this)=v; return *this;}
TRelana_id &operator =(const real &v) TNumeric_id &operator =(const real &v)
{*((real *)this)=v; return *this;} {*((real *)this)=v; return *this;}
TRelana_id(const real &v) TNumeric_id(const real &v)
{*this=v;} {*this=v;}
TRelana_id() TNumeric_id()
{} {}
};*/ };*/
@ -122,7 +120,7 @@ class TAlbero_relana : public TAlbero_bidir
{ {
TString16 _codtab; TString16 _codtab;
TLocalisamfile *_relana; TLocalisamfile *_relana;
TRelana_id _last_id; TNumeric_id _last_id;
protected: protected:
virtual void node2id(const TObject * node,TNodeId & id) const; virtual void node2id(const TObject * node,TNodeId & id) const;
public: public:
@ -148,7 +146,7 @@ public:
virtual bool goto_node(TNodeId & id) virtual bool goto_node(TNodeId & id)
{return(_relana->readat(atol(id))==NOERR); } {return(_relana->readat(atol(id))==NOERR); }
// @cmember Si posiziona sul nodo specificato dall'id // @cmember Si posiziona sul nodo specificato dall'id
bool goto_id(const TRelana_id &id); bool goto_id(const TNumeric_id &id);
// @cmember Ritorna il nodo corrente // @cmember Ritorna il nodo corrente
virtual TObject * curr_node() const; virtual TObject * curr_node() const;
// @cmember Ritorna il nodo corrente // @cmember Ritorna il nodo corrente
@ -160,7 +158,7 @@ public:
// @cmember Inserisce un nodo nella struttura ad albero // @cmember Inserisce un nodo nella struttura ad albero
//bool insert_node(real id); //bool insert_node(real id);
// @cmember Restituisce un nuovo id (il primo disponibile) // @cmember Restituisce un nuovo id (il primo disponibile)
TRelana_id &new_id(real id); TNumeric_id &new_id(real id);
// @cmember Costruttore // @cmember Costruttore
TAlbero_relana( const char * tabcode); TAlbero_relana( const char * tabcode);
// @cmember Distruttore // @cmember Distruttore
@ -218,7 +216,7 @@ class TInsert_albero : public TAlbero_bidir
TLocalisamfile *_f; // da rimuovere !! TLocalisamfile *_f; // da rimuovere !!
TRectype *_currnode; TRectype *_currnode;
TRelana_id _last_insert_id; TNumeric_id _last_insert_id;
TAssoc_array _status_node; TAssoc_array _status_node;
// debug // debug
@ -226,11 +224,11 @@ class TInsert_albero : public TAlbero_bidir
protected: protected:
// @cmember Elimina il sottoalbero dei figli di un nodo // @cmember Elimina il sottoalbero dei figli di un nodo
// @cmember che sta per essere eliminato da un struttura di tipo lista doppiamente lincata // @cmember che sta per essere eliminato da un struttura di tipo lista doppiamente lincata
bool remove_subtree(const TRelana_id lastnode_id); bool remove_subtree(const TNumeric_id lastnode_id);
// @cmember genera/setta il nuovo id // @cmember genera/setta il nuovo id
TRelana_id &new_id(TRelana_id); TNumeric_id &new_id(TNumeric_id);
void goto_node(const TRelana_id id) void goto_node(const TNumeric_id id)
{ {
TToken_string key; TToken_string key;
key.add(_currnode->get(ABRA_CODAN)); key.add(_currnode->get(ABRA_CODAN));
@ -241,9 +239,9 @@ protected:
public: public:
// @cmember Inserisce un nodo in una struttura di tipo lista doppiamente lincata // @cmember Inserisce un nodo in una struttura di tipo lista doppiamente lincata
bool insert_node(TRectype &node, const TRelana_id id_prec, const TRelana_id id_padre, TRelana_id id); bool insert_node(TRectype &node, const TNumeric_id id_prec, const TNumeric_id id_padre, TNumeric_id id);
// @cmember Elimina un nodo da una struttura di tipo lista doppiamente lincata // @cmember Elimina un nodo da una struttura di tipo lista doppiamente lincata
bool delete_node(const TRelana_id &id); bool delete_node(const TNumeric_id &id);
// @cmember Lancia la rimozione di tutto l'albero // @cmember Lancia la rimozione di tutto l'albero
bool delete_tree(); bool delete_tree();
// @cmember Lancia la rimozione di tutto l'albero // @cmember Lancia la rimozione di tutto l'albero
@ -266,13 +264,13 @@ protected:
// ***** gestione interfaccia Database/copia locale // ***** gestione interfaccia Database/copia locale
// @cmember Estrae un nodo dall'albero // @cmember Estrae un nodo dall'albero
TRectype extract_node(const TString &codtab,TRelana_id &id, TString& status); TRectype extract_node(const TString &codtab,TNumeric_id &id, TString& status);
// @cmember Ritorna il numero di elementi dell'assoc_array status_node // @cmember Ritorna il numero di elementi dell'assoc_array status_node
int status_node_items() { return _status_node.items();} int status_node_items() { return _status_node.items();}
// @cmember Setta lo stato del nodo: valori ammessi = nodo <A>ggiunto, nodo <M>odificato, nodo <R>imosso // @cmember Setta lo stato del nodo: valori ammessi = nodo <A>ggiunto, nodo <M>odificato, nodo <R>imosso
void set_status_node(const TRelana_id &id, const char *status); void set_status_node(const TNumeric_id &id, const char *status);
// @cmember Ritorna lo stato di un nodo // @cmember Ritorna lo stato di un nodo
const char* get_status_node(const TRelana_id &id); const char* get_status_node(const TNumeric_id &id);
// @cmember Costruttore // @cmember Costruttore
TInsert_albero(); TInsert_albero();
@ -300,9 +298,9 @@ class TAnalisi_bil: public TRectype
protected: protected:
// @cmember Esegue una navigazione dell'albero di rel_voci e di rel_ana // @cmember Esegue una navigazione dell'albero di rel_voci e di rel_ana
// @cmember parallelamente verificanto eventualmente delle inconsistenze // @cmember parallelamente verificanto eventualmente delle inconsistenze
void naviga_relazioni(const TRelana_id & id_relana,const TRelana_id & prec,const TRelana_id & padre ); 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) // @cmember Sincronizza la copia locale basandosi su relvoci (per la struttura) e su relana (per le info aggiuntive)
TRectype * sincronizza_relana(const TRelana_id &begin_relana,TRelana_id &id_relana); TRectype * sincronizza_relana(const TNumeric_id &begin_relana,TNumeric_id &id_relana);
// @cmember Esegue un lock di una struttura ad albero // @cmember Esegue un lock di una struttura ad albero
bool lock_struttura(); bool lock_struttura();
// @cmember Esegue un unlock di una struttura ad albero // @cmember Esegue un unlock di una struttura ad albero

View File

@ -1,3 +1,6 @@
#ifndef _ABLI09_H
#define _ABLI09_H
#ifndef _RECARRAY_H #ifndef _RECARRAY_H
#include <recarray.h> #include <recarray.h>
#endif #endif
@ -22,3 +25,4 @@ public:
TRWrecord_cache(const char* table, int key = 1, bool lock=FALSE); TRWrecord_cache(const char* table, int key = 1, bool lock=FALSE);
virtual ~TRWrecord_cache() ; virtual ~TRWrecord_cache() ;
}; };
#endif

View File

@ -1,5 +1,6 @@
//Nomi dei campi nel tracciato record di LF_VOCI //Nomi dei campi nel tracciato record di LF_VOCI
#ifdef _ANALISI_H #ifndef _ANALISI_H
#define _ANALISI_H
#define ABAN_CODAN "CODAN" #define ABAN_CODAN "CODAN"
#define ABAN_DESCRIZ "DESCR" #define ABAN_DESCRIZ "DESCR"