campo-sirio/include/varrec.h
guy 2a3e35827d Patch level : 10.0 200
Files correlati     : ba1.exe
Ricompilazione Demo : [ ]
Commento            :
0001036: installazione cd patch 180
Installando ex novo ed indicando una società esistente di dati su una cartella diversa viene segnalato l'errore ba1.exe in fase di conversione archivi, richiamando da manutenzione archivi la conversione vengono generati gli errori allegati. Nell'area ftp di Aga, cartella Ilaria allego l'area dati SIDA per il test.


git-svn-id: svn://10.65.10.50/trunk@17971 c028cbd2-c16b-5b4b-a496-9718f37d4682
2008-12-23 09:05:22 +00:00

235 lines
9.3 KiB
C++
Executable File

#ifndef __VARREC_H
#define __VARREC_H
#ifndef __ISAM_H
#include <isam.h>
#endif
#ifndef __EXPR_H
#include <expr.h>
#endif
class TVariable_rectype;
// @doc EXTERNAL
//
// @type VIRTUAL_GET_FUNCTION | Prototipo funzione di calcolo del valore di un campo virtuale
// da definire quando non sia sufficente una semplice espressione
typedef const char * (*VIRTUAL_GET_FUNCTION)(TVariable_rectype & r);
// @doc EXTERNAL
//
// @class TVariable_field | Oggetto campo virtuale
//
// @base public | TObject
class TVariable_field : public TObject
// @author:(INTERNAL) Alessandro
{
TVariable_rectype * _rec;
TString80 _name;
TExpression * _e;
TString _value;
TToken_string * _put_string;
VIRTUAL_GET_FUNCTION _getfunc;
bool _in_get;
int _lenght;
public:
// @access Public Member
// @cmember Duplica il campo
virtual TObject* dup() const;
// @cmember segnala che il campo deve essere ricalcolato
virtual bool dirty() const { return true;}
// @cmember assegna lo stato di campo da ricalcolare
virtual void set_dirty(bool on = true) {}
// @cmember assegna lo stato di campo da non ricalcolare
void set_clean() { set_dirty(false);}
// @cmember assegna il record a cui appartiene il campo
virtual void set_rec(TVariable_rectype * rec) { _rec = rec;}
// @cmember ritorna il nome del campo
const char * name() const { return _name;}
// @cmember ritorna il valore del campo
TString & get() const;
// @cmember aggiorna il valore del campo utilizzando <p val>
void put(const char * val);
// @cmember aggiorna il valore del campo utilizzando <p val> indipendentemente dal tipo del campo variabile
void force_value(const char * val) { _value = val; set_clean(); }
// @cmember azzera il valore del campo
void zero();
// @cmember il campo non ha formule o funzioni collegate
bool plain() const
{ return _e == NULL && _getfunc == NULL;}
// @cmember Ritorna la lunghezza del campo
int lenght() const
{return _lenght;}
TExpression * expression() const { return _e;}
// @ cmember Costruttore con una espressione di calcolo
TVariable_field(const char * name, const char * expr = "", TTypeexp type = _strexpr, int len=255);
// @ cmember Costruttore con una funzione
TVariable_field(const char * name, VIRTUAL_GET_FUNCTION getfunc, int len=255);
// @ cmember Costruttore con una espressione di calcolo
TVariable_field(const char * name, const TExpression & expr, TTypeexp type = _strexpr, int len=255);
// @ cmember Costruttore con un variable_field
TVariable_field(const TVariable_field & f);
// @ cmember Distruttore
virtual ~TVariable_field();
};
// @doc EXTERNAL
// @class TVariable_rectype | Classe per la definizione del record di file con campi virtuali (variabili)
// @base public | TRectype
class TVariable_rectype : public TRectype
// @author:(INTERNAL) Sandro
{
// @access:(INTERNAL) Private Member
TAssoc_array _virtual_fields;
TString16 _memo_fld;
bool _memo_fld_to_load;
protected:
// @cmember Segnalazione di un campo inesistente
virtual void unknown_field(const char* name) const;
// @cmember Indica se il record implementa i campi variabili automatici
virtual bool auto_virtual_fields() const { return TRUE; }
// @cmember Ritorna il contenuto del campo <p fieldname> (non tipizzata)
virtual const TString & get_str(const char* fieldname) const ;
// @cmember Setta il contenuto del campo <p fieldname> (non tipizzata)
virtual void put_str(const char* fieldname, const char* val);
// void put(const char* fieldname, TString& val);
public:
// @access Public Member
// @cmember Duplica il tipo di record
virtual TObject* dup() const;
// @cmember Setta il record come non vuoto (chiama <mf TRectype::setempty>
virtual TFieldtypes type(const char* fieldname) const;
// @cmember Ritorna la lunghezza del campo <p fieldname>
virtual int length(const char* fieldname) const;
// @cmember Ritorna numero di decimali del campo <p fieldname>
virtual int ndec(const char* fieldname) const;
// @cmember Indica se esiste il campo <p fieldname>
virtual bool exist(const char* fieldname) const;
// @cmember Vuota il campo puntato da <p fieldname>
virtual void zero(const char * fieldname);
// @cmember Vuota tutto il record usando il carattere <p c>
virtual void zero(char c = '\0');
// @cmember Assegnazione tra TVariable_rectype e TRectype
virtual TRectype & operator =(const TRectype& rec);
// @cmember Assegnazione tra TVariable_rectype
virtual TVariable_rectype & operator =(const TVariable_rectype& rec);
// @cmember Assegnazione tra TRectype const char *
virtual TRectype & operator =(const char* rec);
void set_memo_fld(const char * fieldname);
void reset_memo_fld() { set_memo_fld(NULL); }
virtual void init_memo(const TRecnotype recno = RECORD_NON_FISICO, TIsam_handle file = 0);
virtual void write_memo(TIsam_handle file, const TRecnotype recno);
virtual void add_field(TVariable_field * f);
virtual void remove_field(const char * fieldname = NULL);
virtual void set_variables(TExpression * e) const ;
TVariable_field * variable_field(const char * name) const { return (TVariable_field *) _virtual_fields.objptr(name);}
TVariable_field * first_variable_field() { return (TVariable_field *) _virtual_fields.first_item();}
TVariable_field * succ_variable_field() { return (TVariable_field *) _virtual_fields.succ_item();}
TVariable_field * pred_variable_field() { return (TVariable_field *) _virtual_fields.pred_item();}
TVariable_field * last_variable_field() { return (TVariable_field *) _virtual_fields.last_item();}
// virtual const char * get_variable_field_names(bool restart = FALSE) ;
// @cmember Costruttore Costruisce un record staccato da un file.
// Sarebbe meglio utilizzare una delle altre due
TVariable_rectype(int logicnum);
// @cmember Costruttore. Costruisce record e lo associa al file isam <p i>
TVariable_rectype(const TBaseisamfile* i);
// @cmember Costruttore. Costruisce il record a partire da <p r>
TVariable_rectype(const TRectype & r);
// @cmember Costruttore. Costruisce il record a partire da <p r>
TVariable_rectype(const TVariable_rectype & r);
virtual word class_id() const { return CLASS_VARIABLE_RECTYPE; }
virtual bool is_kind_of(word id) const { return id == class_id() || TRectype::is_kind_of(id); }
// @cmember Distruttore
virtual ~TVariable_rectype() {}
};
// @doc EXTERNAL
// @class TAuto_variable_rectype | Classe per la definizione del record di file con campi virtuali (variabili)
// @base public | TVariable_rectype
class TAuto_variable_rectype : public TVariable_rectype
// @author:(INTERNAL) Sandro
{
protected:
virtual bool auto_virtual_fields() const { return TRUE; }
public:
// @cmember Costruttore Costruisce un record staccato da un file.
// Sarebbe meglio utilizzare una delle altre due
// @cmember Assegnazione tra TAuto_variable_rectype e TRectype
virtual TRectype & operator =(const TRectype& rec) { return TVariable_rectype::operator =(rec); }
// @cmember Assegnazione tra TAuto_variable_rectype e TVariable_rectype
virtual TVariable_rectype & operator =(const TVariable_rectype& rec) { return TVariable_rectype::operator =(rec); }
// @cmember Assegnazione tra TAuto_variable_rectype
virtual TAuto_variable_rectype & operator =(const TAuto_variable_rectype& rec) { return (TAuto_variable_rectype &) TVariable_rectype::operator =((TVariable_rectype &)rec); }
// @cmember Assegnazione tra TAuto_variable_rectype const char *
virtual TRectype & operator =(const char* rec) { return TVariable_rectype::operator =(rec); }
TAuto_variable_rectype(int logicnum) : TVariable_rectype(logicnum) {}
// @cmember Costruttore. Costruisce record e lo associa al file isam <p i>
TAuto_variable_rectype(const TBaseisamfile* i) : TVariable_rectype(i) {}
// @cmember Costruttore. Costruisce il record a partire da <p r>
TAuto_variable_rectype(const TRectype & r) : TVariable_rectype(r) {}
// @cmember Costruttore. Costruisce il record a partire da <p r>
TAuto_variable_rectype(const TVariable_rectype & r) : TVariable_rectype(r) {}
virtual word class_id() const { return CLASS_AUTO_VARIABLE_RECTYPE; }
virtual bool is_kind_of(word id) const { return id == class_id() || TVariable_rectype::is_kind_of(id); }
// @cmember Indica se esiste il campo <p fieldname>
virtual bool exist(const char* fieldname) const { return fieldname && *fieldname;}
// @cmember Distruttore
virtual ~TAuto_variable_rectype() {}
};
///////////////////////////////////////////////////////////
// TExtrectype
///////////////////////////////////////////////////////////
class TExtrectype : public TVariable_rectype
{
RecDes _rd;
protected: // TRectype
virtual bool auto_virtual_fields() const { return true; }
public:
virtual const RecDes& rec_des() const { return _rd; }
virtual word class_id() const { return CLASS_EXT_RECTYPE; }
virtual bool is_kind_of(word id) const { return id == class_id() || TVariable_rectype::is_kind_of(id); }
TExtrectype(const TTrec& r); // Costruisce il record a partire da r
virtual ~TExtrectype() ;
};
#endif // __VARREC_