Universita' di GenovaINFN Sezione di Genova  
AIRWATCH / EUSO Genova

SimuModuleFactory - source file

// 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) {
}
About Us | EUSO Official Website | Web pages created by Roberto Pesce and Alessandro Thea - Last Update Wed Nov 16 16:57:39 2005 Wed Nov 16 16:29:22 2005