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:
parent
a47344d0ca
commit
dca3e18971
@ -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
|
||||
|
44
ab/ablib01.h
44
ab/ablib01.h
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user