Aggiunto operatore di lock su TDistinta e corretta la rewrite().

git-svn-id: svn://10.65.10.50/trunk@4474 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1997-05-31 13:26:38 +00:00
parent be4fc7cac3
commit fef25407a3
2 changed files with 40 additions and 24 deletions

View File

@ -5,27 +5,40 @@
/////////////////////////////////////////////////// ///////////////////////////////////////////////////
// costruttore distinta utilizzando il record passato // costruttore distinta utilizzando il record passato
TDistinta::TDistinta(const TRectype& rec) TDistinta::TDistinta(const TRectype& rec, word lockop)
{ {
read(rec); read(rec,lockop);
} }
// costruisce la distinta del tipo e numero passati // costruisce la distinta del tipo e numero passati
TDistinta::TDistinta(const char tipo, const long numero) TDistinta::TDistinta(const char tipo, const long numero, word lockop)
{ {
read(tipo,numero); read(tipo,numero,lockop);
}
TDistinta::~TDistinta()
{
TLocalisamfile f(LF_EFFETTI);
if (_righe_dist.items() > 0) // Se ha letto elementi sblocca eventualmente la prima riga
f.read((TRectype&)_righe_dist[0], _isequal,_unlock);
} }
// permette di leggere la distinta del tipo e numero passati // permette di leggere la distinta del tipo e numero passati
int TDistinta::read(const char tipo, const long numero) int TDistinta::read(const char tipo, const long numero, word lockop)
{ {
int err = NOERR; int err = NOERR;
CHECK(tipo!='\0' && numero > 0,"Can't read distinta from NULL elements"); CHECK(tipo!='\0' && numero > 0,"Can't read distinta from NULL elements");
TLocalisamfile f(LF_EFFETTI); TLocalisamfile f(LF_EFFETTI);
if (_righe_dist.items() > 0) // Se ha letto una distinta precedente, sblocca la prima riga
{
f.read((TRectype&)_righe_dist[0],_isequal,_unlock);
_righe_dist.destroy(); // Rimuove tutte le righe precedenti
}
for (int i=0; err == NOERR ; i++) for (int i=0; err == NOERR ; i++)
{ {
TEffetto* effetto = new TEffetto; TEffetto* effetto = new TEffetto;
err = effetto->read(f, tipo, numero, i+1);//legge un effetto per chiave 4 word lock = (i == 0 && lockop == _lock) ? _lock : _nolock; // Lock solo sulla prima riga
err = effetto->read(f, tipo, numero, i+1, lock);//legge un effetto per chiave 4
if (err == NOERR) if (err == NOERR)
_righe_dist.add(effetto); _righe_dist.add(effetto);
} }
@ -37,12 +50,12 @@ int TDistinta::read(const char tipo, const long numero)
} }
// permette di leggere la distinta dal record passato // permette di leggere la distinta dal record passato
int TDistinta::read(const TRectype& rec) int TDistinta::read(const TRectype& rec, word lockop)
{ {
CHECK(rec.num() == LF_EFFETTI,"Can't read distinta from a different record type"); CHECK(rec.num() == LF_EFFETTI,"Can't read distinta from a different record type");
const char tipo = rec.get_char(EFF_TIPODIST); const char tipo = rec.get_char(EFF_TIPODIST);
const long numero = rec.get_long(EFF_NDIST); const long numero = rec.get_long(EFF_NDIST);
return read(tipo,numero);//legge la distinta return read(tipo,numero,lockop);//legge la distinta
} }
// scrive la distinta // scrive la distinta
@ -56,13 +69,16 @@ int TDistinta::write(bool force, TToken_string* dati_dist)
{ {
TEffetto& effetto = (TEffetto&)_righe_dist[i]; TEffetto& effetto = (TEffetto&)_righe_dist[i];
// token string che contiene i dati da registrare sull'effetto // token string che contiene i dati da registrare sull'effetto
dati_dist->restart(); if (dati_dist)
effetto.put(EFF_TIPODIST, dati_dist->get()); {
effetto.put(EFF_NDIST, dati_dist->get_long()); dati_dist->restart();
effetto.put(EFF_DATADIST, dati_dist->get()); effetto.put(EFF_TIPODIST, dati_dist->get());
effetto.put(EFF_CODABIP, dati_dist->get_long()); effetto.put(EFF_NDIST, dati_dist->get_long());
effetto.put(EFF_CODCABP, dati_dist->get_long()); effetto.put(EFF_DATADIST, dati_dist->get());
effetto.put(EFF_NRIGADIST, i+1); effetto.put(EFF_CODABIP, dati_dist->get_long());
effetto.put(EFF_CODCABP, dati_dist->get_long());
effetto.put(EFF_NRIGADIST, i+1);
}
//riscrivo l'effetto con i dati della distinta a cui appartiene //riscrivo l'effetto con i dati della distinta a cui appartiene
err = effetto.rewrite(f); err = effetto.rewrite(f);
} }

