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 );
 | 
						|
} |