// ESAF : Euso Simulation and Analysis Framework
// $Id: SimuModuleFactory.cc,v 1.2 2004/06/16 06:49:36 thea Exp $
// A. Thea created Mar, 13 2004
#include <fstream>
#include "utils.hh"
#include "SimuModuleFactory.hh"
#include "TestSimuModule.hh"
ClassImp(SimuModuleFactory)
// constructor
SimuModuleFactory::SimuModuleFactory(const string& sName) {
fCurrent = 0;
ifstream in( sName.c_str() );
if (!in) {
throw runtime_error("Cannot find ModuleFileName in EusoSimuFramework");
}
string dummy;
// parse file
while ( getline(in,dummy) ) {
// erase comments
size_t pos = dummy.find('#');
if ( pos != string::npos )
dummy.erase( pos );
// swallow spaces
dummy = swallow_spaces( dummy );
// skip blank lines
if ( dummy.empty() ) continue;
// each line must be a key=value pair
// key can be : Module, Sequence
// Module: normal module
// Sequence: list of connected modules (not implemented yet)
// get identifier
string identifier = dummy.substr( 0, dummy.find('=') );
identifier = r_swallow_spaces( identifier );
if ( identifier.find_first_of("t ") != string::npos) {
throw runtime_error("Syntax error in file "+sName+" line "+dummy);
}
// get module name
string name = dummy.substr( dummy.find('=')+1, string::npos);
name = swallow_spaces( name );
name = r_swallow_spaces( name );
// build modules
if ( identifier == "Module" ) {
MakeModule( name );
}
else if ( identifier == "Sequence" ) {
MakeSequence( name );
}
else {
throw runtime_error("Syntax error in file"+sName+" line "+dummy);
}
}
}
// destructor
SimuModuleFactory::~SimuModuleFactory() {
}
// returns a module until the list is over
SimuModule* SimuModuleFactory::GetModule() {
if ( fCurrent < fModules.size() )
return fModules[fCurrent++];
else
return (SimuModule*)0;
}
// physically build objects and store into a vector
void SimuModuleFactory::MakeModule( const string& name) {
if ( name == "Test1" )
fModules.push_back( new TestSimuModule( name ) );
else if ( name == "Test2" )
fModules.push_back( new TestSimuModule( name ) );
else if ( name == "Test3" )
fModules.push_back( new TestSimuModule( name ) );
else
throw runtime_error("Unknown Module:"+name);
}
void SimuModuleFactory::MakeSequence( const string& name) {
}