#include <ModulesNavigator.h>
Public Member Functions | |
int | LoadConfigFile (const char *filename) |
int | MakeModules () |
BaseModule * | GetModule (const std::string &module) const |
Get a named module. | |
BaseModule * | GetModule (const int &i) const |
template<typename T > | |
T * | GetModule (const std::string &module) const |
int | HowMany (const std::string &name) const |
Get the number of instances that the named module has been requested. | |
bool | Before (const std::string &first, const std::string &second) const |
modules::iterator | Begin () |
Return an iterator to the first module in the list. | |
modules::const_iterator | Begin () const |
Return a const iterator to the first module in the list. | |
modules::iterator | End () |
Return an iterator to the last module in the list. | |
modules::const_iterator | End () const |
Return a const iterator to the last module in the list. | |
unsigned int | Size () const |
Return the number of modules in the list. | |
unsigned int | GetNumModules () const |
Return the number of modules in the list. | |
void | SetDebug (bool d=true) |
bool | Debug () const |
bool | DumpInputFile () const |
void | SetOutFile (TFile *file) |
Tell the navigator which output file to be used. | |
Static Public Member Functions | |
static navigator * | Instance () |
Static method to obtain the singleton instance of the navigator. | |
Private Member Functions | |
navigator () | |
~navigator () | |
void | AddModule (const std::string &, BaseModule *) |
Private Attributes | |
bool | fModulesLoaded |
bool | fModulesMade |
bool | fDebug |
bool | fDumpInputFile |
modules::ordered_list | fModules |
modules::list | fModulesSearch |
modules::reader | fModulesFile |
TFile * | fOutFile |
Singleton class tasked with:
Definition at line 27 of file ModulesNavigator.h.
modules::navigator::navigator | ( | ) | [private] |
Definition at line 10 of file ModulesNavigator.cpp.
Referenced by Instance().
00010 :fModulesLoaded(false),fModulesMade(false),fDebug(false),fDumpInputFile(false),fOutFile(NULL){};
modules::navigator::~navigator | ( | ) | [inline, private] |
Definition at line 30 of file ModulesNavigator.h.
void modules::navigator::AddModule | ( | const std::string & | name, | |
BaseModule * | mod | |||
) | [private] |
Definition at line 91 of file ModulesNavigator.cpp.
References fModules, and fModulesSearch.
Referenced by MakeModules().
00091 { 00092 fModules.push_back(std::make_pair(name,mod)); 00093 fModulesSearch.insert(std::make_pair(name,mod)); 00094 }
bool modules::navigator::Before | ( | const std::string & | first, | |
const std::string & | second | |||
) | const |
Returns true if module 'first' is before module 'second' in the modules list
Definition at line 111 of file ModulesNavigator.cpp.
References fModules.
00111 { 00112 00113 modules::const_iterator i_first= std::find_if(fModules.begin(),fModules.end(),first_in_pair_equals(first)); 00114 if(i_first==fModules.end()){ 00115 cout<<"Error: Unable to find module "<<first<<endl; 00116 return false; 00117 } 00118 modules::const_iterator i_second= std::find_if(fModules.begin(),fModules.end(),first_in_pair_equals(second)); 00119 if(i_second==fModules.end()){ 00120 cout<<"Error: Unable to find module "<<second<<endl; 00121 return false; 00122 } 00123 int dist=std::distance(i_first,i_second); 00124 return dist>0; 00125 }
modules::const_iterator modules::navigator::Begin | ( | ) | const [inline] |
Return a const iterator to the first module in the list.
Definition at line 70 of file ModulesNavigator.h.
References fModules.
00070 {return fModules.begin();};
modules::iterator modules::navigator::Begin | ( | ) | [inline] |
Return an iterator to the first module in the list.
Definition at line 68 of file ModulesNavigator.h.
References fModules.
Referenced by LoopSequence::Postprocess(), LoopSequence::Preprocess(), and LoopSequence::Process().
00068 {return fModules.begin();};
bool modules::navigator::Debug | ( | ) | const [inline] |
Definition at line 81 of file ModulesNavigator.h.
References fDebug.
Referenced by MakeModules().
00081 {return fDebug;}
bool modules::navigator::DumpInputFile | ( | ) | const [inline] |
Definition at line 83 of file ModulesNavigator.h.
References fDumpInputFile.
00083 {return fDumpInputFile;}
modules::const_iterator modules::navigator::End | ( | ) | const [inline] |
Return a const iterator to the last module in the list.
Definition at line 74 of file ModulesNavigator.h.
References fModules.
00074 {return fModules.end();};
modules::iterator modules::navigator::End | ( | ) | [inline] |
Return an iterator to the last module in the list.
Definition at line 72 of file ModulesNavigator.h.
References fModules.
Referenced by LoopSequence::Postprocess(), LoopSequence::Preprocess(), and LoopSequence::Process().
00072 {return fModules.end();};
T* modules::navigator::GetModule | ( | const std::string & | module | ) | const [inline] |
modules::BaseModule * modules::navigator::GetModule | ( | const int & | i | ) | const [inline] |
Get a module by its position in the modules list as specified by the MODULES file.
Definition at line 130 of file ModulesNavigator.h.
References fModules.
00130 { 00131 return fModules[i].second; 00132 }
T * modules::navigator::GetModule | ( | const std::string & | module | ) | const [inline] |
Get a named module.
Definition at line 107 of file ModulesNavigator.h.
References fModulesSearch.
00107 { 00108 modules::list::const_iterator mod=fModulesSearch.find(module.c_str()); 00109 if(mod==fModulesSearch.end()) return NULL; 00110 return mod->second; 00111 }
unsigned int modules::navigator::GetNumModules | ( | ) | const [inline] |
Return the number of modules in the list.
Definition at line 78 of file ModulesNavigator.h.
References fModules.
00078 {return fModules.size();};
int modules::navigator::HowMany | ( | const std::string & | name | ) | const |
Get the number of instances that the named module has been requested.
Definition at line 96 of file ModulesNavigator.cpp.
References fModulesFile, fModulesMade, fModulesSearch, and modules::reader::HowMany().
00096 { 00097 if(fModulesMade) return fModulesSearch.count(name); 00098 return fModulesFile.HowMany(name); 00099 }
modules::navigator * modules::navigator::Instance | ( | ) | [inline, static] |
Static method to obtain the singleton instance of the navigator.
Definition at line 102 of file ModulesNavigator.h.
References navigator().
Referenced by BaseModule::BaseModule(), SavePulses::BeforeFirstEntry(), PlotTDPs::BeforeFirstEntry(), PlotTDP_TDiff::BeforeFirstEntry(), ClearGlobalData(), main(), MakeModules(), LoopSequence::Postprocess(), PrepareSingletonObjects(), LoopSequence::Preprocess(), LoopSequence::Process(), and modules::reader::ProcessGlobalOption().
00102 { 00103 static modules::navigator* instance=new navigator(); 00104 return instance; 00105 }
int modules::navigator::LoadConfigFile | ( | const char * | filename | ) |
read in a modules file, constructing each module and adding it to the list returns 0 on success and non-zero on failure
Definition at line 12 of file ModulesNavigator.cpp.
References modules::reader::DumpInputFile(), fDumpInputFile, fModulesFile, fModulesLoaded, modules::reader::GetNumModules(), and modules::reader::ReadFile().
00012 { 00013 // Check we haven't already opened a modules file 00014 if(fModulesLoaded ) { 00015 cout<<"Error: Loading a new modules file, when one was already loaded"<<endl; 00016 return 1; 00017 } 00018 // Read in the file and dump the processed options 00019 int retVal=fModulesFile.ReadFile(filename); 00020 if(retVal!=0) return retVal; 00021 00022 // check if we were asked to dump the input file's contents 00023 if(fModulesFile.DumpInputFile()) fDumpInputFile=true; 00024 00025 // Check the file contained at least one module 00026 size_t num_modules=fModulesFile.GetNumModules(); 00027 if(num_modules==0){ 00028 cout<<"Warning: No modules were requested for use, so there's nothing to be done!"<<endl; 00029 return 2; 00030 } 00031 cout<<"Number of modules requested: "<<num_modules<<endl; 00032 00033 // Everything finished ok 00034 fModulesLoaded=true; 00035 return 0; 00036 }
int modules::navigator::MakeModules | ( | ) |
Make all modules that were requested through the modules file Requires that LoadConfigFile has already been called successfully
Definition at line 38 of file ModulesNavigator.cpp.
References AddModule(), TemplateFactory< BaseModule, OptionsType >::canCreate(), TemplateFactory< BaseModule, OptionsType >::createModule(), Debug(), modules::options::DumpOptions(), fModulesFile, fModulesLoaded, fModulesMade, fOutFile, modules::reader::GetModule(), modules::reader::GetNumModules(), modules::reader::GetOptions(), and Instance().
00038 { 00039 // Check we've been given a valid output file 00040 if(! (fOutFile && fOutFile->IsWritable()) ){ 00041 cout<<"Error: Output file is not useable"<<endl; 00042 return 1; 00043 } 00044 00045 // Check that we've already opened a modules file 00046 if(!fModulesLoaded) { 00047 cout<<"Error: MakeModules(): Cannot make modules until you load a Modules file."<<endl; 00048 return 1; 00049 } 00050 00051 // Check that we've not already called this method 00052 if(fModulesMade) { 00053 cout<<"Error: MakeModules(): You've already called MakeModules."<<endl; 00054 return 1; 00055 } 00056 00057 // Loop over each requested module and build it 00058 // If we have any problems making a module then stop running 00059 modules::factory* mgr = modules::factory::Instance(); 00060 std::string name; 00061 modules::options* opts; 00062 BaseModule* mod=NULL; 00063 size_t num_modules=fModulesFile.GetNumModules(); 00064 for(unsigned i=0;i<num_modules;i++){ 00065 name = fModulesFile.GetModule(i); 00066 opts = fModulesFile.GetOptions(i); 00067 if(mgr->canCreate(name)){ 00068 if(Debug()){ 00069 cout<<"Creating module: "<<name<<endl; 00070 cout<<"With options:"<<endl; 00071 opts->DumpOptions(" "); 00072 } 00073 gDirectory->cd("/"); 00074 mod = mgr->createModule(name,opts); 00075 gDirectory->cd("/"); 00076 if(mod){ 00077 AddModule(name, mod); 00078 } 00079 else return 3; 00080 }else { 00081 std::cout<<"Unknown module requested: "<<name<<std::endl; 00082 return 4; 00083 } 00084 } 00085 00086 // Everything finished ok 00087 fModulesMade=true; 00088 return 0; 00089 }
void modules::navigator::SetDebug | ( | bool | d = true |
) | [inline] |
Definition at line 80 of file ModulesNavigator.h.
References fDebug.
Referenced by modules::reader::ProcessGlobalOption().
00080 {fDebug=d;}
void modules::navigator::SetOutFile | ( | TFile * | file | ) | [inline] |
Tell the navigator which output file to be used.
Definition at line 86 of file ModulesNavigator.h.
References fOutFile.
00086 {fOutFile=file;}
unsigned int modules::navigator::Size | ( | ) | const [inline] |
Return the number of modules in the list.
Definition at line 76 of file ModulesNavigator.h.
References fModules.
00076 {return fModules.size();};
bool modules::navigator::fDebug [private] |
Definition at line 94 of file ModulesNavigator.h.
Referenced by Debug(), and SetDebug().
bool modules::navigator::fDumpInputFile [private] |
Definition at line 95 of file ModulesNavigator.h.
Referenced by DumpInputFile(), and LoadConfigFile().
Definition at line 96 of file ModulesNavigator.h.
Referenced by AddModule(), Before(), Begin(), End(), GetModule(), GetNumModules(), and Size().
Definition at line 98 of file ModulesNavigator.h.
Referenced by HowMany(), LoadConfigFile(), and MakeModules().
bool modules::navigator::fModulesLoaded [private] |
Definition at line 92 of file ModulesNavigator.h.
Referenced by LoadConfigFile(), and MakeModules().
bool modules::navigator::fModulesMade [private] |
Definition at line 93 of file ModulesNavigator.h.
Referenced by HowMany(), and MakeModules().
Definition at line 97 of file ModulesNavigator.h.
Referenced by AddModule(), GetModule(), and HowMany().
TFile* modules::navigator::fOutFile [private] |
Definition at line 99 of file ModulesNavigator.h.
Referenced by MakeModules(), and SetOutFile().