#include "cg0201.h" #include extern bool gest_vend(); // Definizione dei metodi relativi alla classe TClifoVI TClifoVI::TClifoVI():TRelation(LF_CLIFO), _oldindirizzi(0) { add(LF_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF"); add(LF_INDSP,"TIPOCF=TIPOCF|CODCF=CODCF"); } void TClifoVI::destroy_rows() { _indirizzi.destroy(); } TRectype& TClifoVI::indirizzo(int i) { TRectype *r=(TRectype*)_indirizzi.objptr(i); if (r == NULL) { r = new TRectype(LF_INDSP); _indirizzi.add(r,i); } return *r; } int TClifoVI::read_indirizzi() { const TLocalisamfile* rind = lfile(LF_INDSP); // Put here gest_vend() discrimination if (gest_vend()) { position_rels(); destroy_rows(); for (bool ok=is_first_match(LF_INDSP); ok; ok=next_match(LF_INDSP)) { const int nriga=rind->get_int("CODIND") -1; indirizzo(nriga)=rind->curr(); } } _oldindirizzi=indirizzi_items(); return NOERR; } int TClifoVI::read(TIsamop op, TReclock lockop, TDate& atdate) { int err=file()->read(op,lockop,atdate); if (err==NOERR) read_indirizzi(); return err; } int TClifoVI::write_rec(bool re, const TRectype& rec, TLocalisamfile* f) { if (re) { const bool scrivi= (f->rewrite(rec)!=NOERR); if (scrivi) f->write(rec); } else f->write(rec); return f->status(); } int TClifoVI::cancella(TLocalisamfile* f, int da, int a) { const char tipocf=lfile()->get("TIPOCF")[0]; const long codcf=lfile()->get_long("CODCF"); for (int i=da; i<=a;i++) { f->zero(); f->put("TIPOCF",tipocf); f->put("CODCF",codcf); f->put("CODIND",i); if (f->read(_isequal,_lock)==NOERR) f->remove(); } return f->status(); } int TClifoVI::registra(bool re, bool force) { TLocalisamfile* c=lfile(LF_CLIFO); int err=write_rec(re,c->curr(),c); if (err!=NOERR) return err; // Put here gest_vend() discrimination if (gest_vend()) { TLocalisamfile* v=lfile(LF_CFVEN); err=write_rec(TRUE,v->curr(),v); if (err!=NOERR) return err; TLocalisamfile* rind=lfile(LF_INDSP); const char tipocf=c->get("TIPOCF")[0]; const long codcf=c->get_long("CODCF"); for (int i=0; iremove(); // Put here gest_vend() discrimination if (gest_vend()) { TLocalisamfile* v=lfile(LF_CFVEN); TLocalisamfile* rind=lfile(LF_INDSP); cancella(rind,1,_oldindirizzi); v->remove(); } _oldindirizzi=0; return c->status(); }