ROOT logo
#ifndef __TMrbResource_h__
#define __TMrbResource_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           utils/inc/TMrbResource.h
// Purpose:        Define utilities to be used with MARaBOU
// Class:          TMrbResource       -- access to TEnv objects
// Description:    Common class definitions to be used within MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbResource.h,v 1.6 2010-12-14 14:18:04 Marabou Exp $
// Date:           $Date: 2010-12-14 14:18:04 $
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "Rtypes.h"
#include "TObject.h"
#include "TObjArray.h"
#include "TEnv.h"

#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbResource
// Purpose:        Access to ROOT environment
// Description:    Get() and Set() methods to access or modify TEnv objects
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbResource : public TObject {

	public:
		TMrbResource() {};								// default ctor
		TMrbResource(const Char_t * Prefix, TEnv * Environment = NULL);
		TMrbResource(const Char_t * Prefix, const Char_t * ResourceFile);

		~TMrbResource() {}; 							// default dtor
		TMrbResource(const TMrbResource &) {};			// default copy ctor

		const Char_t * Get(TString & Result, const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, const Char_t * Default);
		Int_t Get(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, Int_t Default);
		Bool_t Get(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, Bool_t Default);
		Double_t Get(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, Double_t Default);

		const Char_t * Get(TString & Result, const Char_t * Res1, const Char_t * Res2, const Char_t * Default);
		Int_t Get(const Char_t * Res1, const Char_t * Res2, Int_t Default);
		Bool_t Get(const Char_t * Res1, const Char_t * Res2, Bool_t Default);
		Double_t Get(const Char_t * Res1, const Char_t * Res2, Double_t Default);

		const Char_t * Get(TString & Result, const Char_t * Res, const Char_t * Default);
		Int_t Get(const Char_t * Res, Int_t Default);
		Bool_t Get(const Char_t * Res, Bool_t Default);
		Double_t Get(const Char_t * Res, Double_t Default);

		TMrbNamedX * Get(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, TMrbLofNamedX * List);
		inline TMrbNamedX * Get(const Char_t * Res1, const Char_t * Res2, TMrbLofNamedX * List) { return(this->Get(Res1, Res2, NULL, List)); };
		inline TMrbNamedX * Get(const Char_t * Res, TMrbLofNamedX * List) { return(this->Get(Res, NULL, NULL, List)); };

		void Set(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, const Char_t * TrueFalse);
		void Set(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, Bool_t TrueFalse);
		void Set(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, Int_t IntVal, const Char_t * StrVal = NULL, Int_t Base = 10);
		void Set(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, Double_t Value);

		void Set(const Char_t * Res1, const Char_t * Res2, const Char_t * TrueFalse);
		void Set(const Char_t * Res1, const Char_t * Res2, Bool_t TrueFalse);
		void Set(const Char_t * Res1, const Char_t * Res2, Int_t IntVal, const Char_t * StrVal = NULL, Int_t Base = 10);
		void Set(const Char_t * Res1, const Char_t * Res2, Double_t Value);

		void Set(const Char_t * Res, const Char_t * TrueFalse);
		void Set(const Char_t * Res, Bool_t TrueFalse);
		void Set(const Char_t * Res, Int_t IntVal, const Char_t * StrVal = NULL, Int_t Base = 10);
		void Set(const Char_t * Res, Double_t Value);

		void Set(const Char_t * Res1, const Char_t * Res2, const Char_t * Res3, TMrbNamedX * Nx);
		inline void Set(const Char_t * Res1, const Char_t * Res2, TMrbNamedX * Nx) { this->Set(Res1, Res2, NULL, Nx); };
		inline void Set(const Char_t * Res, TMrbNamedX * Nx) { this->Set(Res, NULL, NULL, Nx); };

		inline void Write() {	fEnv->SaveLevel(kEnvChange);
								fEnv->SaveLevel(kEnvLocal);
								fEnv->SaveLevel(kEnvUser); };

		void AddPrefix(const Char_t * Prefix);

		const Char_t * Find(const Char_t * Res1, const Char_t * Res2 = NULL, const Char_t * Res3 = NULL);
		inline const Char_t * Find(const Char_t * Res1, Int_t Index, const Char_t * Res3) { return(this->Find(Res1, Form("%d", Index), Res3)); };

		const Char_t * Replace(TString & String);

		inline TEnv * Env() { return(fEnv); };
		inline const Char_t * GetRcName() { return(fRcName.Data()); };
		inline TObjArray * LofPrefixes() { return(&fLofPrefixes); };

		inline Bool_t IsVerbose() { return(fVerbose); };

  protected:
		void SetIntVal(const Char_t * Resource, Int_t IntVal, const Char_t * StrVal, Int_t Base);

	protected:
		Bool_t Convert(const Char_t * Resource, TString & StrResult, Int_t & IntResult);
		Bool_t ToInteger(const Char_t * Resource, Int_t & IntResult);
		Bool_t ToString(const Char_t * Resource, TString & StrResult);

	protected:
		Bool_t fVerbose;			// kTRUE if verbose mode

		TEnv * fEnv;				// ROOT's TEnv object
		TString fRcName;			// name of rc file
		TObjArray fLofPrefixes; 		// one or more prefixes may be scanned
		TString fLastPrefix;			// last prefix used

		TString fResource;			// temp storage
		TString fResult;			// ...

	ClassDef(TMrbResource, 1)			// [Utils] Access to ROOT environment
};

