modules::navigator Class Reference

#include <ModulesNavigator.h>

List of all members.

Public Member Functions

int LoadConfigFile (const char *filename)
int MakeModules ()
BaseModuleGetModule (const std::string &module) const
 Get a named module.
BaseModuleGetModule (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 navigatorInstance ()
 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

Detailed Description

Singleton class tasked with:

Definition at line 27 of file ModulesNavigator.h.


Constructor & Destructor Documentation

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.

00030 {};


Member Function Documentation

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

template<typename T >
T* modules::navigator::GetModule ( const std::string &  module  )  const [inline]
Returns:
NULL if the module doesn't exist
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.

Returns:
NULL if the module doesn't exist

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


Member Data Documentation

Definition at line 94 of file ModulesNavigator.h.

Referenced by Debug(), and SetDebug().

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().

Definition at line 92 of file ModulesNavigator.h.

Referenced by LoadConfigFile(), and MakeModules().

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().


The documentation for this class was generated from the following files:

Generated on 15 Jun 2016 for AlcapDAQ by  doxygen 1.6.1