ROOT logo
#ifndef __TMrbEnv_h__
#define __TMrbEnv_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           utils/inc/TMrbEnv.h
// Purpose:        Define utilities to be used with MARaBOU
// Class:          TMrbEnv       -- provide an extended TEnv
// Description:    Common class definitions to be used within MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbEnv.h,v 1.8 2006-10-31 15:46:33 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "Rtypes.h"
#include "TObject.h"
#include "TString.h"
#include "TList.h"
#include "TEnv.h"
#include "TSystem.h"
#include "TRegexp.h"

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

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbEnv
// Purpose:        Handle resource files
// Description:    Provides a means to handle resource files (e.g. .rootrc)
//                 Based on original TEnv class.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbEnv : public TObject {

	public:
		TMrbEnv(const Char_t * ResourceFile = "", const Char_t * DefaultsFile = "");	// explicit ctor: names of resource files

		~TMrbEnv() {								// dtor: delete heap objects
			if (!fIsSystemEnv) delete fCurEnv;
			delete fDefaultsEnv;
		};

		TMrbEnv(const TMrbEnv &) {};				// default copy ctor

		Bool_t Open(const Char_t * ResourceFile);								// open resource file
		Bool_t OpenDefaults(const Char_t * DefaultsFile);						// open defaults file
		void Save(Bool_t Verbose = kTRUE);										// save contents 
		void SetPrefix(const Char_t * Prefix);									// define resource prefix

		Bool_t Set(const Char_t * Resource, const Char_t * StrVal); 			// set ascii value
		Bool_t Set(const Char_t * Resource, Int_t IntVal, Int_t Base = 10);		// set integer value
		Bool_t Set(const Char_t * Resource, Double_t DblVal, Int_t Precision = 4);	// set float value
		Bool_t Set(const Char_t * Resource, TMrbNamedX * NamedVal, Int_t Base = 10);	// set ascii(int)

																				// get resource value
		Int_t Get(const Char_t * Resource, Int_t Default);						// ... integer
		Double_t Get(const Char_t * Resource, Double_t Default);				// ... float
		const Char_t * Get(TString & Result, const Char_t * Resource, const Char_t * Default = ""); 	// ... ascii
		const Char_t * Get(TMrbNamedX & Result, const Char_t * Resource, const Char_t * Default = "");	// ... ascii(int)

																				// find resource value
		Int_t Find(const Char_t * LofPrefixes, const Char_t * Resource, Int_t Default);			// ... integer
		const Char_t * Find(TString & Result, const Char_t * LofPrefixes, const Char_t * Resource, const Char_t * Default = ""); 	// ... ascii
		const Char_t * Find(TMrbNamedX & Result, const Char_t * LofPrefixes, const Char_t * Resource, const Char_t * Default = "");	// ... ascii(int)

																				// get default resource value
		Int_t GetDefault(const Char_t * Resource, Int_t Default);				// ... integer
		const Char_t * GetDefault(TString & Result, const Char_t * Resource, const Char_t * Default = "");	// ... ascii

																				// set resource(s) from defaults
		Int_t CopyDefaults(const Char_t * Resource, Bool_t ExactMatch = kTRUE, Bool_t OverWrite = kFALSE, TMrbLofNamedX * LofSubstitutions = NULL);
		Int_t CopyDefaults(const TRegexp & Regexp, Bool_t OverWrite = kFALSE, TMrbLofNamedX * LofSubstitutions = NULL);

		Int_t SetUndef(const Char_t * Resource, Bool_t ExactMatch = kTRUE);		// deactivate resource(s)
		Int_t SetUndef(const TRegexp & Regexp);

		Int_t Remove(const Char_t * Resource, Bool_t ExactMatch = kTRUE);		// remove resource from file
		Int_t Remove(const TRegexp & Regexp);
		Int_t Purge(Bool_t Verbose = kFALSE);									// remove undef resources

		void Print(Option_t * Option) const { TObject::Print(Option); }
		inline void Print() const { fCurEnv->Print(); };								// print current settings
		inline void PrintDefaults() const { if (this->HasDefaults()) fDefaultsEnv->Print(); };	// print default settings												// print default settings
		void PrintInfo();														// print file info

		inline TEnv * GetEnv() { return(fCurEnv); };

		const Char_t * Resource(TString & R,	const Char_t * F1, Int_t X1 = -1,	// init resource name
												const Char_t * F2 = "", Int_t X2 = -1,
												const Char_t * F3 = "") const;

		inline Bool_t HasDefaults() const { return(fDefaultsEnv != NULL); };			// default file open?
		inline Bool_t IsModified() const { return(fIsModified); };					// modified?

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		TString fCurFile;				// path to current resource file
		TEnv * fCurEnv;					// current resource data base 

		Bool_t fIsModified; 			// kTRUE, if at least 1 entry modified
		Bool_t fIsSystemEnv;			// if mapped to gEnv

		TString fDefaultsFile;			// path to default resource file
		TEnv * fDefaultsEnv;			// defaults data base

		TString fResourceName;			// resource name
		TString fPrefix;				// prefix

	ClassDef(TMrbEnv, 1)		// [Utils] Some extensions to TEnv class
};

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