3469988609
git-svn-id: svn://10.65.10.50/trunk@2238 c028cbd2-c16b-5b4b-a496-9718f37d4682
135 lines
3.4 KiB
C++
Executable File
135 lines
3.4 KiB
C++
Executable File
#ifndef __LFFILES_H
|
|
#include "lffiles.h"
|
|
#endif
|
|
|
|
#ifndef __DYNAREL_H
|
|
#include "dynarel.h"
|
|
#endif
|
|
|
|
|
|
TField_array::TField_array( const TRectype& rec )
|
|
{
|
|
int last = rec.items( );
|
|
for( int i = 0; i < last; i ++ )
|
|
{
|
|
add( rec.fieldname( i ), rec.get( rec.fieldname( i ) ) );
|
|
}
|
|
}
|
|
|
|
const TString& TField_array::get( const TString& nome_campo )
|
|
{
|
|
return ( TString& )(*this)[ nome_campo ];
|
|
}
|
|
|
|
int TField_array::get_int( const TString& nome_campo )
|
|
{
|
|
return atoi( get( nome_campo ) );
|
|
}
|
|
|
|
long TField_array::get_long( const TString& nome_campo )
|
|
{
|
|
return atoi( get( nome_campo ) );
|
|
}
|
|
|
|
bool TField_array::get_bool( const TString& nome_campo )
|
|
{
|
|
TString p( get( nome_campo ) );
|
|
char fc = toupper( p[ 0 ] );
|
|
return ( fc == 'T' || fc == 'Y' || fc == 'S' || fc == 'X' );
|
|
}
|
|
|
|
real TField_array::get_real( const TString& nome_campo )
|
|
{
|
|
real r( get( nome_campo ) );
|
|
return r;
|
|
}
|
|
|
|
|
|
TDyna_rel::TDyna_rel( const int main_file_index )
|
|
{
|
|
_main_file = main_file_index;
|
|
load_file( main_file_index );
|
|
};
|
|
|
|
bool TDyna_rel::file_added( const int file_index )
|
|
{
|
|
return ( &_rules[ file_index ] != NULL );
|
|
}
|
|
|
|
bool TDyna_rel::file_loaded( const int file_index )
|
|
{
|
|
return ( &_file_array[ file_index ] != NULL );
|
|
}
|
|
|
|
void TDyna_rel::load_file( const int file_index )
|
|
{
|
|
CHECK( file_loaded( file_index ), "Utilizzo di un file non aggiunto alla dyna_rel!" );
|
|
TToken_string rule( ( ( TString& ) _rules[ file_index ] ) );
|
|
|
|
// Il file principale è già caricato
|
|
TLocalisamfile to( file_index );
|
|
to.setkey( _keys[ file_index ] );
|
|
to.curr( ).zero( );
|
|
int last = rule.items( );
|
|
// Carico i valori per la ricerca
|
|
for( int i = 0; i < last; i += 3 )
|
|
to.curr( ).put( rule.get( i ), get( ( rule.get_int( i + 1 ) == 0 ? rule.get_int( i + 1 ) : _main_file ), rule.get( i + 2 ) ) );
|
|
to.read ( _isequal );
|
|
// Se il posizionamento riesce ...
|
|
if( !to.bad( ) )
|
|
{
|
|
// Carica tutti i campi
|
|
_file_array.add( new TField_array( to.curr( ) ), file_index );
|
|
}
|
|
}
|
|
|
|
void TDyna_rel::add_file( const int file_index, const TToken_string rule, const int key )
|
|
{
|
|
_rules[ file_index ] = rule;
|
|
_keys[ file_index ] = key;
|
|
|
|
};
|
|
|
|
const TString& TDyna_rel::get( const int file_index, const TString16 nome_campo )
|
|
{
|
|
CHECK( file_loaded( file_index ), "Tentativo di accesso ad un campo di un file non caricato!" );
|
|
return ( file( file_index ).get( nome_campo ) );
|
|
};
|
|
|
|
int TDyna_rel::get_int( const int file_index, const TString16 nome_campo )
|
|
{
|
|
CHECK( file_loaded( file_index ), "Tentativo di accesso ad un campo di un file non caricato!" );
|
|
return ( file( file_index ).get_int( nome_campo ) );
|
|
};
|
|
|
|
long TDyna_rel::get_long( const int file_index, const TString16 nome_campo )
|
|
{
|
|
CHECK( file_loaded( file_index ), "Tentativo di accesso ad un campo di un file non caricato!" );
|
|
return ( file( file_index ).get_long( nome_campo ) );
|
|
};
|
|
|
|
bool TDyna_rel::get_bool( const int file_index, const TString16 nome_campo )
|
|
{
|
|
CHECK( file_loaded( file_index ), "Tentativo di accesso ad un campo di un file non caricato!" );
|
|
return ( file( file_index ).get_bool( nome_campo ) );
|
|
};
|
|
|
|
real TDyna_rel::get_real( const int file_index, const TString16 nome_campo )
|
|
{
|
|
CHECK( file_loaded( file_index ), "Tentativo di accesso ad un campo di un file non caricato!" );
|
|
return ( file( file_index ).get_real( nome_campo ) );
|
|
};
|
|
|
|
class TCF : public TDyna_rel
|
|
{
|
|
public:
|
|
|
|
TCF( );
|
|
|
|
|
|
};
|
|
|
|
TCF::TCF( ) : TDyna_rel( LF_CLIFO )
|
|
{
|
|
add_file( LF_CFVEN, "", 1 );
|
|
} |