Modifica a TSorted_cursor::buildcursor() per far si' che accetti

anche gli alias. (es. 216@->RAGSOC).


git-svn-id: svn://10.65.10.50/trunk@2542 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1996-01-30 15:59:31 +00:00
parent 826499de7f
commit 5e3950f072

View File

@ -1,4 +1,4 @@
// $Id: relation.cpp,v 1.74 1995-12-29 12:09:00 andrea Exp $ // $Id: relation.cpp,v 1.75 1996-01-30 15:59:31 angelo Exp $
// relation.cpp // relation.cpp
// fv 12/8/93 // fv 12/8/93
// relation class for isam files // relation class for isam files
@ -390,15 +390,15 @@ int TRelation::name2ind(
// @mfunc Ritorna il descrittore del file // @mfunc Ritorna il descrittore del file
// //
// @rdesc Ritorna il reference ad un <c TLocalisamfile> che indica il descrittore del // @rdesc Ritorna il reference ad un <c TLocalisamfile> che indica il descrittore del
// file della relazione // file della relazione
TLocalisamfile& TRelation::lfile( TLocalisamfile& TRelation::lfile(
int logicnum) const // @parm Numero logico del file da ritornare (default 0) int logicnum) const // @parm Numero logico del file da ritornare (default 0)
// @parm const char* | name | Nome del file da ritornare // @parm const char* | name | Nome del file da ritornare
// @syntax TLocalisamfile& lfile(int logicnum) // @syntax TLocalisamfile& lfile(int logicnum)
// @syntax TLocalisamfile& lfile(const char* name) // @syntax TLocalisamfile& lfile(const char* name)
// //
// @comm E' comodo utilizzare anche l'operatore [] che richiama questa funzione con // @comm E' comodo utilizzare anche l'operatore [] che richiama questa funzione con
// la prima sintassi. // la prima sintassi.
{ {
const int idx = log2ind(logicnum); const int idx = log2ind(logicnum);
@ -415,18 +415,18 @@ TLocalisamfile& TRelation::lfile(const char* name) const
// @mfunc Abilita/disabilita la scrittura sul file // @mfunc Abilita/disabilita la scrittura sul file
void TRelation::write_enable( void TRelation::write_enable(
int logicnum, // @parm Numero logico del file da abilitare/disabilitare (default 0) int logicnum, // @parm Numero logico del file da abilitare/disabilitare (default 0)
// @parm cont char* | name | Nome del file da abilitare/disabilitare // @parm cont char* | name | Nome del file da abilitare/disabilitare
const bool on) // @parm Indica l'operazione da effettuare sul file: const bool on) // @parm Indica l'operazione da effettuare sul file:
// //
// @flag TRUE | Abilita la scrittura sul file (default) // @flag TRUE | Abilita la scrittura sul file (default)
// @flag FALSE | Disabilita la scrittura sul file // @flag FALSE | Disabilita la scrittura sul file
// @syntax void write_enable(int logicnum, const bool on) // @syntax void write_enable(int logicnum, const bool on)
// @syntax void write_enable(const char* name, const bool on) // @syntax void write_enable(const char* name, const bool on)
// //
// @comm Nel caso venga passato un numero logico uguale a 0 vengono abilitati/disabilitati tutti // @comm Nel caso venga passato un numero logico uguale a 0 vengono abilitati/disabilitati tutti
// i file dell relazione // i file dell relazione
{ {
@ -1235,7 +1235,7 @@ TRecnotype TCursor::readrec()
// @mfunc Mette un lock sul record // @mfunc Mette un lock sul record
// //
// @rdesc Ritorna il numero di errore che si verifica nel porre il lock (NOERR) se // @rdesc Ritorna il numero di errore che si verifica nel porre il lock (NOERR) se
// non si verificano errori // non si verificano errori
int TCursor::lock( int TCursor::lock(
TReclock l) // @parm Tipo di locke da porre sul record (vedi <t TReclock>) TReclock l) // @parm Tipo di locke da porre sul record (vedi <t TReclock>)
{ {
@ -1377,10 +1377,11 @@ TRecnotype TSorted_cursor::buildcursor(TRecnotype rp)
s.cut(s.len()-1); s.cut(s.len()-1);
TFieldref f(s,0); TFieldref f(s,0);
// Il controllo del file e' automatico in f.len() // Il controllo del file e' automatico in f.len()
int flen = f.len(relation()->curr()); int n = f.file();
int flen = f.len(n<0 ? relation()->lfile(n).curr() : relation()->curr());
_sort->addsortkey(abspos+f.from(),flen,versus); _sort->addsortkey(abspos+f.from(),flen,versus);
CHECKS(flen!=0,"Field can not have null length: ",(const char *) s); CHECKS(flen!=0,"Field can not have null length: ",(const char *) s);
int lf = (f.file()!=0 ? f.file() : file().num()); int lf = (relation()->lfile(n).num());
TRectype r(lf); TRectype r(lf);
abspos+=r.length(f.name()); abspos+=r.length(f.name());
CHECKD(abspos<=512,"Cannot exceed 512 bytes-key %d",abspos); CHECKD(abspos<=512,"Cannot exceed 512 bytes-key %d",abspos);
@ -1613,7 +1614,7 @@ TFieldref& TFieldref::operator =(
const TString& s) // @parm Stringa da assegnare all'oggetto const TString& s) // @parm Stringa da assegnare all'oggetto
// @comm Un Fildref deve avere il seguente formato (solamente NAME e il mandante): // @comm Un Fildref deve avere il seguente formato (solamente NAME e il mandante):
// <nl>FILE->NAME[FROM,TO] // <nl>FILE->NAME[FROM,TO]
{ {
int pos = s.find("->"); int pos = s.find("->");
@ -1728,7 +1729,7 @@ int TFieldref::len(TRectype &rec) const
{ {
if (_to >= 0) if (_to >= 0)
return _to - _from; return _to - _from;
if (_fileid == 0) if (_fileid <= 0)
return rec.length(_name) - _from; return rec.length(_name) - _from;
const TRectype r(_fileid); const TRectype r(_fileid);
@ -1794,16 +1795,16 @@ bool TRecord_array::exist(int n) const
// @mfunc Ritorna la riga <p r> // @mfunc Ritorna la riga <p r>
// //
// @rdesc Ritorna un TRectype alla riga cercata o eventualemete il reference della nuova creata, // @rdesc Ritorna un TRectype alla riga cercata o eventualemete il reference della nuova creata,
// NULL nes caso non esista e non venga creata. // NULL nes caso non esista e non venga creata.
TRectype& TRecord_array::row( TRectype& TRecord_array::row(
int n, // @parm Numero della riga da creare int n, // @parm Numero della riga da creare
bool create) // @parm Indica se creare una nuova riga se non esiste: bool create) // @parm Indica se creare una nuova riga se non esiste:
// //
// @flag TRUE | Se la riga <p n> non esiste viene creata // @flag TRUE | Se la riga <p n> non esiste viene creata
// @flag FALSE | Se la riga <p n> non esiste non viene creata // @flag FALSE | Se la riga <p n> non esiste non viene creata
// @comm Nel caso <p create> si TRUE e venga richiesta una riga non esistente si crea un nuovo // @comm Nel caso <p create> si TRUE e venga richiesta una riga non esistente si crea un nuovo
// record copiando la chiave. // record copiando la chiave.
{ {
const int i = n >= 0 ? n - _offset : -1; const int i = n >= 0 ? n - _offset : -1;
TRectype* r = (TRectype*)objptr(i); TRectype* r = (TRectype*)objptr(i);
@ -1821,9 +1822,9 @@ TRectype& TRecord_array::row(
// //
// @rdesc Ritorna se e' stato rinumerato il campo chiave // @rdesc Ritorna se e' stato rinumerato il campo chiave
bool TRecord_array::renum_key( bool TRecord_array::renum_key(
const char* field, // @parm Campo della chiave a cui assegnare un nuovo valore const char* field, // @parm Campo della chiave a cui assegnare un nuovo valore
const TString& num) // @parm Nuovo valore da assegnare al campo const TString& num) // @parm Nuovo valore da assegnare al campo
// @parm long | num | Nuovo valore da assegnare al campo // @parm long | num | Nuovo valore da assegnare al campo
// @syntax bool renum_key(const char* field, const TString& num); // @syntax bool renum_key(const char* field, const TString& num);
// @syntax bool renum_key(const char* field, long num); // @syntax bool renum_key(const char* field, long num);
@ -1879,9 +1880,9 @@ int TRecord_array::add_row(TRectype* r)
// //
// @rdesc Ritorna se e' riuscito ad eliminare la riga // @rdesc Ritorna se e' riuscito ad eliminare la riga
bool TRecord_array::destroy_row( bool TRecord_array::destroy_row(
int r, // @parm Numero della riga da eliminare int r, // @parm Numero della riga da eliminare
bool pack) // @parm Indica se compattare gli elementi dell'array (default FALSE) bool pack) // @parm Indica se compattare gli elementi dell'array (default FALSE)
// @parm const TRectype& | r | Record da eliminare // @parm const TRectype& | r | Record da eliminare
// @syntax bool destroy_row(int n, bool pack); // @syntax bool destroy_row(int n, bool pack);
// @syntax bool destroy_row(const TRectype& r, bool pack); // @syntax bool destroy_row(const TRectype& r, bool pack);
@ -2141,8 +2142,8 @@ void TRelation_description::read_rel()
// @mfunc Cambia la relazione descritta // @mfunc Cambia la relazione descritta
void TRelation_description::change_relation( void TRelation_description::change_relation(
TRelation& r, // @parm Nuova relazione da assegnare TRelation& r, // @parm Nuova relazione da assegnare
TString_array& a) // @parm Array di descrittore dei file TString_array& a) // @parm Array di descrittore dei file
{ {
_rel = &r; _rel = &r;
read_rel(); read_rel();
@ -2172,10 +2173,10 @@ void TRelation_description::print_on(ostream& out) const
// @flag TRUE | E' stato selzionato il file // @flag TRUE | E' stato selzionato il file
// @flag FALSE | Non e' riuscito a selezionare il file // @flag FALSE | Non e' riuscito a selezionare il file
bool TRelation_description::choose_file( bool TRelation_description::choose_file(
int file) // @parm Numero logico del file da selezionare (default 0) int file) // @parm Numero logico del file da selezionare (default 0)
// @comm Dopo aver scelto un file (occorre che ritorni TRUE) i metodi della classe // @comm Dopo aver scelto un file (occorre che ritorni TRUE) i metodi della classe
// permettono di conoscere tutti i dati riguardanti i parametri del file selezionato // permettono di conoscere tutti i dati riguardanti i parametri del file selezionato
{ {
TArray_sheet sht(-1,-1,0,0,"Selezione archivio", "Codice|Descrizione archivio@70"); TArray_sheet sht(-1,-1,0,0,"Selezione archivio", "Codice|Descrizione archivio@70");
@ -2225,10 +2226,10 @@ bool TRelation_description::choose_file(
// @flag TRUE | E' stato selzionato il campo // @flag TRUE | E' stato selzionato il campo
// @flag FALSE | Non e' riuscito a selezionare il campo // @flag FALSE | Non e' riuscito a selezionare il campo
bool TRelation_description::choose_field( bool TRelation_description::choose_field(
const char* fld) // @parm Nome del campo da selezionare (defualt "") const char* fld) // @parm Nome del campo da selezionare (defualt "")
// @comm Occorre sche sia selezioanto un file, diversamente viene considerato // @comm Occorre sche sia selezioanto un file, diversamente viene considerato
// selezionato il promo file // selezionato il promo file
{ {
TArray_sheet sht(-1,-1,0,0,"Selezione campo", TArray_sheet sht(-1,-1,0,0,"Selezione campo",
"Campo@10|Descrizione@50|Tipo@10|Dim."); "Campo@10|Descrizione@50|Tipo@10|Dim.");
@ -2262,10 +2263,10 @@ bool TRelation_description::choose_field(
// //
// @rdesc Ritorna solamente FALSE // @rdesc Ritorna solamente FALSE
bool TRelation_description::build_menu( bool TRelation_description::build_menu(
const char* title) // @parm Titolo del menu' const char* title) // @parm Titolo del menu'
// @comm Costruisce un albero di menu' e setta il campo corrente quando viene // @comm Costruisce un albero di menu' e setta il campo corrente quando viene
// selezionato (deve essere popup) // selezionato (deve essere popup)
// //
// @devnote Funzione non implementata. // @devnote Funzione non implementata.
{ {
@ -2332,8 +2333,8 @@ TFieldtypes TRelation_description::field_type()
// //
// @rdesc Ritorna se ha trovato il campo da settare // @rdesc Ritorna se ha trovato il campo da settare
bool TRelation_description::set_field_description( bool TRelation_description::set_field_description(
const char* field, // @parm Campo a cui assegnare la descrizione const char* field, // @parm Campo a cui assegnare la descrizione
const char* des) // @parm Descrizione da assgnare al campo const char* des) // @parm Descrizione da assgnare al campo
{ {
TString_array& fld = (TString_array&)_fields[_cur_file]; TString_array& fld = (TString_array&)_fields[_cur_file];