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;
//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;
TRectype rec(LF_RELANA);
@ -44,7 +44,7 @@ TRectype TInsert_albero::extract_node(const TString &codtab,TRelana_id &id, TStr
_status_node.restart();
row_status = _status_node.get_hashobj();
status = (TString&)row_status->obj();
id = (TRelana_id)row_status->key();
id = (TNumeric_id)row_status->key();
}
else
{
@ -96,9 +96,12 @@ int TAnalisi_bil::commit_body(TLocalisamfile &relana) const
//Estraggo un nodo per volta basandomi sull'assoc_array degli status
while (_inter_tree->status_node_items() > 0)
{
TRelana_id id;
TNumeric_id id;
int prova = _inter_tree->status_node_items();
rec= _inter_tree->extract_node(get(ABAN_CODAN), id, status);
//Ho un rectype e uno status node
if (status == NODO_AGGIUNTO)
{
@ -174,7 +177,7 @@ int TAnalisi_bil::read_body(bool lock_struct )
_ana = new TAlbero_relana(get(ABAN_CODAN));
}
// carica la copia locale
TRelana_id id_relana;
TNumeric_id id_relana;
if (lock_struct)
_relaz->lock();
@ -192,7 +195,7 @@ int TAnalisi_bil::remove(TBaseisamfile& f) const
/*Abilitare questa parte solo per effettuare un debug della delete_node
// anche se messa in questa posizione, la chiamata non ha senso
TLocalisamfile lf(LF_RELANA);
TRelana_id id;
TNumeric_id id;
id = 17;
_inter_tree->delete_node(id);
int errc = commit_body(lf);
@ -225,9 +228,9 @@ void TAnalisi_bil::zero()
}
//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;
_relaz->curr_id(key_rel);
_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
//Cerco un fratello anche su rel_ana: se non si trova c'è una inconsistenza nei dati
//fra relvoci e relana
TRelana_id frat_relana;
TNumeric_id frat_relana;
naviga_relazioni(frat_relana,currid , id_padre);
//_ana->goto_node(key_ana); //Per risalire al nodo che mi ha chiamato in relana
_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
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;
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
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 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
TRelana_id &TInsert_albero::new_id(TRelana_id id)
TNumeric_id &TInsert_albero::new_id(TNumeric_id id)
{
if (id == ID_NULLO)
_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
//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;
key.add(node.get(ABRA_CODAN));
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
bool TInsert_albero::delete_node(const TRelana_id &id)
bool TInsert_albero::delete_node(const TNumeric_id &id)
{
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);
TToken_string key = _currnode->get(ABRA_CODAN);
@ -534,7 +537,7 @@ bool TInsert_albero::delete_node(const TRelana_id &id)
_ana_cache->put(*_currnode);
//Elimino i miei figli
TRelana_id nextnode_id;
TNumeric_id nextnode_id;
if (id_prec != ID_NULLO)
{
nextnode_id = id_prec;
@ -579,9 +582,9 @@ bool TInsert_albero::delete_tree()
//Questa funzione elimina tutti i nodi sottostanti al nodo
//"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
if (has_son())
{
@ -597,7 +600,7 @@ bool TInsert_albero::remove_subtree(const TRelana_id thisnode_id)
goto_rbrother();
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
//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)
return FALSE;
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_ID));
do
@ -723,7 +726,7 @@ TAlbero_relana::~TAlbero_relana()
}
//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)
_last_id = _last_id+1;
@ -733,7 +736,7 @@ TRelana_id & TAlbero_relana::new_id(TRelana_id id)
}
//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_ID,id);
@ -785,7 +788,7 @@ bool TAlbero_relana::has_son() const
//Ricerca il primo filglio di un nodo di relana
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)
{ //Ci deve essere un figlio: lo cerco
//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
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)
{ //Ci deve essere un fratello: lo cerco
//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
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)
{//Ci deve essere un fratello: lo cerco
//Il CODAN deve rimanere uguale a quello del fratello successivo

View File

@ -12,12 +12,10 @@
#endif //__APPLICAT_H
#ifndef _ABLI09_H
#define _ABLI09_H
#include "ablib09.h"
#endif //_ABLIB09_H
#ifndef _ANALIS_H
#define _ANALIS_H
#ifndef _ANALISI_H
#include "analisi.h"
#endif //_ANALIS_H
@ -103,17 +101,17 @@ public:
virtual ~TAlbero_bidir() {}
};
typedef real TRelana_id;
/*class TRelana_id : public real
typedef real TNumeric_id;
/*class TNumeric_id : public real
{
public:
TRelana_id &operator =(const int &v)
TNumeric_id &operator =(const int &v)
{*((real *)this)=v; return *this;}
TRelana_id &operator =(const real &v)
TNumeric_id &operator =(const real &v)
{*((real *)this)=v; return *this;}
TRelana_id(const real &v)
TNumeric_id(const real &v)
{*this=v;}
TRelana_id()
TNumeric_id()
{}
};*/
@ -122,7 +120,7 @@ class TAlbero_relana : public TAlbero_bidir
{
TString16 _codtab;
TLocalisamfile *_relana;
TRelana_id _last_id;
TNumeric_id _last_id;
protected:
virtual void node2id(const TObject * node,TNodeId & id) const;
public:
@ -148,7 +146,7 @@ public:
virtual bool goto_node(TNodeId & id)
{return(_relana->readat(atol(id))==NOERR); }
// @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
virtual TObject * curr_node() const;
// @cmember Ritorna il nodo corrente
@ -160,7 +158,7 @@ public:
// @cmember Inserisce un nodo nella struttura ad albero
//bool insert_node(real id);
// @cmember Restituisce un nuovo id (il primo disponibile)
TRelana_id &new_id(real id);
TNumeric_id &new_id(real id);
// @cmember Costruttore
TAlbero_relana( const char * tabcode);
// @cmember Distruttore
@ -218,7 +216,7 @@ class TInsert_albero : public TAlbero_bidir
TLocalisamfile *_f; // da rimuovere !!
TRectype *_currnode;
TRelana_id _last_insert_id;
TNumeric_id _last_insert_id;
TAssoc_array _status_node;
// debug
@ -226,11 +224,11 @@ class TInsert_albero : public TAlbero_bidir
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 TRelana_id lastnode_id);
bool remove_subtree(const TNumeric_id lastnode_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;
key.add(_currnode->get(ABRA_CODAN));
@ -241,9 +239,9 @@ protected:
public:
// @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
bool delete_node(const TRelana_id &id);
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
@ -266,13 +264,13 @@ protected:
// ***** gestione interfaccia Database/copia locale
// @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
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
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
const char* get_status_node(const TRelana_id &id);
const char* get_status_node(const TNumeric_id &id);
// @cmember Costruttore
TInsert_albero();
@ -300,9 +298,9 @@ class TAnalisi_bil: public TRectype
protected:
// @cmember Esegue una navigazione dell'albero di rel_voci e di rel_ana
// @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)
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
bool lock_struttura();
// @cmember Esegue un unlock di una struttura ad albero

View File

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

View File

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