Primo debug
git-svn-id: svn://10.65.10.50/trunk@4546 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									1b21272515
								
							
						
					
					
						commit
						0006611125
					
				| @ -19,10 +19,17 @@ void TMultiple_rectype::load_rows_file(int logicnum) | ||||
| { | ||||
|   const int index = log2ind(logicnum); | ||||
|   TRectype & rec = get_body_record(logicnum); | ||||
| 
 | ||||
|   set_body_key(rec); | ||||
|   TRecord_array * r = new TRecord_array(logicnum, (TString &) _numfields[index]); | ||||
|   _files.add( r, index); | ||||
|   if (_files.objptr(index) == NULL) | ||||
|   { | ||||
| 	  // crea
 | ||||
| 	  TRecord_array * r = new TRecord_array(rec, (TString &) _numfields[index]); | ||||
| 	  _files.add( r, index); | ||||
| 	} else {  | ||||
| 		// rilegge
 | ||||
| 		((TRecord_array &)_files[index]).read(rec); | ||||
| 	} | ||||
| 	_changed[index]=FALSE; | ||||
| } | ||||
| 
 | ||||
| int TMultiple_rectype::find(int logicnum, const char * fieldname, const char * s, int from, bool reverse) const | ||||
| @ -68,7 +75,7 @@ int TMultiple_rectype::write_rewrite(TBaseisamfile & f, bool re) const | ||||
|     for (int i = _nfiles - 1; err == NOERR && i >= 0 ; i--) | ||||
|     { | ||||
|       TRecord_array * r = (TRecord_array *) _files.objptr(i); | ||||
|       if (r) | ||||
|       if (r && !_changed[i]) | ||||
|         err = r->write(re); | ||||
|     } | ||||
|     // rewrite:
 | ||||
| @ -101,7 +108,7 @@ int TMultiple_rectype::write_rewrite(TBaseisamfile & f, bool re) const | ||||
|     for (int i = _nfiles - 1; err == NOERR && i >= 0 ; i--) | ||||
|     { | ||||
|       TRecord_array * r = (TRecord_array *)_files.objptr(i); | ||||
|       if (r) | ||||
|       if (r && !_changed[i]) | ||||
|         err = r->write(re); | ||||
|     } | ||||
|   } | ||||
| @ -131,7 +138,7 @@ TRecord_array & TMultiple_rectype::body(int logicnum) const | ||||
| { | ||||
|   const int index = log2ind(logicnum); | ||||
| 
 | ||||
|   if (_files.objptr(index) == NULL) | ||||
|   if (_files.objptr(index) == NULL || _changed[index]) | ||||
|     ((TMultiple_rectype *) this)->load_rows_file(_logicnums[index]); | ||||
|   return (TRecord_array &) _files[index]; | ||||
| } | ||||
| @ -175,7 +182,7 @@ void TMultiple_rectype::zero(char c) | ||||
|   TAuto_variable_rectype::zero(c); | ||||
|   for (int i = _nfiles - 1; i >= 0 ; i--) | ||||
|     if (_files.objptr(i) != NULL) | ||||
|       _files.remove(i); | ||||
|       ((TRecord_array &)_files[i]).destroy_rows(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| @ -188,8 +195,12 @@ int TMultiple_rectype::read(TRectype & rec, word op, word lockop) | ||||
|   int err = TRectype::read(f, op, lockop); | ||||
| 
 | ||||
|   for (int i = _nfiles - 1; i >= 0 ; i--) | ||||
|     if (_files.objptr(i) != NULL) | ||||
|       _files.remove(i); | ||||
|   { | ||||
|    	if (_autoload[i]) | ||||
|    		load_rows_file(_logicnums[i]); | ||||
|    	else	if (_files.objptr(i) != NULL) | ||||
| 			_changed[i]=TRUE; | ||||
|   } | ||||
|   _nuovo = err != NOERR; | ||||
|   return err; | ||||
| } | ||||
| @ -215,10 +226,11 @@ TMultiple_rectype::TMultiple_rectype(int hfn) | ||||
| } | ||||
| 
 | ||||
|   // @ cmember costruttore dal file
 | ||||