#endif
 TMrbResource.h:1
 TMrbResource.h:2
 TMrbResource.h:3
 TMrbResource.h:4
 TMrbResource.h:5
 TMrbResource.h:6
 TMrbResource.h:7
 TMrbResource.h:8
 TMrbResource.h:9
 TMrbResource.h:10
 TMrbResource.h:11
 TMrbResource.h:12
 TMrbResource.h:13
 TMrbResource.h:14
 TMrbResource.h:15
 TMrbResource.h:16
 TMrbResource.h:17
 TMrbResource.h:18
 TMrbResource.h:19
 TMrbResource.h:20
 TMrbResource.h:21
 TMrbResource.h:22
 TMrbResource.h:23
 TMrbResource.h:24
 TMrbResource.h:25
 TMrbResource.h:26
 TMrbResource.h:27
 TMrbResource.h:28
 TMrbResource.h:29
 TMrbResource.h:30
 TMrbResource.h:31
 TMrbResource.h:32
 TMrbResource.h:33
 TMrbResource.h:34
 TMrbResource.h:35
 TMrbResource.h:36
 TMrbResource.h:37
 TMrbResource.h:38
 TMrbResource.h:39
 TMrbResource.h:40
 TMrbResource.h:41
 TMrbResource.h:42
 TMrbResource.h:43
 TMrbResource.h:44
 TMrbResource.h:45
 TMrbResource.h:46
 TMrbResource.h:47
 TMrbResource.h:48
 TMrbResource.h:49
 TMrbResource.h:50
 TMrbResource.h:51
 TMrbResource.h:52
 TMrbResource.h:53
 TMrbResource.h:54
 TMrbResource.h:55
 TMrbResource.h:56
 TMrbResource.h:57
 TMrbResource.h:58
 TMrbResource.h:59
 TMrbResource.h:60
 TMrbResource.h:61
 TMrbResource.h:62
 TMrbResource.h:63
 TMrbResource.h:64
 TMrbResource.h:65
 TMrbResource.h:66
 TMrbResource.h:67
 TMrbResource.h:68
 TMrbResource.h:69
 TMrbResource.h:70
 TMrbResource.h:71
 TMrbResource.h:72
 TMrbResource.h:73
 TMrbResource.h:74
 TMrbResource.h:75
 TMrbResource.h:76
 TMrbResource.h:77
 TMrbResource.h:78
 TMrbResource.h:79
 TMrbResource.h:80
 TMrbResource.h:81
 TMrbResource.h:82
 TMrbResource.h:83
 TMrbResource.h:84
 TMrbResource.h:85
 TMrbResource.h:86
 TMrbResource.h:87
 TMrbResource.h:88
 TMrbResource.h:89
 TMrbResource.h:90
 TMrbResource.h:91
 TMrbResource.h:92
 TMrbResource.h:93
 TMrbResource.h:94
 TMrbResource.h:95
 TMrbResource.h:96
 TMrbResource.h:97
 TMrbResource.h:98
 TMrbResource.h:99
 TMrbResource.h:100
 TMrbResource.h:101
 TMrbResource.h:102
 TMrbResource.h:103
 TMrbResource.h:104
 TMrbResource.h:105
 TMrbResource.h:106
 TMrbResource.h:107
 TMrbResource.h:108
 TMrbResource.h:109
 TMrbResource.h:110
 TMrbResource.h:111
 TMrbResource.h:112
 TMrbResource.h:113
 TMrbResource.h:114
 TMrbResource.h:115
 TMrbResource.h:116
 TMrbResource.h:117
 TMrbResource.h:118
 TMrbResource.h:119