#ifndef __TMrbLofNamedX_h__
#define __TMrbLofNamedX_h__
#ifndef __CINT__
#ifndef USECLANG
#define USECLANG = strcmp(CXX,"clang++")
#endif
#if USELANG == 1
#pragma clang diagnostic ignored "-Woverloaded-virtual"
#endif
#endif
#include "Rtypes.h"
#include "TObjArray.h"
#include "TString.h"
#include "TSystem.h"
#include "TMrbNamedX.h"
class TMrbLofNamedX: public TObjArray {
public:
enum EMrbFindMode { kFindExact = BIT(0),
kFindUnique = BIT(1),
kFindIgnoreCase = BIT(2)
};
enum { kPatternBit = BIT(31) };
enum { kIllIndexBit = BIT(30) };
public:
TMrbLofNamedX(const Char_t * Name = NULL, Bool_t PatternMode = kFALSE);
TMrbLofNamedX(const SMrbNamedX * NamedX, Bool_t PatternMode = kFALSE);
TMrbLofNamedX(const SMrbNamedXShort * NamedX, Bool_t PatternMode = kFALSE);
~TMrbLofNamedX() { this->Delete(); };
inline void SetName(const Char_t * Name) { fName = Name; };
inline const Char_t * GetName() const { return(fName); };
inline void SetTitle(const Char_t * Title) { fTitle = Title; };
inline const Char_t * GetTitle() const { return(fTitle); };
inline void SetObject(const Char_t * Name, const Char_t * Title) { fName = Name; fTitle = Title; };
inline void SetPatternMode(Bool_t Flag = kTRUE) { fPatternMode = Flag; };
inline Bool_t IsPatternMode() const { return(fPatternMode); };
void AddNamedX(const SMrbNamedX * NamedX);
void AddNamedX(const SMrbNamedXShort * NamedX);
void AddNamedX(TMrbNamedX * NamedX);
void AddNamedX(TMrbLofNamedX * LofNamedX);
TMrbNamedX * AddNamedX(Int_t Index, const Char_t * Name, const Char_t * Title = "", TObject * Object = NULL);
void AddNamedX(const Char_t * NameString, const Char_t * Delim = ":", Bool_t PatternMode = kFALSE);
TMrbNamedX * FindByName(const Char_t * ShortName, UInt_t FindMode = TMrbLofNamedX::kFindExact) const;
TMrbNamedX * FindByIndex(Int_t Index, Int_t Mask = 0xFFFFFFFF) const;
UInt_t FindPattern(const Char_t * IndexString,
UInt_t FindMode = TMrbLofNamedX::kFindExact,
const Char_t * Delim = ":") const;
Bool_t FindByDialog(TString & Result,
const TString & ShortName,
UInt_t FindMode = TMrbLofNamedX::kFindExact,
const Char_t * Delim = "") const;
UInt_t CheckPattern(const Char_t * ClassNameL, const Char_t * Method, const Char_t * IndexString,
const SMrbNamedX * NamedX = NULL,
UInt_t Mode = TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
inline UInt_t CheckPatternShort(const Char_t * ClassNameL, const Char_t * Method, const Char_t * IndexString,
const SMrbNamedXShort * NamedX = NULL,
UInt_t Mode = TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase) {
if (NamedX != NULL) this->AddNamedX(NamedX);
return(this->CheckPattern(ClassNameL, Method, IndexString, NULL, Mode));
};
const Char_t * Pattern2String(TString & IndexString, UInt_t Pattern, const Char_t * Delim = ":") const;
UInt_t GetMask() const;
void Print(Option_t * Option) const { TObject::Print(Option); }
void Print(Option_t * Wildcard, Option_t * Option) const { TCollection::Print(Wildcard, Option); }
void Print(ostream & Out, const Char_t * Prefix = "", UInt_t Mask = 0xffffffff) const;
inline void Print() const { Print(cout, "", 0xffffffff); };
void PrintNames(ostream & Out = cout,
const Char_t * Prefix = "",
UInt_t Mask = 0xffffffff,
Bool_t CrFlag = kTRUE) const;
inline virtual void Sort(Int_t UpTo) { TObjArray::Sort(UpTo); };
void Sort(Bool_t SortByName = kTRUE);
inline Bool_t IsSorted() const { return(fIsSorted); };
inline Bool_t IsSorted(Bool_t & ByName) { ByName = fIsSortedByName; return(fIsSorted); };
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
Bool_t fPatternMode;
Bool_t fIsSorted;
Bool_t fIsSortedByName;
TString fName;
TString fTitle;
ClassDef(TMrbLofNamedX, 1)
};
#endif