| void TMultiple_rectype::add_file(int logicnum, const char * numfield) | ||||
| void TMultiple_rectype::add_file(int logicnum, const char * numfield, bool autoload) | ||||
| { | ||||
|   CHECK(_nfiles < maxfiles, "Too many files added"); | ||||
|   _logicnums[_nfiles] = logicnum; | ||||
| 	_autoload[_nfiles] = autoload; | ||||
|   _numfields.add(numfield, _nfiles++); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -21,52 +21,67 @@ class TMultiple_rectype ; | ||||
| class TMultiple_rectype : public TAuto_variable_rectype | ||||
| { | ||||
|   enum { maxfiles = 20}; | ||||
|   // @ cmember Array di TRecord array per le righe
 | ||||
|   // @cmember Array di TRecord array per le righe
 | ||||
|   TArray _files;  //
 | ||||
|   // @ cmember flag indicatore  di record nuovo
 | ||||
|   // @cmember flag indicatore  di record nuovo
 | ||||
|   bool _nuovo; | ||||
|   // @ cmember numero di file righe
 | ||||
|   // @cmember numero di file righe
 | ||||
|   short _nfiles; | ||||
|   // @ cmember file delle righe
 | ||||
|   // @cmember file delle righe
 | ||||
|   int _logicnums[maxfiles]; | ||||
|   // @ cmember Array di nomi di campo "numeratore" delle righe
 | ||||
|   // @cmember Indicazione di record array non più corrispondente alla testata
 | ||||
|   bool _changed[maxfiles]; | ||||
|   // @cmember Indicazione autoload
 | ||||
|   bool _autoload[maxfiles]; | ||||
|   // @cmember Array di nomi di campo "numeratore" delle righe
 | ||||
|   TString_array _numfields; | ||||
| 
 | ||||
| 
 | ||||
| protected: | ||||
|   const TArray & files() const { return _files;} | ||||
|   // @ cmember funzione per costruire la chiave delle righe
 | ||||
|   // @cmember funzione per costruire la chiave delle righe
 | ||||
|   virtual void set_body_key(TRectype & rowrec);  | ||||
|   // @ cmember renumber la chiave del corpo
 | ||||
|   // @cmember setta la chiave della testata ad un valore nuovo (next-key)
 | ||||
|   virtual bool renum() { return FALSE; } | ||||
|   // @cmember renumera le chiavi di tutti i corpi in base alla testata
 | ||||
|   virtual void renum_key(); | ||||
|   // @cmember Genera il record del corpo
 | ||||
|   virtual TRectype & get_body_record(int logicnum = 0) { return *(new TRectype(logicnum ? logicnum : _logicnums[0])); } | ||||
|   // @cmember Crea e carica il record array del corpo
 | ||||
|   virtual void load_rows_file(int logicnum); | ||||
|   // @cmember Ritorna l'indice di <p _files> del numero logico passato
 | ||||
|   int log2ind(int logicnum) const; | ||||
|   // @cmember RIcerca la prima occorenza del corpo con fieldname uguale a s
 | ||||
|   virtual int find(int logicnum, const char * fieldname, const char * s, int from = 0, bool reverse = FALSE) const ; | ||||
|   // @cmember Scrive/riscrive un corpo
 | ||||
|   virtual int write_rewrite(TBaseisamfile& f, bool re = FALSE) const; | ||||
|   // @cmember Rimuove un corpo
 | ||||
|   void remove_body(int logicnum); | ||||
| 
 | ||||
|   // @cmember Associa un file a quello principale
 | ||||
|   void add_file(int logicnum, const char * numfield,bool autoload=FALSE); | ||||
| public: | ||||
|   //***********************
 | ||||
|   // struttura
 | ||||
|   // @ cmember restituisce il record di testata
 | ||||
|   // @cmember restituisce il record di testata
 | ||||
|   const TAuto_variable_rectype& head() const { return *this; } // Ritorna la testata del documento
 | ||||
|   // @ cmember restituisce il record di testata
 | ||||
|   // @cmember restituisce il record di testata
 | ||||
|   TAuto_variable_rectype& head() { return *this; } // Ritorna la testata del documento
 | ||||
| 
 | ||||
| 
 | ||||
|   // @ cmember restituisce il record array del corpo
 | ||||
|   // @cmember restituisce il record array del corpo
 | ||||
|   TRecord_array & body(int logicnum = 0) const; | ||||
|   // @ cmember restituisce il numero di record nel corpo
 | ||||
|   // @cmember restituisce il numero di record nel corpo
 | ||||
|   int rows(int logicnum = 0) const { return body(logicnum).rows(); } | ||||
| 
 | ||||
|    // @ cmember restituisce il record n-esimo del del corpo
 | ||||
|    // @cmember restituisce il record n-esimo del del corpo
 | ||||
|   virtual const TRecord_array & operator[](int logicnum) const { return (const TRecord_array &)((TMultiple_rectype *)this)->body(logicnum); } | ||||
|   // @ cmember restituisce il record n-esimo del del corpo
 | ||||
|   // @cmember restituisce il record n-esimo del del corpo
 | ||||
|   virtual TRecord_array & operator[](int logicnum) { return (TRecord_array &)body(logicnum); } | ||||
| 
 | ||||
|   // @cmember distrugge una riga del record array del corpo
 | ||||
|   bool destroy_row(int n, bool pack = FALSE, int logicnum = 0) { return body(logicnum).destroy_row(n, pack); } | ||||
|   // @cmember distrugge tutte le righe del record array del corpo
 | ||||
|   void destroy_rows(int logicnum = 0) { body(logicnum).destroy_rows(); } | ||||
| 
 | ||||
|   //***********************
 | ||||
| @ -75,14 +90,13 @@ public: | ||||
|   virtual void set_fields(TAuto_variable_rectype & rec) {} | ||||
|   virtual void reset_fields(TAuto_variable_rectype & rec) { rec.remove_field(); } | ||||
| 
 | ||||
|   virtual void renum_key(); | ||||
|   virtual TRectype & operator =(const TRectype & r); | ||||
|   virtual TRectype & operator =(const char * r); | ||||
|   virtual void zero(char c = '\0'); | ||||
| 
 | ||||
|   virtual int read(TRectype & rec, word op = _isequal, word lockop = _nolock); | ||||
|   virtual int read(word op = _isequal, word lockop = _nolock) { return read(*this, op, lockop); } | ||||
|   int read(TBaseisamfile & f, word op = _isequal, word lockop = _nolock) { return read(f.curr(), op, lockop); } | ||||
|   virtual int read(word op = _isequal, word lockop = _nolock) { return TMultiple_rectype::read(*this, op, lockop); } | ||||
|   int read(TBaseisamfile & f, word op = _isequal, word lockop = _nolock) { return TMultiple_rectype::read(f.curr(), op, lockop); } | ||||
| 
 | ||||
|   virtual int write(TBaseisamfile& f) const { return write_rewrite(f);} | ||||
|   virtual int rewrite(TBaseisamfile& f) const { return write_rewrite(f, TRUE);} | ||||
| @ -92,16 +106,14 @@ public: | ||||
|   int rewrite() const { TBaseisamfile f(num()); return rewrite(f);} | ||||
|   int remove() const { TBaseisamfile f(num()); return remove(f);} | ||||
| 
 | ||||
| 
 | ||||
|   void add_file(int logicnum, const char * numfield); | ||||
|   //**************************
 | ||||
|   // @ cmember costruttore dal numero del file
 | ||||
|   // @cmember costruttore dal numero del file
 | ||||
|   TMultiple_rectype(int hfn); | ||||
|   // @ cmember costruttore dal file
 | ||||
|   // @cmember costruttore dal file
 | ||||
|   TMultiple_rectype(const TBaseisamfile* file); | ||||
|   // @ cmember costruttore dal record
 | ||||
|   // @cmember costruttore dal record
 | ||||
|   TMultiple_rectype(const TRectype & rec); | ||||
|   // @ cmember costruttore di copia
 | ||||
|   // @cmember costruttore di copia
 | ||||
|   TMultiple_rectype(const TMultiple_rectype& r); | ||||
|   virtual ~TMultiple_rectype() {} | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user