ROOT logo
#ifndef __TMrbNamedX_h__
#define __TMrbNamedX_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           utils/inc/TMrbNamedX.h
// Purpose:        Define utilities to be used with MARaBOU
// Class:          TMrbNamedX    -- a TNamed with an index assigned
// Description:    Common class definitions to be used within MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbNamedX.h,v 1.9 2007-07-27 11:17:23 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

#include <cstdlib>
#include <iostream>
#include <iomanip>

#include "Rtypes.h"
#include "TObject.h"
#include "TNamed.h"
#include "TSystem.h"
#include "TString.h"

//_______________________________________________________________[C STRUCTURE]
//////////////////////////////////////////////////////////////////////////////
// Name:           SMrbNamedXShort, SMrbNamedX
// Purpose:        Define a named index
// Struct members: Char_t * sname    -- short name
//                 Char_t * lname    -- long name
//                 Int_t index       -- index
// Description:    SMrbNamedX defines a triple (index,sname,lname),
//                 SMrbNamedXShort a pair (index,sname).
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

struct sMrbNamedX {
	Int_t Index;
	Char_t * ShortName;
	Char_t * LongName;
};

typedef struct sMrbNamedX SMrbNamedX;

struct sMrbNamedXShort {
	Int_t Index;
	const Char_t * ShortName;
};

typedef struct sMrbNamedXShort SMrbNamedXShort;

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbNamedX
// Purpose:        A TNamed having an index and an opt. object assigned
// Description:    Defines a triple (index,sname,lname).
//                 a TObject may be assigned to it.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbNamedX: public TNamed {

	public:
		TMrbNamedX() {					// default ctor
			fHasTitle = kFALSE;
			fIndex = -1;
			fObject = NULL;
		};

		TMrbNamedX(Int_t Index,			// ctor: index, short name, long name (opt.), and associated object (opt.)
					const Char_t * ShortName,
					const Char_t * LongName = NULL,
					TObject * Obj = NULL) : TNamed(ShortName, LongName ? LongName : ShortName) { 	// ctor
			fHasTitle = (LongName != NULL);
			fIndex = Index;
			fSortedByName = kFALSE;
			fObject = Obj;
		};

		~TMrbNamedX() {};				// default dtor

																				// return short name + long name (+ index)
		const Char_t * GetFullName(TString & FullName, Int_t Base = 10, Bool_t IndexFlag = kFALSE) const;

		inline Int_t GetIndex() const { return(fIndex); };							// return index
		inline void ChangeIndex(Int_t Index) { fIndex = Index; };					// change index
		inline void AssignObject(TObject * Obj) { fObject = Obj; }; 			// assign an object to this index
		inline TObject * GetAssignedObject() const { return(fObject); };				// return addr of assigned object

		inline void Set(Int_t Index, const Char_t * ShortName = NULL, const Char_t * LongName = NULL) { // set values
			fHasTitle = (LongName != NULL);
			fIndex = Index;
			if (ShortName) this->SetName(ShortName);
			this->SetTitle(LongName ? LongName : this->GetName());
		};
		inline void Set(TMrbNamedX * NamedX) {
			this->Set(NamedX->GetIndex(), NamedX->GetName(), NamedX->GetTitle());
		};
		inline void SetIndex(Int_t Index) { fIndex = Index; };

		inline Bool_t HasTitle() const { return(fHasTitle); }; 				// title (long name) given?

		void Print(Option_t * Option) const { TObject::Print(Option); }
		void Print(ostream & Out, Int_t Base = 10, Bool_t CrFlag = kTRUE) const; 	// print data
		inline void Print(Int_t Base) const { Print(cout, Base, kTRUE); };
		inline void Print() const { Print(cout, 10, kTRUE); };

		inline Bool_t IsSortable() const { return(kTRUE); };							// entries may be sorted
		inline void SortByName(Bool_t SortFlag = kTRUE) { fSortedByName = SortFlag; };	// by name or by index
		inline Bool_t IsSortedByName() const { return(fSortedByName); };
		Int_t Compare(const TObject * Nx) const; 							// how to compare TMrbNamedX objects
		
		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		Bool_t fHasTitle;
		Int_t fIndex;
		Bool_t fSortedByName;
		TObject * fObject;

	ClassDef(TMrbNamedX, 1) 	// [Utils] A named index: <Index, Name, Title [,Object]>
};

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