Introduzione funzione readat e modifica funzione read using:

funzione virtual synchronize_bodies


git-svn-id: svn://10.65.10.50/trunk@4951 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
augusto 1997-07-28 09:41:46 +00:00
parent 738f340efa
commit 9a0e1c806c
2 changed files with 25 additions and 4 deletions

View File

@ -137,7 +137,7 @@ TRecord_array & TMultiple_rectype::body(int logicnum) const
{
const int index = log2ind(logicnum);
if (_files.objptr(index) == NULL || _changed[index])
if (_files.objptr(index) == NULL || _changed[index])
((TMultiple_rectype *) this)->load_rows_file(_logicnums[index]);
return (TRecord_array &) _files[index];
}
@ -184,6 +184,15 @@ void TMultiple_rectype::zero(char c)
((TRecord_array &)_files[i]).destroy_rows();
}
int TMultiple_rectype::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
{
int err = NOERR;
_nuovo = FALSE;
err = TRectype::readat(f, nrec, lockop);
synchronize_bodies();
return err;
}
int TMultiple_rectype::read(TBaseisamfile & f, word op, word lockop)
{
@ -203,6 +212,13 @@ int TMultiple_rectype::read(TBaseisamfile & f, word op, word lockop)
}
else
err = TRectype::read(f, op, lockop);
synchronize_bodies();
return err;
}
void TMultiple_rectype::synchronize_bodies()
{
for (int i = _nfiles - 1; i >= 0 ; i--)
{
if (_nuovo)
@ -226,9 +242,10 @@ int TMultiple_rectype::read(TBaseisamfile & f, word op, word lockop)
_changed[i] = TRUE;
}
}
return err;
}
int TMultiple_rectype::remove(TBaseisamfile & f) const
{
int err = NOERR;

View File

@ -60,6 +60,8 @@ protected:
// @cmember Associa un file a quello principale
void add_file(int logicnum, const char * numfield);
// @cmember sincronizza tutti i body (li legge, se necessario) in seguito ad una lettura della testata
virtual void synchronize_bodies();
public:
//***********************
// struttura
@ -90,9 +92,9 @@ public:
TRectype & new_row(int logicnum = 0);
// @cmember Abilita il caricamento del corpo <par lognum> insieme alla testata
void enable_autoload(int lognum,bool on =TRUE);
void enable_autoload(int lognum = 0 ,bool on =TRUE);
// @cmember Restituisce il flag di caricamento del corpo <par lognum> insieme alla testata
bool autoload_enabled(int lognum);
bool autoload_enabled(int lognum =0 );
//***********************
// record e I/O
@ -106,6 +108,8 @@ public:
virtual int read(TRectype & rec, word op = _isequal, word lockop = _nolock) {TLocalisamfile f(num()); *this = rec; return read(f, op, lockop); }
virtual int read(word op = _isequal, word lockop = _nolock) { TLocalisamfile f(num()); return read(f, op, lockop); }
// @cmember Legge il file <p f> con il tipo di record alla posizione desiderata
virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop = _nolock);
int read(TBaseisamfile & f, word op = _isequal, word lockop = _nolock);
virtual int write(TBaseisamfile& f) const { return write_rewrite(f);}