#ifndef __TMrbString_h__
#define __TMrbString_h__
#include "Rtypes.h"
#include "RVersion.h"
#include "TString.h"
#include "TSystem.h"
#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
class TMrbString : public TString {
public:
enum { kDefaultBase = 10 };
enum { kDefaultPrecision = 2 };
public:
TMrbString();
TMrbString(const Char_t * Str);
TMrbString(Int_t IntVal,
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,
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,
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,
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() {};
TMrbString & FromInteger(Int_t IntVal,
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,
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);
TMrbString & FromDouble(Double_t DblVal,
Int_t Width = 0,
Int_t Precision = TMrbString::kDefaultPrecision,
Bool_t PadZero = kFALSE);
TMrbString & AppendDouble(Double_t DblVal,
Int_t Width = 0,
Int_t Precision = TMrbString::kDefaultPrecision,
Bool_t PadZero = kTRUE);
Bool_t ToDouble(Double_t & DblVal);
Bool_t SplitOffInteger(TString & Prefix,
Int_t & IntVal,
Int_t Base = TMrbString::kDefaultBase);
Bool_t Increment(Int_t Increment = 1,
Int_t Base = TMrbString::kDefaultBase);
Bool_t SplitOffDouble(TString & Prefix, Double_t DblVal);
Bool_t Increment(Double_t Increment);
Int_t Split(TObjArray & LofSubStrings, const Char_t * Separator = ":", Bool_t RemoveWhiteSpace = kFALSE);
Bool_t Encode(UInt_t & IntVal, SMrbNamedXShort * LofSubStrings, const Char_t * Separator = ":",
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 = ":");
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 = ' ');
void Expand(const Char_t Escape = '%');
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;
Int_t CheckInteger(Int_t Base) const;
Int_t CheckDouble() const;
protected:
Int_t fBase;
ClassDef(TMrbString, 0)
};
#endif