ROOT logo
#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

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           utils/inc/TMrbLofNamedX.h
// Purpose:        Define utilities to be used with MARaBOU
// Class:          TMrbLofNamedX    -- a list of named indices
// Description:    Common class definitions to be used within MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbLofNamedX.h,v 1.11 2009-04-02 11:55:52 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "Rtypes.h"
#include "TObjArray.h"
#include "TString.h"
#include "TSystem.h"
#include "TMrbNamedX.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbLofNamedX
// Purpose:        Define a list named indices
// Description:    Class to manage a list of TMrbNamedX objects.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbLofNamedX: public TObjArray {
// the following doesnt work with CINT, wait for ROOT 6 (no more CINT)
//	using TCollection::Print;
	public:
		enum EMrbFindMode		{	kFindExact		=	BIT(0), 	// needs exact matching of key names
									kFindUnique 	= 	BIT(1), 	// key names may be abbreviated uniquely
									kFindIgnoreCase =	BIT(2)		// ignore case while comparing key names
								};

		enum					{	kPatternBit 	=	BIT(31)	};
		enum					{	kIllIndexBit	=	BIT(30)	};

	public:
	
		TMrbLofNamedX(const Char_t * Name = NULL, Bool_t PatternMode = kFALSE); 	// default ctor

		TMrbLofNamedX(const SMrbNamedX * NamedX, Bool_t PatternMode = kFALSE); 		// explicit ctor
		TMrbLofNamedX(const SMrbNamedXShort * NamedX, Bool_t PatternMode = kFALSE);

		~TMrbLofNamedX() { this->Delete(); };										// dtor: delete heap objects

		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);							// add one or more indices
		void AddNamedX(const SMrbNamedXShort * NamedX);					 	// ... (short names only)
		void AddNamedX(TMrbNamedX * NamedX); 								// add a single index to list (clone it)
		void AddNamedX(TMrbLofNamedX * LofNamedX); 	 						// append a list of indices
		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);

																					// find an index by its name
		TMrbNamedX * FindByName(const Char_t * ShortName, UInt_t FindMode = TMrbLofNamedX::kFindExact) const;
		TMrbNamedX * FindByIndex(Int_t Index, Int_t Mask = 0xFFFFFFFF) const; 			// find an index
		
		UInt_t FindPattern(const Char_t * IndexString,								// find a compound index
							UInt_t FindMode = TMrbLofNamedX::kFindExact,
							const Char_t * Delim = ":") const;

		Bool_t FindByDialog(TString & Result, 									// dialog mode
							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,	// check index string
							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;											// return mask of all bits in list

		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;	// show list of indices
		inline void Print() const { Print(cout, "", 0xffffffff); };

		void PrintNames(ostream & Out = cout, 						// print names in one line
						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);						// sort entries by name or index
		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)		// [Utils] A list of named indices
};

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