#ifndef ROOT_TMVA_Configurable
#define ROOT_TMVA_Configurable
#include "Riostream.h"
#include "TObject.h"
#include "TList.h"
#include <sstream>
#include <vector>
#include <iostream>
#ifndef ROOT_TMVA_MsgLogger
#include "TMVA/MsgLogger.h"
#endif
#ifndef ROOT_TMVA_Option
#include "TMVA/Option.h"
#endif
namespace TMVA {
class MsgLogger;
class Configurable : public virtual TObject {
public:
Configurable( const TString & theOption = "" );
virtual ~Configurable();
void ParseOptions( Bool_t verbose = kTRUE);
void PrintOptions() const;
virtual const char* GetName() const { return fName; }
void SetName( const char* n ) { fName = TString(n); }
template<class T>
OptionBase* DeclareOptionRef( T& ref, const TString& name, const TString& desc = "" );
template<class T>
OptionBase* DeclareOptionRef( T*& ref, Int_t size, const TString& name, const TString& desc = "" );
template<class T>
void AddPreDefVal(const T&);
void CheckForUnusedOptions() const;
const TString & GetOptions() const { return fOptions; }
void SetOptions(const TString & s) { fOptions = s; }
protected:
Bool_t LooseOptionCheckingEnabled() const { return fLooseOptionCheckingEnabled; }
void EnableLooseOptions( Bool_t b = kTRUE ) { fLooseOptionCheckingEnabled = b; }
void WriteOptionsToStream ( ostream& o, const TString& prefix ) const;
void ReadOptionsFromStream( istream& istr );
void ResetSetFlag();
private:
void SplitOptions(const TString& theOpt, TList& loo) const;
TString fOptions;
Bool_t fLooseOptionCheckingEnabled;
OptionBase* fLastDeclaredOption;
TList fListOfOptions;
TString fName;
mutable MsgLogger fLogger;
private:
template <class T>
void AssignOpt( const TString& name, T& valAssign ) const;
public:
ClassDef(Configurable,0)
};
}
template <class T>
TMVA::OptionBase* TMVA::Configurable::DeclareOptionRef( T& ref, const TString& name, const TString& desc)
{
OptionBase* o = new Option<T>(ref, name, desc);
fListOfOptions.Add(o);
fLastDeclaredOption = o;
return o;
}
template <class T>
TMVA::OptionBase* TMVA::Configurable::DeclareOptionRef( T*& ref, Int_t size, const TString& name, const TString& desc)
{
OptionBase* o = new Option<T*>(ref, size, name, desc);
fListOfOptions.Add(o);
fLastDeclaredOption = o;
return o;
}
template<class T>
void TMVA::Configurable::AddPreDefVal(const T& val)
{
Option<T>* oc = dynamic_cast<Option<T>*>(fLastDeclaredOption);
if(oc!=0) oc->AddPreDefVal(val);
}
template <class T>
void TMVA::Configurable::AssignOpt(const TString& name, T& valAssign) const
{
TObject* opt = fListOfOptions.FindObject(name);
if (opt!=0) valAssign = ((Option<T>*)opt)->Value();
else
fLogger << kFATAL << "Option \"" << name
<< "\" not declared, please check the syntax of your option string" << Endl;
}
#endif
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.