View File

@ -21,13 +21,13 @@ public:
//elimina tutti gli effetti nella distinta (appartenti all'array) //elimina tutti gli effetti nella distinta (appartenti all'array)
int reset(){ return _righe_dist.destroy() == NOERR; } int reset(){ return _righe_dist.destroy() == NOERR; }
//legge la distinta del tipo e numero passati //legge la distinta del tipo e numero passati
int read(const char tipo, const long numero); int read(const char tipo, const long numero, word lock_op = _nolock);
//legge il record passato //legge il record passato
int read(const TRectype& rec); int read(const TRectype& rec, word lock_op = _nolock);
//scrive la distinta utilizzando la rewrite degli effetti //scrive la distinta utilizzando la rewrite degli effetti
int write(bool force = FALSE, TToken_string* dati_dist = NULL); int write(bool force = FALSE, TToken_string* dati_dist = NULL);
//riscrive la distinta //riscrive la distinta
int rewrite(TToken_string* dati_dist){ return write(TRUE, dati_dist); } int rewrite(TToken_string* dati_dist = NULL){ return write(TRUE, dati_dist); }
//rimuove la distinta del tipo e numero passati //rimuove la distinta del tipo e numero passati
int remove(char tipodist, long ndist); int remove(char tipodist, long ndist);
//restituisce il tipo di distinta //restituisce il tipo di distinta
@ -37,11 +37,11 @@ public:
//restituisce il codice valuta della distinta //restituisce il codice valuta della distinta
const TString& codval() const { return ((TRectype&)_righe_dist[0]).get(EFF_CODVAL); } const TString& codval() const { return ((TRectype&)_righe_dist[0]).get(EFF_CODVAL); }
//restituisce la data distinta della distinta //restituisce la data distinta della distinta
const TDate& data_dist() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATADIST); } TDate data_dist() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATADIST); }
//restituisce la data cambio della distinta //restituisce la data cambio della distinta
const TDate& data_cam() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATACAMBIO); } TDate data_cam() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATACAMBIO); }
//restituisce il cambio delle distinta //restituisce il cambio delle distinta
const real& cambio() const { return ((TRectype&)_righe_dist[0]).get_real(EFF_CAMBIO); } real cambio() const { return ((TRectype&)_righe_dist[0]).get_real(EFF_CAMBIO); }
//restituisce il codice abi di presentazione effetti //restituisce il codice abi di presentazione effetti
const TString& abip()const { return ((TRectype&)_righe_dist[0]).get(EFF_CODABIP); } const TString& abip()const { return ((TRectype&)_righe_dist[0]).get(EFF_CODABIP); }
//restituisce il codice cab di presentazione effetti //restituisce il codice cab di presentazione effetti
@ -51,11 +51,11 @@ public:
//costruttore di default //costruttore di default
TDistinta() {}; TDistinta() {};
//costruttore distinta del tipo e numero passato //costruttore distinta del tipo e numero passato
TDistinta(const char tipo, const long numero); TDistinta(const char tipo, const long numero, word lockop = _nolock);
//costruttore distinta utilizzando il record passato //costruttore distinta utilizzando il record passato
TDistinta(const TRectype& rec); TDistinta(const TRectype& rec, word lockop = _nolock);
//distruttore di default //distruttore di default
virtual ~TDistinta() {} virtual ~TDistinta();
}; };
#endif//__EF0301_H #endif//__EF0301_H