From 9a0e1c806c57cfc40d7a1e3145933754d335db37 Mon Sep 17 00:00:00 2001 From: augusto Date: Mon, 28 Jul 1997 09:41:46 +0000 Subject: [PATCH] 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 --- include/multirec.cpp | 21 +++++++++++++++++++-- include/multirec.h | 8 ++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/include/multirec.cpp b/include/multirec.cpp index 0165720b7..65966d48f 100755 --- a/include/multirec.cpp +++ b/include/multirec.cpp @@ -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; diff --git a/include/multirec.h b/include/multirec.h index 16f61261d..5fdc2a294 100755 --- a/include/multirec.h +++ b/include/multirec.h @@ -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 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 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

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);}