ROOT logo
#ifndef __TMrbString_h__
#define __TMrbString_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           utils/inc/TMrbString.h
// Purpose:        Define utilities to be used with MARaBOU
// Class:          TMrbString     -- a TString providing number conversion
// Description:    Common class definitions to be used within MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbString.h,v 1.13 2011-05-18 11:04:49 Marabou Exp $
// Date:
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "Rtypes.h"
#include "RVersion.h"
#include "TString.h"
#include "TSystem.h"

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

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbString
// Purpose:        Provide type conversion
// Description:    Type conversion for strings
//                 Based on original TString class.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbString : public TString {

	public:
		enum		{	kDefaultBase		=	10	};
		enum		{	kDefaultPrecision	=	2	};

	public:
		TMrbString();									// default ctor
		TMrbString(const Char_t * Str);					// ctor: same as TString

		TMrbString(Int_t IntVal,							// a string consisting of an integer
					Int_t Width = 0,
					Int_t Base = TMrbString::kDefaultBase,
					Bool_t PadZero = kFALSE,
					Bool_t AddBasePrefix = kTRUE,
					Bool_t LowerCaseHex = kTRUE) {
						fBase = Base;
						this->FromInteger(IntVal, Width, Base, PadZero, AddBasePrefix, LowerCaseHex);
					};

		TMrbString(Double_t DblVal, 						// a string consisting of a double
					Int_t Width = 0,
					Int_t Precision = TMrbString::kDefaultPrecision,
					Bool_t PadZero = kFALSE) {
						fBase = TMrbString::kDefaultBase;
						this->FromDouble(DblVal, Width, Precision, PadZero);
					};

		TMrbString(const Char_t * Prefix, 						// string + trailing integer
					Int_t IntVal,
					Int_t Width = 0,
					Int_t Base = TMrbString::kDefaultBase,
					Bool_t PadZero = kTRUE,
					Bool_t AddBasePrefix = kTRUE,
					Bool_t LowerCaseHex = kTRUE) : TString(Prefix) {
						fBase = Base;
						this->AppendInteger(IntVal, Width, Base, PadZero, AddBasePrefix, LowerCaseHex);
					};

		TMrbString(const Char_t * Prefix, 						// string + trailing double
					Double_t DblVal,
					Int_t Width = 0,
					Int_t Precision = TMrbString::kDefaultPrecision,
					Bool_t PadZero = kTRUE) : TString(Prefix) {
						fBase = TMrbString::kDefaultBase;
						this->AppendDouble(DblVal, Width, Precision, PadZero);
					};

		~TMrbString() {};									// default dtor

		TMrbString & FromInteger(Int_t IntVal,				// convert integer to string
									Int_t Width = 0,
									Int_t Base = 0,
									Bool_t PadZero = kFALSE,
									Bool_t AddBasePrefix = kTRUE,
									Bool_t LowerCaseHex = kTRUE);

		TMrbString & AppendInteger(Int_t IntVal,			// append integer to string
									Int_t Width = 0,
									Int_t Base = 0,
									Bool_t PadZero = kFALSE,
									Bool_t AddBasePrefix = kTRUE,
									Bool_t LowerCaseHex = kTRUE);

		Bool_t ToInteger(Int_t & IntVal, Int_t Base = 0);	// convert string to integer

		TMrbString & FromDouble(Double_t DblVal, 			// convert double to string
									Int_t Width = 0,
									Int_t Precision = TMrbString::kDefaultPrecision,
									Bool_t PadZero = kFALSE);

		TMrbString & AppendDouble(Double_t DblVal,			// append double to string
									Int_t Width = 0,
									Int_t Precision = TMrbString::kDefaultPrecision,
									Bool_t PadZero = kTRUE);

		Bool_t ToDouble(Double_t & DblVal);					// convert string -> double

		Bool_t SplitOffInteger(TString & Prefix,			// split off trailing integer
									Int_t & IntVal,
									Int_t Base = TMrbString::kDefaultBase);

		Bool_t Increment(Int_t Increment = 1,				// increment trailing integer
									Int_t Base = TMrbString::kDefaultBase);

		Bool_t SplitOffDouble(TString & Prefix, Double_t DblVal);		// split off trailing double

		Bool_t Increment(Double_t Increment);				// increment trailing double

		Int_t Split(TObjArray & LofSubStrings, const Char_t * Separator = ":", Bool_t RemoveWhiteSpace = kFALSE); // split into substrings

		Bool_t Encode(UInt_t & IntVal, SMrbNamedXShort * LofSubStrings, const Char_t * Separator = ":",	// convert option string to number
									UInt_t Mode = TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
		Bool_t Encode(UInt_t & IntVal, const Char_t * LofSubStrings, const Char_t * Separator = ":",
									UInt_t Mode = TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
		Bool_t Encode(UInt_t & IntVal, TMrbLofNamedX * LofSubStrings, const Char_t * Separator = ":",
									UInt_t Mode = TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
		Bool_t Decode(UInt_t IntVal, SMrbNamedXShort * LofSubStrings, const Char_t * Separator = ":");		// convert number to option string
		Bool_t Decode(UInt_t IntVal, const Char_t * LofSubStrings, const Char_t * Separator = ":");
		Bool_t Decode(UInt_t IntVal, TMrbLofNamedX * LofSubStrings, const Char_t * Separator = ":");

		Int_t ReplaceWhiteSpace(const Char_t WhiteSpace = ' ');		// replace multiple white spaces (blanks or tabs) by given one

		void Expand(const Char_t Escape = '%');									// expand string
		virtual void ProcessEscapeSequence(Char_t CharId, TString & Replacement);

 		inline TMrbString & operator=(const Int_t n) { return(FromInteger(n)); };
		inline TMrbString & operator=(const Double_t d) { return(FromDouble(d)); };
		inline TMrbString & operator+=(const Int_t n) { return(AppendInteger(n)); };
		inline TMrbString & operator+=(const Double_t d) { return(AppendDouble(d)); };

		inline TMrbString & operator=(const Char_t * s) {
			if (s == NULL) s = ""; return((TMrbString &) this->Replace(0, Length(), s, strlen(s)));
		};
		inline TMrbString & operator=(const TMrbString & s) { return((TMrbString &) this->Replace(0, Length(), s.Data(), s.Length())); };
		inline TMrbString & operator+=(const Char_t * s) {
			if (s == NULL) s = ""; return((TMrbString &) this->Append(s, strlen(s)));
		};
		inline TMrbString & operator+=(const TString & s) { return((TMrbString &) this->Append(s.Data(), s.Length())); };

		inline TMrbString & operator=(const TSubString & s) { TString tmp = s; *this = tmp; return(*this); };

		inline const Char_t * Fill(Int_t n, const Char_t * Pattern = " ", Int_t Pos = 0) { if (n > 0) { for (; n--;) Insert(Pos, Pattern); } return(this->Data()); };

		inline void SetBase(Int_t Base) { fBase = Base; };
		inline void ResetBase() { fBase = TMrbString::kDefaultBase; };

 	protected:
		Bool_t CheckBase(Int_t Base, Char_t * Method) const;	// check base
		Int_t CheckInteger(Int_t Base) const;					// check if string valid integer
		Int_t CheckDouble() const; 								// check if string valid double

	protected:
		Int_t fBase;

	ClassDef(TMrbString, 0) 	// [Utils] Strings with integer/float numbers
};

#endif
 TMrbString.h:1
 TMrbString.h:2
 TMrbString.h:3
 TMrbString.h:4
 TMrbString.h:5
 TMrbString.h:6
 TMrbString.h:7
 TMrbString.h:8
 TMrbString.h:9
 TMrbString.h:10
 TMrbString.h:11
 TMrbString.h:12
 TMrbString.h:13
 TMrbString.h:14
 TMrbString.h:15
 TMrbString.h:16
 TMrbString.h:17
 TMrbString.h:18
 TMrbString.h:19
 TMrbString.h:20
 TMrbString.h:21
 TMrbString.h:22
 TMrbString.h:23
 TMrbString.h:24
 TMrbString.h:25
 TMrbString.h:26
 TMrbString.h:27
 TMrbString.h:28
 TMrbString.h:29
 TMrbString.h:30
 TMrbString.h:31
 TMrbString.h:32
 TMrbString.h:33
 TMrbString.h:34
 TMrbString.h:35
 TMrbString.h:36
 TMrbString.h:37
 TMrbString.h:38
 TMrbString.h:39
 TMrbString.h:40
 TMrbString.h:41
 TMrbString.h:42
 TMrbString.h:43
 TMrbString.h:44
 TMrbString.h:45
 TMrbString.h:46
 TMrbString.h:47
 TMrbString.h:48
 TMrbString.h:49
 TMrbString.h:50
 TMrbString.h:51
 TMrbString.h:52
 TMrbString.h:53
 TMrbString.h:54
 TMrbString.h:55
 TMrbString.h:56
 TMrbString.h:57
 TMrbString.h:58
 TMrbString.h:59
 TMrbString.h:60
 TMrbString.h:61
 TMrbString.h:62
 TMrbString.h:63
 TMrbString.h:64
 TMrbString.h:65
 TMrbString.h:66
 TMrbString.h:67
 TMrbString.h:68
 TMrbString.h:69
 TMrbString.h:70
 TMrbString.h:71
 TMrbString.h:72
 TMrbString.h:73
 TMrbString.h:74
 TMrbString.h:75
 TMrbString.h:76
 TMrbString.h:77
 TMrbString.h:78
 TMrbString.h:79
 TMrbString.h:80
 TMrbString.h:81
 TMrbString.h:82
 TMrbString.h:83
 TMrbString.h:84
 TMrbString.h:85
 TMrbString.h:86
 TMrbString.h:87
 TMrbString.h:88
 TMrbString.h:89
 TMrbString.h:90
 TMrbString.h:91
 TMrbString.h:92
 TMrbString.h:93
 TMrbString.h:94
 TMrbString.h:95
 TMrbString.h:96
 TMrbString.h:97
 TMrbString.h:98
 TMrbString.h:99
 TMrbString.h:100
 TMrbString.h:101
 TMrbString.h:102
 TMrbString.h:103
 TMrbString.h:104
 TMrbString.h:105
 TMrbString.h:106
 TMrbString.h:107
 TMrbString.h:108
 TMrbString.h:109
 TMrbString.h:110
 TMrbString.h:111
 TMrbString.h:112
 TMrbString.h:113
 TMrbString.h:114
 TMrbString.h:115
 TMrbString.h:116
 TMrbString.h:117
 TMrbString.h:118
 TMrbString.h:119
 TMrbString.h:120
 TMrbString.h:121
 TMrbString.h:122
 TMrbString.h:123
 TMrbString.h:124
 TMrbString.h:125
 TMrbString.h:126
 TMrbString.h:127
 TMrbString.h:128
 TMrbString.h:129
 TMrbString.h:130
 TMrbString.h:131
 TMrbString.h:132
 TMrbString.h:133
 TMrbString.h:134
 TMrbString.h:135
 TMrbString.h:136
 TMrbString.h:137
 TMrbString.h:138
 TMrbString.h:139
 TMrbString.h:140
 TMrbString.h:141
 TMrbString.h:142
 TMrbString.h:143
 TMrbString.h:144
 TMrbString.h:145
 TMrbString.h:146
 TMrbString.h:147
 TMrbString.h:148
 TMrbString.h:149
 TMrbString.h:150
 TMrbString.h:151
 TMrbString.h:152
 TMrbString.h:153
 TMrbString.h:154
 TMrbString.h:155
 TMrbString.h:156
 TMrbString.h:157
 TMrbString.h:158
 TMrbString.h:159
 TMrbString.h:160
 TMrbString.h:161
 TMrbString.h:162
 TMrbString.h:163
 TMrbString.h:164
 TMrbString.h:165
 TMrbString.h:166
 TMrbString.h:167
 TMrbString.h:168
 TMrbString.h:169
 TMrbString.h:170
 TMrbString.h:171